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
6CREATE FUNCTION distance_chebyshev(cube, cube)
7RETURNS float8
8AS 'MODULE_PATHNAME'
9LANGUAGE C IMMUTABLE STRICT;
10
11CREATE FUNCTION distance_taxicab(cube, cube)
12RETURNS float8
13AS 'MODULE_PATHNAME'
14LANGUAGE C IMMUTABLE STRICT;
15
16CREATE FUNCTION cube_coord(cube, int4)
17RETURNS float8
18AS 'MODULE_PATHNAME'
19LANGUAGE C IMMUTABLE STRICT;
20
21CREATE FUNCTION cube_coord_llur(cube, int4)
22RETURNS float8
23AS 'MODULE_PATHNAME'
24LANGUAGE C IMMUTABLE STRICT;
25
26CREATE OPERATOR -> (
27	LEFTARG = cube, RIGHTARG = int, PROCEDURE = cube_coord
28);
29
30CREATE OPERATOR ~> (
31	LEFTARG = cube, RIGHTARG = int, PROCEDURE = cube_coord_llur
32);
33
34CREATE OPERATOR <#> (
35	LEFTARG = cube, RIGHTARG = cube, PROCEDURE = distance_taxicab,
36	COMMUTATOR = '<#>'
37);
38
39CREATE OPERATOR <-> (
40	LEFTARG = cube, RIGHTARG = cube, PROCEDURE = cube_distance,
41	COMMUTATOR = '<->'
42);
43
44CREATE OPERATOR <=> (
45	LEFTARG = cube, RIGHTARG = cube, PROCEDURE = distance_chebyshev,
46	COMMUTATOR = '<=>'
47);
48
49CREATE FUNCTION g_cube_distance (internal, cube, smallint, oid)
50RETURNS internal
51AS 'MODULE_PATHNAME'
52LANGUAGE C IMMUTABLE STRICT;
53
54ALTER OPERATOR FAMILY gist_cube_ops USING gist ADD
55	OPERATOR	15	~> (cube, int) FOR ORDER BY float_ops,
56	OPERATOR	16	<#> (cube, cube) FOR ORDER BY float_ops,
57	OPERATOR	17	<-> (cube, cube) FOR ORDER BY float_ops,
58	OPERATOR	18	<=> (cube, cube) FOR ORDER BY float_ops,
59	FUNCTION	8	(cube, cube)	g_cube_distance (internal, cube, smallint, oid);
60