Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit33bd250

Browse files
committed
Cube extension kNN support
Introduce distance operators over cubes:<#> taxicab distance<-> euclidean distance<=> chebyshev distanceAlso add kNN support of those distances in GiST opclass.Author: Stas Kelvich
1 parent3d0c50f commit33bd250

File tree

12 files changed

+1684
-4
lines changed

12 files changed

+1684
-4
lines changed

‎contrib/cube/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ MODULE_big = cube
44
OBJS= cube.o cubeparse.o$(WIN32RES)
55

66
EXTENSION = cube
7-
DATA = cube--1.0.sql cube--unpackaged--1.0.sql
7+
DATA = cube--1.1.sql cube--1.0--1.1.sql cube--unpackaged--1.0.sql
88
PGFILEDESC = "cube - multidimensional cube data type"
99

1010
REGRESS = cube

‎contrib/cube/cube--1.0--1.1.sql

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/* contrib/cube/cube--1.0--1.1.sql*/
2+
3+
-- complain if script is sourced in psql, rather than via ALTER EXTENSION
4+
\echo Use"ALTER EXTENSION cube UPDATE TO '1.1'" to load this file. \quit
5+
6+
CREATEFUNCTIONdistance_chebyshev(cube, cube)
7+
RETURNS float8
8+
AS'MODULE_PATHNAME'
9+
LANGUAGE C IMMUTABLE STRICT;
10+
11+
CREATEFUNCTIONdistance_taxicab(cube, cube)
12+
RETURNS float8
13+
AS'MODULE_PATHNAME'
14+
LANGUAGE C IMMUTABLE STRICT;
15+
16+
CREATEFUNCTIONcube_coord(cube, int4)
17+
RETURNS float8
18+
AS'MODULE_PATHNAME'
19+
LANGUAGE C IMMUTABLE STRICT;
20+
21+
CREATEFUNCTIONcube_coord_llur(cube, int4)
22+
RETURNS float8
23+
AS'MODULE_PATHNAME'
24+
LANGUAGE C IMMUTABLE STRICT;
25+
26+
CREATE OPERATOR-> (
27+
LEFTARG= cube, RIGHTARG=int, PROCEDURE= cube_coord
28+
);
29+
30+
CREATE OPERATOR ~> (
31+
LEFTARG= cube, RIGHTARG=int, PROCEDURE= cube_coord_llur
32+
);
33+
34+
CREATE OPERATOR<#> (
35+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= distance_taxicab,
36+
COMMUTATOR='<#>'
37+
);
38+
39+
CREATE OPERATOR<-> (
40+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= cube_distance,
41+
COMMUTATOR='<->'
42+
);
43+
44+
CREATE OPERATOR<=> (
45+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= distance_chebyshev,
46+
COMMUTATOR='<=>'
47+
);
48+
49+
CREATEFUNCTIONg_cube_distance (internal, cube,smallint,oid)
50+
RETURNS internal
51+
AS'MODULE_PATHNAME'
52+
LANGUAGE C IMMUTABLE STRICT;
53+
54+
ALTEROPERATOR FAMILY gist_cube_ops USING gist ADD
55+
OPERATOR15~> (cube,int) FORORDER BY float_ops,
56+
OPERATOR16<#> (cube, cube) FOR ORDER BY float_ops,
57+
OPERATOR17<-> (cube, cube) FORORDER BY float_ops,
58+
OPERATOR18<=> (cube, cube) FORORDER BY float_ops,
59+
FUNCTION8(cube, cube)g_cube_distance (internal, cube,smallint,oid);
60+

‎contrib/cube/cube--1.0.sqlrenamed to‎contrib/cube/cube--1.1.sql

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* contrib/cube/cube--1.0.sql*/
1+
/* contrib/cube/cube--1.1.sql*/
22

33
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
44
\echo Use"CREATE EXTENSION cube" to load this file. \quit
@@ -140,6 +140,16 @@ RETURNS float8
140140
AS'MODULE_PATHNAME'
141141
LANGUAGE C IMMUTABLE STRICT;
142142

