| /* contrib/seg/seg--1.1.sql */ |
| |
| -- complain if script is sourced in psql, rather than via CREATE EXTENSION |
| \echo Use "CREATE EXTENSION seg" to load this file. \quit |
| |
| -- Create the user-defined type for 1-D floating point intervals (seg) |
| |
| CREATE FUNCTION seg_in(cstring) |
| RETURNS seg |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE FUNCTION seg_out(seg) |
| RETURNS cstring |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE TYPE seg ( |
| INTERNALLENGTH = 12, |
| INPUT = seg_in, |
| OUTPUT = seg_out |
| ); |
| |
| COMMENT ON TYPE seg IS |
| 'floating point interval ''FLOAT .. FLOAT'', ''.. FLOAT'', ''FLOAT ..'' or ''FLOAT'''; |
| |
| -- |
| -- External C-functions for R-tree methods |
| -- |
| |
| -- Left/Right methods |
| |
| CREATE FUNCTION seg_over_left(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_over_left(seg, seg) IS |
| 'overlaps or is left of'; |
| |
| CREATE FUNCTION seg_over_right(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_over_right(seg, seg) IS |
| 'overlaps or is right of'; |
| |
| CREATE FUNCTION seg_left(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_left(seg, seg) IS |
| 'is left of'; |
| |
| CREATE FUNCTION seg_right(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_right(seg, seg) IS |
| 'is right of'; |
| |
| |
| -- Scalar comparison methods |
| |
| CREATE FUNCTION seg_lt(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_lt(seg, seg) IS |
| 'less than'; |
| |
| CREATE FUNCTION seg_le(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_le(seg, seg) IS |
| 'less than or equal'; |
| |
| CREATE FUNCTION seg_gt(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_gt(seg, seg) IS |
| 'greater than'; |
| |
| CREATE FUNCTION seg_ge(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_ge(seg, seg) IS |
| 'greater than or equal'; |
| |
| CREATE FUNCTION seg_contains(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_contains(seg, seg) IS |
| 'contains'; |
| |
| CREATE FUNCTION seg_contained(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_contained(seg, seg) IS |
| 'contained in'; |
| |
| CREATE FUNCTION seg_overlap(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_overlap(seg, seg) IS |
| 'overlaps'; |
| |
| CREATE FUNCTION seg_same(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_same(seg, seg) IS |
| 'same as'; |
| |
| CREATE FUNCTION seg_different(seg, seg) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_different(seg, seg) IS |
| 'different'; |
| |
| -- support routines for indexing |
| |
| CREATE FUNCTION seg_cmp(seg, seg) |
| RETURNS int4 |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| COMMENT ON FUNCTION seg_cmp(seg, seg) IS 'btree comparison function'; |
| |
| CREATE FUNCTION seg_union(seg, seg) |
| RETURNS seg |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE FUNCTION seg_inter(seg, seg) |
| RETURNS seg |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE FUNCTION seg_size(seg) |
| RETURNS float4 |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| -- miscellaneous |
| |
| CREATE FUNCTION seg_center(seg) |
| RETURNS float4 |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE FUNCTION seg_upper(seg) |
| RETURNS float4 |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| CREATE FUNCTION seg_lower(seg) |
| RETURNS float4 |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C STRICT IMMUTABLE PARALLEL SAFE; |
| |
| |
| -- |
| -- OPERATORS |
| -- |
| |
| CREATE OPERATOR < ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_lt, |
| COMMUTATOR = '>', |
| NEGATOR = '>=', |
| RESTRICT = scalarltsel, |
| JOIN = scalarltjoinsel |
| ); |
| |
| CREATE OPERATOR <= ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_le, |
| COMMUTATOR = '>=', |
| NEGATOR = '>', |
| RESTRICT = scalarltsel, |
| JOIN = scalarltjoinsel |
| ); |
| |
| CREATE OPERATOR > ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_gt, |
| COMMUTATOR = '<', |
| NEGATOR = '<=', |
| RESTRICT = scalargtsel, |
| JOIN = scalargtjoinsel |
| ); |
| |
| CREATE OPERATOR >= ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_ge, |
| COMMUTATOR = '<=', |
| NEGATOR = '<', |
| RESTRICT = scalargtsel, |
| JOIN = scalargtjoinsel |
| ); |
| |
| CREATE OPERATOR << ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_left, |
| COMMUTATOR = '>>', |
| RESTRICT = positionsel, |
| JOIN = positionjoinsel |
| ); |
| |
| CREATE OPERATOR &< ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_over_left, |
| RESTRICT = positionsel, |
| JOIN = positionjoinsel |
| ); |
| |
| CREATE OPERATOR && ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_overlap, |
| COMMUTATOR = '&&', |
| RESTRICT = areasel, |
| JOIN = areajoinsel |
| ); |
| |
| CREATE OPERATOR &> ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_over_right, |
| RESTRICT = positionsel, |
| JOIN = positionjoinsel |
| ); |
| |
| CREATE OPERATOR >> ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_right, |
| COMMUTATOR = '<<', |
| RESTRICT = positionsel, |
| JOIN = positionjoinsel |
| ); |
| |
| CREATE OPERATOR = ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_same, |
| COMMUTATOR = '=', |
| NEGATOR = '<>', |
| RESTRICT = eqsel, |
| JOIN = eqjoinsel, |
| MERGES |
| ); |
| |
| CREATE OPERATOR <> ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_different, |
| COMMUTATOR = '<>', |
| NEGATOR = '=', |
| RESTRICT = neqsel, |
| JOIN = neqjoinsel |
| ); |
| |
| CREATE OPERATOR @> ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_contains, |
| COMMUTATOR = '<@', |
| RESTRICT = contsel, |
| JOIN = contjoinsel |
| ); |
| |
| CREATE OPERATOR <@ ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_contained, |
| COMMUTATOR = '@>', |
| RESTRICT = contsel, |
| JOIN = contjoinsel |
| ); |
| |
| -- obsolete: |
| CREATE OPERATOR @ ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_contains, |
| COMMUTATOR = '~', |
| RESTRICT = contsel, |
| JOIN = contjoinsel |
| ); |
| |
| CREATE OPERATOR ~ ( |
| LEFTARG = seg, |
| RIGHTARG = seg, |
| PROCEDURE = seg_contained, |
| COMMUTATOR = '@', |
| RESTRICT = contsel, |
| JOIN = contjoinsel |
| ); |
| |
| |
| -- define the GiST support methods |
| CREATE FUNCTION gseg_consistent(internal,seg,smallint,oid,internal) |
| RETURNS bool |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_compress(internal) |
| RETURNS internal |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_decompress(internal) |
| RETURNS internal |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_penalty(internal,internal,internal) |
| RETURNS internal |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_picksplit(internal, internal) |
| RETURNS internal |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_union(internal, internal) |
| RETURNS seg |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| CREATE FUNCTION gseg_same(seg, seg, internal) |
| RETURNS internal |
| AS 'MODULE_PATHNAME' |
| LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE; |
| |
| |
| -- Create the operator classes for indexing |
| |
| CREATE OPERATOR CLASS seg_ops |
| DEFAULT FOR TYPE seg USING btree AS |
| OPERATOR 1 < , |
| OPERATOR 2 <= , |
| OPERATOR 3 = , |
| OPERATOR 4 >= , |
| OPERATOR 5 > , |
| FUNCTION 1 seg_cmp(seg, seg); |
| |
| CREATE OPERATOR CLASS gist_seg_ops |
| DEFAULT FOR TYPE seg USING gist |
| AS |
| OPERATOR 1 << , |
| OPERATOR 2 &< , |
| OPERATOR 3 && , |
| OPERATOR 4 &> , |
| OPERATOR 5 >> , |
| OPERATOR 6 = , |
| OPERATOR 7 @> , |
| OPERATOR 8 <@ , |
| OPERATOR 13 @ , |
| OPERATOR 14 ~ , |
| FUNCTION 1 gseg_consistent (internal, seg, smallint, oid, internal), |
| FUNCTION 2 gseg_union (internal, internal), |
| FUNCTION 3 gseg_compress (internal), |
| FUNCTION 4 gseg_decompress (internal), |
| FUNCTION 5 gseg_penalty (internal, internal, internal), |
| FUNCTION 6 gseg_picksplit (internal, internal), |
| FUNCTION 7 gseg_same (seg, seg, internal); |