postgis/lwgeom/lwgeom.sql.in

415 lines
10 KiB
MySQL
Raw Normal View History

#if USE_VERSION > 71
#define CREATEFUNCTION CREATE OR REPLACE FUNCTION
#else
#define CREATEFUNCTION CREATE FUNCTION
#endif
BEGIN;
CREATEFUNCTION lwgeom_in(cstring)
RETURNS lwgeom
AS '@MODULE_FILENAME@','LWGEOM_in'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_out(lwgeom)
RETURNS cstring
AS '@MODULE_FILENAME@','LWGEOM_out'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE TYPE lwgeom (
internallength = variable,
input = lwgeom_in,
output = lwgeom_out,
storage = main
);
CREATEFUNCTION box2d_in(cstring)
RETURNS box2d
AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_out(box2d)
RETURNS cstring
AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE TYPE box2d (
internallength = 16,
input = box2d_in,
output = box2d_out,
storage = plain
);
CREATEFUNCTION box2d(LWGEOM)
RETURNS box2d
AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom(text)
RETURNS lwgeom
AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
LANGUAGE 'C' WITH (isstrict,iscachable);
---- BOX2D support functions
CREATEFUNCTION box2d_overleft(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_overright(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_left(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_right(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_contain(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_contained(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_overlap(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION box2d_same(box2d, box2d)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OPERATOR << (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_left,
COMMUTATOR = '>>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR &< (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overleft,
COMMUTATOR = '&>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR && (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overlap,
COMMUTATOR = '&&',
RESTRICT = areasel, JOIN = positionjoinsel
);
CREATE OPERATOR &> (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_overright,
COMMUTATOR = '&<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR >> (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_right,
COMMUTATOR = '<<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR ~= (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_same,
COMMUTATOR = '~=',
RESTRICT = eqsel, JOIN = eqjoinsel
);
CREATE OPERATOR @ (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contained,
COMMUTATOR = '~',
RESTRICT = contsel, JOIN = contjoinsel
);
CREATE OPERATOR ~ (
LEFTARG = box2d, RIGHTARG = box2d, PROCEDURE = box2d_contain,
COMMUTATOR = '@',
RESTRICT = contsel, JOIN = contjoinsel
);
-- lwgeom operator support functions
CREATEFUNCTION lwgeom_overleft(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_overright(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_left(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_right(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_contain(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_contained(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_overlap(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom_same(lwgeom, lwgeom)
RETURNS bool
AS '@MODULE_FILENAME@'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATE OPERATOR << (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_left,
COMMUTATOR = '>>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR &< (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overleft,
COMMUTATOR = '&>',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR && (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overlap,
COMMUTATOR = '&&',
RESTRICT = areasel, JOIN = positionjoinsel
);
CREATE OPERATOR &> (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_overright,
COMMUTATOR = '&<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR >> (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_right,
COMMUTATOR = '<<',
RESTRICT = positionsel, JOIN = positionjoinsel
);
CREATE OPERATOR ~= (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_same,
COMMUTATOR = '~=',
RESTRICT = eqsel, JOIN = eqjoinsel
);
CREATE OPERATOR @ (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_contained,
COMMUTATOR = '~',
RESTRICT = contsel, JOIN = contjoinsel
);
CREATE OPERATOR ~ (
LEFTARG = lwgeom, RIGHTARG = lwgeom, PROCEDURE = lwgeom_contain,
COMMUTATOR = '@',
RESTRICT = contsel, JOIN = contjoinsel
);
-- gist support functions
CREATEFUNCTION gist_lwgeom_consistent(internal,lwgeom,int4)
RETURNS bool
AS '@MODULE_FILENAME@' ,'gist_lwgeom_consistent'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_compress(internal)
RETURNS internal
AS '@MODULE_FILENAME@','gist_lwgeom_compress'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_penalty(internal,internal,internal)
RETURNS internal
AS '@MODULE_FILENAME@' ,'lwgeom_box_penalty'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_picksplit(internal, internal)
RETURNS internal
AS '@MODULE_FILENAME@' ,'lwgeom_gbox_picksplit'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_union(bytea, internal)
RETURNS internal
AS '@MODULE_FILENAME@' ,'lwgeom_box_union'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_same(box2d, box2d, internal)
RETURNS internal
AS '@MODULE_FILENAME@' ,'lwgeom_gbox_same'
LANGUAGE 'C';
CREATEFUNCTION gist_lwgeom_decompress(internal)
RETURNS internal
AS '@MODULE_FILENAME@' ,'gist_rtree_decompress'
LANGUAGE 'C';
-- gist opclass
CREATE OPERATOR CLASS gist_lwgeom_ops
DEFAULT FOR TYPE lwgeom USING gist AS
OPERATOR 1 << ,
OPERATOR 2 &< ,
OPERATOR 3 && ,
OPERATOR 4 &> ,
OPERATOR 5 >> ,
OPERATOR 6 ~= ,
OPERATOR 7 ~ ,
OPERATOR 8 @ ,
FUNCTION 1 gist_lwgeom_consistent (internal, lwgeom, int4),
FUNCTION 2 gist_lwgeom_union (bytea, internal),
FUNCTION 3 gist_lwgeom_compress (internal),
FUNCTION 4 gist_lwgeom_decompress (internal),
FUNCTION 5 gist_lwgeom_penalty (internal, internal, internal),
FUNCTION 6 gist_lwgeom_picksplit (internal, internal),
FUNCTION 7 gist_lwgeom_same (box2d, box2d, internal);
UPDATE pg_opclass
SET opckeytype = (select oid from pg_type where typname = 'box2d')
WHERE opcname = 'gist_lwgeom_ops';
-- other lwgeom functions
CREATEFUNCTION addBBOX(lwgeom)
RETURNS lwgeom
AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION getSRID(lwgeom)
RETURNS int4
AS '@MODULE_FILENAME@','LWGEOM_getSRID'
LANGUAGE 'C' WITH (isstrict,iscachable);
-- defined for backward compatibility (pre LWGEOM)
CREATEFUNCTION SRID(lwgeom)
RETURNS int4
AS '@MODULE_FILENAME@','LWGEOM_getSRID'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION setSRID(lwgeom,int4)
RETURNS lwgeom
AS '@MODULE_FILENAME@','LWGEOM_setSRID'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION asText(lwgeom)
RETURNS TEXT
AS '@MODULE_FILENAME@','LWGEOM_asText'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION getbbox(LWGEOM)
RETURNS box2d
AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION geometrytype(LWGEOM)
RETURNS text
AS '@MODULE_FILENAME@', 'LWGEOM_getTYPE'
LANGUAGE 'C' WITH (isstrict);
COMMIT;
begin;
-- extra conversions (might not work if there's no postgis install)
CREATEFUNCTION lwgeom(wkb,int4)
RETURNS lwgeom
AS '@MODULE_FILENAME@','LWGEOMFromWKB'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION wkb(lwgeom)
RETURNS wkb
AS '@MODULE_FILENAME@','WKBFromLWGEOM'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION asbinary(lwgeom)
RETURNS wkb
AS '@MODULE_FILENAME@','WKBFromLWGEOM'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION lwgeom(wkb)
RETURNS lwgeom
AS '@MODULE_FILENAME@','LWGEOMFromWKB'
LANGUAGE 'C' WITH (isstrict,iscachable);
CREATEFUNCTION geometry(lwgeom)
RETURNS geometry
AS
'BEGIN
RETURN GeomFromWKB(asBinary($1),getSRID($1) );
END;'
LANGUAGE 'plpgsql' WITH (iscachable,isstrict);
CREATEFUNCTION lwgeom(geometry)
RETURNS lwgeom
AS
'BEGIN
RETURN setSRID(lwgeom(asBinary($1)),SRID($1) );
END;'
LANGUAGE 'plpgsql' WITH (iscachable,isstrict);
CREATE CAST (lwgeom as geometry) WITH FUNCTION geometry(lwgeom) AS IMPLICIT ;
CREATE CAST (geometry as lwgeom) WITH FUNCTION lwgeom(geometry) AS IMPLICIT ;
CREATE CAST (lwgeom as box2d) WITH FUNCTION box2d(lwgeom) AS IMPLICIT ;
CREATE CAST (lwgeom as wkb) WITH FUNCTION wkb(lwgeom) AS IMPLICIT ;
CREATE CAST (wkb as lwgeom) WITH FUNCTION lwgeom(wkb) AS IMPLICIT ;
--
-- Aggregate functions
--
CREATEFUNCTION combine_bbox(box2d,lwgeom)
RETURNS box2d
AS '@MODULE_FILENAME@', 'combine_box2d'
LANGUAGE 'C';
CREATE AGGREGATE extent(
sfunc = combine_bbox,
basetype = lwgeom,
stype = box2d
);
COMMIT;