143+
CREATEFUNCTIONdistance_chebyshev(cube, cube)
144+
RETURNS float8
145+
AS'MODULE_PATHNAME'
146+
LANGUAGE C IMMUTABLE STRICT;
147+
148+
CREATEFUNCTIONdistance_taxicab(cube, cube)
149+
RETURNS float8
150+
AS'MODULE_PATHNAME'
151+
LANGUAGE C IMMUTABLE STRICT;
152+
143153
-- Extracting elements functions
144154

145155
CREATEFUNCTIONcube_dim(cube)
@@ -157,6 +167,16 @@ RETURNS float8
157167
AS'MODULE_PATHNAME'
158168
LANGUAGE C IMMUTABLE STRICT;
159169

170+
CREATEFUNCTIONcube_coord(cube, int4)
171+
RETURNS float8
172+
AS'MODULE_PATHNAME'
173+
LANGUAGE C IMMUTABLE STRICT;
174+
175+
CREATEFUNCTIONcube_coord_llur(cube, int4)
176+
RETURNS float8
177+
AS'MODULE_PATHNAME'
178+
LANGUAGE C IMMUTABLE STRICT;
179+
160180
CREATEFUNCTIONcube(float8) RETURNS cube
161181
AS'MODULE_PATHNAME','cube_f8'
162182
LANGUAGE C IMMUTABLE STRICT;
@@ -246,6 +266,29 @@ CREATE OPERATOR <@ (
246266
RESTRICT= contsel,JOIN= contjoinsel
247267
);
248268

269+
CREATE OPERATOR-> (
270+
LEFTARG= cube, RIGHTARG=int, PROCEDURE= cube_coord
271+
);
272+
273+
CREATE OPERATOR ~> (
274+
LEFTARG= cube, RIGHTARG=int, PROCEDURE= cube_coord_llur
275+
);
276+
277+
CREATE OPERATOR<#> (
278+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= distance_taxicab,
279+
COMMUTATOR='<#>'
280+
);
281+
282+
CREATE OPERATOR<-> (
283+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= cube_distance,
284+
COMMUTATOR='<->'
285+
);
286+
287+
CREATE OPERATOR<=> (
288+
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= distance_chebyshev,
289+
COMMUTATOR='<=>'
290+
);
291+
249292
-- these are obsolete/deprecated:
250293
CREATE OPERATOR @ (
251294
LEFTARG= cube, RIGHTARG= cube, PROCEDURE= cube_contains,
@@ -296,6 +339,10 @@ RETURNS internal
296339
AS'MODULE_PATHNAME'
297340
LANGUAGE C IMMUTABLE STRICT;
298341

342+
CREATEFUNCTIONg_cube_distance (internal, cube,smallint,oid)
343+
RETURNS internal
344+
AS'MODULE_PATHNAME'
345+
LANGUAGE C IMMUTABLE STRICT;
299346

300347
-- Create the operator classes for indexing
301348

@@ -316,10 +363,17 @@ CREATE OPERATOR CLASS gist_cube_ops
316363
OPERATOR8<@ ,
317364
OPERATOR13@ ,
318365
OPERATOR14~ ,
366+
OPERATOR15~> (cube,int) FORORDER BY float_ops,
367+
OPERATOR16<#> (cube, cube) FOR ORDER BY float_ops,
368+
OPERATOR17<-> (cube, cube) FORORDER BY float_ops,
369+
OPERATOR18<=> (cube, cube) FORORDER BY float_ops,
370+
319371
FUNCTION1g_cube_consistent (internal, cube,int,oid, internal),
320372
FUNCTION2g_cube_union (internal, internal),
321373
FUNCTION3g_cube_compress (internal),
322374
FUNCTION4g_cube_decompress (internal),
323375
FUNCTION5g_cube_penalty (internal, internal, internal),
324376
FUNCTION6g_cube_picksplit (internal, internal),
325-
FUNCTION7g_cube_same (cube, cube, internal);
377+
FUNCTION7g_cube_same (cube, cube, internal),
378+
FUNCTION8g_cube_distance (internal, cube,smallint,oid);
379+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp