diff options
| author | Teodor Sigaev | 2015-12-18 11:38:27 +0000 |
|---|---|---|
| committer | Teodor Sigaev | 2015-12-18 11:38:27 +0000 |
| commit | 33bd250f6c4cc309f4eeb657da80f1e7743b3e5c (patch) | |
| tree | a426b00e401cb3f0a38fee9b95acbfc73ba0d15b /contrib/cube/cube--1.0.sql | |
| parent | 3d0c50ffa0bdb683c28bfe0e79d23d87111da2aa (diff) | |
Cube extension kNN support
Introduce distance operators over cubes:
<#> taxicab distance
<-> euclidean distance
<=> chebyshev distance
Also add kNN support of those distances in GiST opclass.
Author: Stas Kelvich
Diffstat (limited to 'contrib/cube/cube--1.0.sql')
| -rw-r--r-- | contrib/cube/cube--1.0.sql | 325 |
1 files changed, 0 insertions, 325 deletions
diff --git a/contrib/cube/cube--1.0.sql b/contrib/cube/cube--1.0.sql deleted file mode 100644 index 0307811ceb..0000000000 --- a/contrib/cube/cube--1.0.sql +++ /dev/null @@ -1,325 +0,0 @@ -/* contrib/cube/cube--1.0.sql */ - --- complain if script is sourced in psql, rather than via CREATE EXTENSION -\echo Use "CREATE EXTENSION cube" to load this file. \quit - --- Create the user-defined type for N-dimensional boxes - -CREATE FUNCTION cube_in(cstring) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(float8[], float8[]) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_a_f8_f8' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(float8[]) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_a_f8' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube_out(cube) -RETURNS cstring -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE TYPE cube ( - INTERNALLENGTH = variable, - INPUT = cube_in, - OUTPUT = cube_out, - ALIGNMENT = double -); - -COMMENT ON TYPE cube IS 'multi-dimensional cube ''(FLOAT-1, FLOAT-2, ..., FLOAT-N), (FLOAT-1, FLOAT-2, ..., FLOAT-N)'''; - --- --- External C-functions for R-tree methods --- - --- Comparison methods - -CREATE FUNCTION cube_eq(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_eq(cube, cube) IS 'same as'; - -CREATE FUNCTION cube_ne(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_ne(cube, cube) IS 'different'; - -CREATE FUNCTION cube_lt(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_lt(cube, cube) IS 'lower than'; - -CREATE FUNCTION cube_gt(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_gt(cube, cube) IS 'greater than'; - -CREATE FUNCTION cube_le(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_le(cube, cube) IS 'lower than or equal to'; - -CREATE FUNCTION cube_ge(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_ge(cube, cube) IS 'greater than or equal to'; - -CREATE FUNCTION cube_cmp(cube, cube) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_cmp(cube, cube) IS 'btree comparison function'; - -CREATE FUNCTION cube_contains(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_contains(cube, cube) IS 'contains'; - -CREATE FUNCTION cube_contained(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_contained(cube, cube) IS 'contained in'; - -CREATE FUNCTION cube_overlap(cube, cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -COMMENT ON FUNCTION cube_overlap(cube, cube) IS 'overlaps'; - --- support routines for indexing - -CREATE FUNCTION cube_union(cube, cube) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube_inter(cube, cube) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube_size(cube) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - - --- Misc N-dimensional functions - -CREATE FUNCTION cube_subset(cube, int4[]) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- proximity routines - -CREATE FUNCTION cube_distance(cube, cube) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Extracting elements functions - -CREATE FUNCTION cube_dim(cube) -RETURNS int4 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube_ll_coord(cube, int4) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube_ur_coord(cube, int4) -RETURNS float8 -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(float8) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_f8' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(float8, float8) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_f8_f8' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(cube, float8) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_c_f8' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION cube(cube, float8, float8) RETURNS cube -AS 'MODULE_PATHNAME', 'cube_c_f8_f8' -LANGUAGE C IMMUTABLE STRICT; - --- Test if cube is also a point - -CREATE FUNCTION cube_is_point(cube) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- Increasing the size of a cube by a radius in at least n dimensions - -CREATE FUNCTION cube_enlarge(cube, float8, int4) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - --- --- OPERATORS --- - -CREATE OPERATOR < ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_lt, - COMMUTATOR = '>', NEGATOR = '>=', - RESTRICT = scalarltsel, JOIN = scalarltjoinsel -); - -CREATE OPERATOR > ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_gt, - COMMUTATOR = '<', NEGATOR = '<=', - RESTRICT = scalargtsel, JOIN = scalargtjoinsel -); - -CREATE OPERATOR <= ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_le, - COMMUTATOR = '>=', NEGATOR = '>', - RESTRICT = scalarltsel, JOIN = scalarltjoinsel -); - -CREATE OPERATOR >= ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_ge, - COMMUTATOR = '<=', NEGATOR = '<', - RESTRICT = scalargtsel, JOIN = scalargtjoinsel -); - -CREATE OPERATOR && ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_overlap, - COMMUTATOR = '&&', - RESTRICT = areasel, JOIN = areajoinsel -); - -CREATE OPERATOR = ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_eq, - COMMUTATOR = '=', NEGATOR = '<>', - RESTRICT = eqsel, JOIN = eqjoinsel, - MERGES -); - -CREATE OPERATOR <> ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_ne, - COMMUTATOR = '<>', NEGATOR = '=', - RESTRICT = neqsel, JOIN = neqjoinsel -); - -CREATE OPERATOR @> ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contains, - COMMUTATOR = '<@', - RESTRICT = contsel, JOIN = contjoinsel -); - -CREATE OPERATOR <@ ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contained, - COMMUTATOR = '@>', - RESTRICT = contsel, JOIN = contjoinsel -); - --- these are obsolete/deprecated: -CREATE OPERATOR @ ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contains, - COMMUTATOR = '~', - RESTRICT = contsel, JOIN = contjoinsel -); - -CREATE OPERATOR ~ ( - LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_contained, - COMMUTATOR = '@', - RESTRICT = contsel, JOIN = contjoinsel -); - - --- define the GiST support methods -CREATE FUNCTION g_cube_consistent(internal,cube,int,oid,internal) -RETURNS bool -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_compress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_decompress(internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_penalty(internal,internal,internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_picksplit(internal, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_union(internal, internal) -RETURNS cube -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - -CREATE FUNCTION g_cube_same(cube, cube, internal) -RETURNS internal -AS 'MODULE_PATHNAME' -LANGUAGE C IMMUTABLE STRICT; - - --- Create the operator classes for indexing - -CREATE OPERATOR CLASS cube_ops - DEFAULT FOR TYPE cube USING btree AS - OPERATOR 1 < , - OPERATOR 2 <= , - OPERATOR 3 = , - OPERATOR 4 >= , - OPERATOR 5 > , - FUNCTION 1 cube_cmp(cube, cube); - -CREATE OPERATOR CLASS gist_cube_ops - DEFAULT FOR TYPE cube USING gist AS - OPERATOR 3 && , - OPERATOR 6 = , - OPERATOR 7 @> , - OPERATOR 8 <@ , - OPERATOR 13 @ , - OPERATOR 14 ~ , - FUNCTION 1 g_cube_consistent (internal, cube, int, oid, internal), - FUNCTION 2 g_cube_union (internal, internal), - FUNCTION 3 g_cube_compress (internal), - FUNCTION 4 g_cube_decompress (internal), - FUNCTION 5 g_cube_penalty (internal, internal, internal), - FUNCTION 6 g_cube_picksplit (internal, internal), - FUNCTION 7 g_cube_same (cube, cube, internal); |
