Last active
January 3, 2019 20:54
-
-
Save genslein/e9ed84c3698dfff2aaef54b393efd8de to your computer and use it in GitHub Desktop.
Postgis 2.3.0 to 2.4.x upgrade operator bugfix
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
-- Remediation from dictated changeset | |
-- https://github.com/postgis/postgis/commit/f49d42880f2aad1e23daaf5930fb66ec359a11a2#diff-821927f099d6d61ff6b9fc149d7bc071R289 | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION contains_2d(box2df, geometry) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_contains_box2df_geom_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION is_contained_2d(box2df, geometry) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_within_box2df_geom_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_2d(box2df, geometry) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_overlaps_box2df_geom_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_2d(box2df, box2df) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_contains_box2df_box2df_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION contains_2d(box2df, box2df) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_contains_box2df_box2df_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION is_contained_2d(box2df, box2df) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_contains_box2df_box2df_2d' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.~ ( | |
LEFTARG = box2df, | |
RIGHTARG = geometry, | |
PROCEDURE = contains_2d, | |
COMMUTATOR = @ | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.@ ( | |
LEFTARG = box2df, | |
RIGHTARG = geometry, | |
PROCEDURE = is_contained_2d, | |
COMMUTATOR = ~ | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = box2df, | |
RIGHTARG = geometry, | |
PROCEDURE = overlaps_2d, | |
COMMUTATOR = && | |
); | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION contains_2d(geometry, box2df) | |
RETURNS boolean | |
AS | |
'SELECT $2 OPERATOR(@extschema@.@) $1;' | |
LANGUAGE SQL IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION is_contained_2d(geometry, box2df) | |
RETURNS boolean | |
AS | |
'SELECT $2 OPERATOR(@extschema@.~) $1;' | |
LANGUAGE SQL IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_2d(geometry, box2df) | |
RETURNS boolean | |
AS | |
'SELECT $2 OPERATOR(@extschema@.&&) $1;' | |
LANGUAGE SQL IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.~ ( | |
LEFTARG = geometry, | |
RIGHTARG = box2df, | |
COMMUTATOR = @, | |
PROCEDURE = contains_2d | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.@ ( | |
LEFTARG = geometry, | |
RIGHTARG = box2df, | |
COMMUTATOR = ~, | |
PROCEDURE = is_contained_2d | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = geometry, | |
RIGHTARG = box2df, | |
PROCEDURE = overlaps_2d, | |
COMMUTATOR = && | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = box2df, | |
RIGHTARG = box2df, | |
PROCEDURE = overlaps_2d, | |
COMMUTATOR = && | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.@ ( | |
LEFTARG = box2df, | |
RIGHTARG = box2df, | |
PROCEDURE = is_contained_2d, | |
COMMUTATOR = ~ | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.~ ( | |
LEFTARG = box2df, | |
RIGHTARG = box2df, | |
PROCEDURE = contains_2d, | |
COMMUTATOR = @ | |
); | |
---------------------------- | |
-- nd operators -- | |
---------------------------- | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_nd(gidx, geometry) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_gidx_geom_overlaps' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_nd(gidx, gidx) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_gidx_gidx_overlaps' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&&& ( | |
LEFTARG = gidx, | |
RIGHTARG = geometry, | |
PROCEDURE = overlaps_nd, | |
COMMUTATOR = &&& | |
); | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_nd(geometry, gidx) | |
RETURNS boolean | |
AS | |
'SELECT $2 OPERATOR(@extschema@.&&&) $1;' | |
LANGUAGE SQL IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&&& ( | |
LEFTARG = geometry, | |
RIGHTARG = gidx, | |
PROCEDURE = overlaps_nd, | |
COMMUTATOR = &&& | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&&& ( | |
LEFTARG = gidx, | |
RIGHTARG = gidx, | |
PROCEDURE = overlaps_nd, | |
COMMUTATOR = &&& | |
); | |
------------------------------ | |
-- Create operator families -- | |
------------------------------ | |
------------- | |
-- 2D case -- | |
------------- | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION geom2d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','geom2d_brin_inclusion_add_value' | |
LANGUAGE 'c'; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION geom3d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','geom3d_brin_inclusion_add_value' | |
LANGUAGE 'c'; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION geom4d_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','geom4d_brin_inclusion_add_value' | |
LANGUAGE 'c'; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR CLASS brin_geometry_inclusion_ops_2d | |
DEFAULT FOR TYPE geometry | |
USING brin AS | |
FUNCTION 1 brin_inclusion_opcinfo(internal), | |
FUNCTION 2 geom2d_brin_inclusion_add_value(internal, internal, internal, internal), | |
FUNCTION 3 brin_inclusion_consistent(internal, internal, internal), | |
FUNCTION 4 brin_inclusion_union(internal, internal, internal), | |
OPERATOR 3 &&(box2df, box2df), | |
OPERATOR 3 &&(box2df, geometry), | |
OPERATOR 3 &&(geometry, box2df), | |
OPERATOR 3 &&(geometry, geometry), | |
OPERATOR 7 ~(box2df, box2df), | |
OPERATOR 7 ~(box2df, geometry), | |
OPERATOR 7 ~(geometry, box2df), | |
OPERATOR 7 ~(geometry, geometry), | |
OPERATOR 8 @(box2df, box2df), | |
OPERATOR 8 @(box2df, geometry), | |
OPERATOR 8 @(geometry, box2df), | |
OPERATOR 8 @(geometry, geometry), | |
STORAGE box2df; | |
------------- | |
-- 3D case -- | |
------------- | |
-- Availability: 2.3.0 | |
CREATE OPERATOR CLASS brin_geometry_inclusion_ops_3d | |
FOR TYPE geometry | |
USING brin AS | |
FUNCTION 1 brin_inclusion_opcinfo(internal) , | |
FUNCTION 2 geom3d_brin_inclusion_add_value(internal, internal, internal, internal), | |
FUNCTION 3 brin_inclusion_consistent(internal, internal, internal), | |
FUNCTION 4 brin_inclusion_union(internal, internal, internal), | |
OPERATOR 3 &&&(geometry, geometry), | |
OPERATOR 3 &&&(geometry, gidx), | |
OPERATOR 3 &&&(gidx, geometry), | |
OPERATOR 3 &&&(gidx, gidx), | |
STORAGE gidx; | |
------------- | |
-- 4D case -- | |
------------- | |
-- Availability: 2.3.0 | |
CREATE OPERATOR CLASS brin_geometry_inclusion_ops_4d | |
FOR TYPE geometry | |
USING brin AS | |
FUNCTION 1 brin_inclusion_opcinfo(internal), | |
FUNCTION 2 geom4d_brin_inclusion_add_value(internal, internal, internal, internal), | |
FUNCTION 3 brin_inclusion_consistent(internal, internal, internal), | |
FUNCTION 4 brin_inclusion_union(internal, internal, internal), | |
OPERATOR 3 &&&(geometry, geometry), | |
OPERATOR 3 &&&(geometry, gidx), | |
OPERATOR 3 &&&(gidx, geometry), | |
OPERATOR 3 &&&(gidx, gidx), | |
STORAGE gidx; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_geog(gidx, geography) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_gidx_geog_overlaps' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_geog(gidx, gidx) | |
RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','gserialized_gidx_gidx_overlaps' | |
LANGUAGE 'c' IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = gidx, | |
RIGHTARG = geography, | |
PROCEDURE = overlaps_geog, | |
COMMUTATOR = && | |
); | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION overlaps_geog(geography, gidx) | |
RETURNS boolean | |
AS | |
'SELECT $2 OPERATOR(@extschema@.&&) $1;' | |
LANGUAGE SQL IMMUTABLE STRICT; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = geography, | |
RIGHTARG = gidx, | |
PROCEDURE = overlaps_geog, | |
COMMUTATOR = && | |
); | |
-- Availability: 2.3.0 | |
CREATE OPERATOR public.&& ( | |
LEFTARG = gidx, | |
RIGHTARG = gidx, | |
PROCEDURE = overlaps_geog, | |
COMMUTATOR = && | |
); | |
-------------------------------- | |
-- the OpFamily -- | |
-------------------------------- | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION geog_brin_inclusion_add_value(internal, internal, internal, internal) RETURNS boolean | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','geog_brin_inclusion_add_value' | |
LANGUAGE 'c'; | |
-- Availability: 2.3.0 | |
CREATE OPERATOR CLASS brin_geography_inclusion_ops | |
DEFAULT FOR TYPE geography | |
USING brin AS | |
FUNCTION 1 brin_inclusion_opcinfo(internal), | |
FUNCTION 2 geog_brin_inclusion_add_value(internal, internal, internal, internal), | |
FUNCTION 3 brin_inclusion_consistent(internal, internal, internal), | |
FUNCTION 4 brin_inclusion_union(internal, internal, internal), | |
OPERATOR 3 &&(geography, geography), | |
OPERATOR 3 &&(geography, gidx), | |
OPERATOR 3 &&(gidx, geography), | |
OPERATOR 3 &&(gidx, gidx), | |
STORAGE gidx; | |
CREATE OR REPLACE FUNCTION ST_MinimumBoundingRadius(geometry, OUT center geometry, OUT radius double precision) | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_MinimumBoundingRadius' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_GeneratePoints(area geometry, npoints numeric) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','ST_GeneratePoints' | |
LANGUAGE 'c' IMMUTABLE STRICT | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_Points(geometry) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_Points' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION _ST_Voronoi(g1 geometry, clip geometry DEFAULT NULL, tolerance float8 DEFAULT 0.0, return_polygons boolean DEFAULT true) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_Voronoi' | |
LANGUAGE 'c' IMMUTABLE | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_VoronoiPolygons(g1 geometry, tolerance float8 DEFAULT 0.0, extend_to geometry DEFAULT NULL) | |
RETURNS geometry | |
AS $$ SELECT @extschema@._ST_Voronoi(g1, extend_to, tolerance, true) $$ | |
LANGUAGE SQL IMMUTABLE | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_VoronoiLines(g1 geometry, tolerance float8 DEFAULT 0.0, extend_to geometry DEFAULT NULL) | |
RETURNS geometry | |
AS $$ SELECT @extschema@._ST_Voronoi(g1, extend_to, tolerance, false) $$ | |
LANGUAGE SQL IMMUTABLE | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_CombineBBox(box3d,box3d) | |
RETURNS box3d | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'BOX3D_combine_BOX3D' | |
LANGUAGE 'c' IMMUTABLE ; | |
CREATE OR REPLACE FUNCTION ST_ClusterKMeans(geom geometry, k integer) | |
RETURNS integer | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_ClusterKMeans' | |
LANGUAGE 'c' VOLATILE STRICT WINDOW; | |
CREATE OR REPLACE FUNCTION ST_MinimumClearance(geometry) | |
RETURNS float8 | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_MinimumClearance' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
-- Availability: 2.3.0 | |
CREATE OR REPLACE FUNCTION ST_MinimumClearanceLine(geometry) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_MinimumClearanceLine' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_GeometricMedian(g geometry, tolerance float8 DEFAULT NULL, max_iter int DEFAULT 10000, fail_if_not_converged boolean DEFAULT false) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_GeometricMedian' | |
LANGUAGE 'c' IMMUTABLE ; | |
CREATE OR REPLACE FUNCTION ST_Angle(line1 geometry, line2 geometry) | |
RETURNS float8 AS 'SELECT ST_Angle(St_StartPoint($1), ST_EndPoint($1), St_StartPoint($2), ST_EndPoint($2))' | |
LANGUAGE 'sql' IMMUTABLE STRICT; | |
CREATE OR REPLACE FUNCTION ST_WrapX(geom geometry, wrap float8, move float8) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_WrapX' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_Expand(box box2d, dx float8, dy float8) | |
RETURNS box2d | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'BOX2D_expand' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_EstimatedExtent(text,text,text,boolean) RETURNS box2d AS | |
'/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'gserialized_estimated_extent' | |
LANGUAGE 'c' IMMUTABLE STRICT SECURITY DEFINER; | |
CREATE OR REPLACE FUNCTION ST_Expand(box box3d, dx float8, dy float8, dz float8 DEFAULT 0) | |
RETURNS box3d | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'BOX3D_expand' | |
LANGUAGE 'c' IMMUTABLE STRICT | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_Expand(geom geometry, dx float8, dy float8, dz float8 DEFAULT 0, dm float8 DEFAULT 0) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'LWGEOM_expand' | |
LANGUAGE 'c' IMMUTABLE STRICT | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_Normalize(geom geometry) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_Normalize' | |
LANGUAGE 'c' IMMUTABLE STRICT | |
COST 1; -- reset cost, see #3675 | |
CREATE OR REPLACE FUNCTION ST_Transform(geom geometry, to_proj text) | |
RETURNS geometry AS | |
'SELECT @extschema@.postgis_transform_geometry($1, proj4text, $2, 0) | |
FROM spatial_ref_sys WHERE srid=@extschema@.ST_SRID($1);' | |
LANGUAGE sql IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_Transform(geom geometry, from_proj text, to_proj text) | |
RETURNS geometry AS | |
'SELECT @extschema@.postgis_transform_geometry($1, $2, $3, 0)' | |
LANGUAGE sql IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_Transform(geom geometry, from_proj text, to_srid integer) | |
RETURNS geometry AS | |
'SELECT @extschema@.postgis_transform_geometry($1, $2, proj4text, $3) | |
FROM spatial_ref_sys WHERE srid=$3;' | |
LANGUAGE sql IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_MinimumBoundingRadius(geometry, OUT center geometry, OUT radius double precision) | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so', 'ST_MinimumBoundingRadius' | |
LANGUAGE 'c' IMMUTABLE STRICT ; | |
CREATE OR REPLACE FUNCTION ST_GeneratePoints(area geometry, npoints numeric) | |
RETURNS geometry | |
AS '/usr/lib/postgresql/9.6/lib/postgis-2.4.so','ST_GeneratePoints' | |
LANGUAGE 'c' IMMUTABLE STRICT | |
COST 1; -- reset cost, see #3675 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment