- #2493, Fix behavior of ST_DumpValues when passed an empty raster
- #2512, Support for foreign tables and materialized views in
raster_columns and raster_overviews
+ - #2532, Add missing raster/geometry commutator operators
* Code refactoring *
AS 'select $1::geometry ~ $2'
LANGUAGE 'sql' IMMUTABLE STRICT;
+CREATE OR REPLACE FUNCTION raster_contained_by_geometry(raster, geometry)
+ RETURNS bool
+ AS 'select $1::geometry @ $2'
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+
CREATE OR REPLACE FUNCTION raster_geometry_overlap(raster, geometry)
RETURNS bool
AS 'select $1::geometry && $2'
AS 'select $1 ~ $2::geometry'
LANGUAGE 'sql' IMMUTABLE STRICT;
+CREATE OR REPLACE FUNCTION geometry_contained_by_raster(geometry, raster)
+ RETURNS bool
+ AS 'select $1 @ $2::geometry'
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+
CREATE OR REPLACE FUNCTION geometry_raster_overlap(geometry, raster)
RETURNS bool
AS 'select $1 && $2::geometry'
-- COMMUTATOR = '@', -- see http://trac.osgeo.org/postgis/ticket/2532
RESTRICT = contsel, JOIN = contjoinsel
);
-
+
+CREATE OPERATOR @ (
+ LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_contained_by_geometry,
+ COMMUTATOR = '~',
+ RESTRICT = contsel, JOIN = contjoinsel
+ );
+
CREATE OPERATOR && (
LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_geometry_overlap,
COMMUTATOR = '&&',
-- COMMUTATOR = '@', -- see http://trac.osgeo.org/postgis/ticket/2532
RESTRICT = contsel, JOIN = contjoinsel
);
-
+
+CREATE OPERATOR @ (
+ LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_contained_by_raster,
+ COMMUTATOR = '~',
+ RESTRICT = contsel, JOIN = contjoinsel
+ );
+
CREATE OPERATOR && (
LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_raster_overlap,
COMMUTATOR = '&&',
DROP CAST IF EXISTS (raster AS geometry);
CREATE CAST (raster AS geometry)
WITH FUNCTION st_convexhull(raster) AS ASSIGNMENT;
+
+-- add missing OPERATORs
+DO LANGUAGE 'plpgsql' $$
+BEGIN
+ IF NOT EXISTS (
+ SELECT
+ proname
+ FROM pg_proc f
+ JOIN pg_type r
+ ON r.typname = 'raster'
+ AND (f.proargtypes::oid[])[0] = r.oid
+ JOIN pg_type g
+ ON g.typname = 'geometry'
+ AND (f.proargtypes::oid[])[1] = g.oid
+ WHERE proname = 'raster_contained_by_geometry'
+ ) THEN
+ CREATE OR REPLACE FUNCTION raster_contained_by_geometry(raster, geometry)
+ RETURNS bool
+ AS 'select $1::geometry @ $2'
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+ CREATE OPERATOR @ (
+ LEFTARG = raster, RIGHTARG = geometry, PROCEDURE = raster_contained_by_geometry,
+ COMMUTATOR = '~',
+ RESTRICT = contsel, JOIN = contjoinsel
+ );
+ END IF;
+
+ IF NOT EXISTS (
+ SELECT
+ proname
+ FROM pg_proc f
+ JOIN pg_type r
+ ON r.typname = 'raster'
+ AND (f.proargtypes::oid[])[1] = r.oid
+ JOIN pg_type g
+ ON g.typname = 'geometry'
+ AND (f.proargtypes::oid[])[0] = g.oid
+ WHERE proname = 'geometry_contained_by_raster'
+ ) THEN
+ CREATE OR REPLACE FUNCTION geometry_contained_by_raster(geometry, raster)
+ RETURNS bool
+ AS 'select $1 @ $2::geometry'
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+ CREATE OPERATOR @ (
+ LEFTARG = geometry, RIGHTARG = raster, PROCEDURE = geometry_contained_by_raster,
+ COMMUTATOR = '~',
+ RESTRICT = contsel, JOIN = contjoinsel
+ );
+ END IF;
+END;
+$$;
-- #1485
SELECT '#1485', count(*) FROM geometry_columns
WHERE f_table_name = 'raster_columns';
+
+-- #2532
+SELECT NULL::raster @ null::geometry;
+SELECT NULL::geometry @ null::raster;