Skip to content

Instantly share code, notes, and snippets.

@genslein
Last active January 3, 2019 20:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save genslein/e9ed84c3698dfff2aaef54b393efd8de to your computer and use it in GitHub Desktop.
Save genslein/e9ed84c3698dfff2aaef54b393efd8de to your computer and use it in GitHub Desktop.
Postgis 2.3.0 to 2.4.x upgrade operator bugfix
-- 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