OSDN Git Service

Implement CREATE/DROP OPERATOR CLASS. Work still remains: need more
[pg-rex/syncrep.git] / contrib / intarray / _int.sql.in
1 -- Create the user-defined type for the 1-D integer arrays (_int4)
2 -- 
3 BEGIN TRANSACTION;
4
5 -- Adjust this setting to control where the operators, functions, and
6 -- opclasses get created.
7 SET search_path = public;
8
9 -- Query type
10 CREATE FUNCTION bqarr_in(opaque)
11 RETURNS opaque
12 AS 'MODULE_PATHNAME'
13 LANGUAGE 'c' with (isstrict);
14
15 CREATE FUNCTION bqarr_out(opaque)
16 RETURNS opaque
17 AS 'MODULE_PATHNAME'
18 LANGUAGE 'c' with (isstrict);
19
20 CREATE TYPE query_int (
21 internallength = -1,
22 input = bqarr_in,
23 output = bqarr_out
24 );
25
26 --only for debug
27 CREATE FUNCTION querytree(query_int)
28 RETURNS text
29 AS 'MODULE_PATHNAME'
30 LANGUAGE 'c' with (isstrict);
31
32
33 CREATE FUNCTION boolop(_int4, query_int) RETURNS bool
34         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
35
36 COMMENT ON FUNCTION boolop(_int4, query_int) IS 'boolean operation with array';
37
38 CREATE FUNCTION rboolop(query_int, _int4) RETURNS bool
39         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
40
41 COMMENT ON FUNCTION rboolop(query_int, _int4) IS 'boolean operation with array';
42
43 CREATE OPERATOR @@ (
44    LEFTARG = _int4, RIGHTARG = query_int, PROCEDURE = boolop,
45    COMMUTATOR = '~~', RESTRICT = contsel, JOIN = contjoinsel
46 );
47
48 CREATE OPERATOR ~~ (
49    LEFTARG = query_int, RIGHTARG = _int4, PROCEDURE = rboolop,
50    COMMUTATOR = '@@', RESTRICT = contsel, JOIN = contjoinsel
51 );
52
53
54 --
55 -- External C-functions for R-tree methods
56 --
57
58 -- Comparison methods
59
60 CREATE FUNCTION _int_contains(_int4, _int4) RETURNS bool
61         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
62
63 COMMENT ON FUNCTION _int_contains(_int4, _int4) IS 'contains';
64
65 CREATE FUNCTION _int_contained(_int4, _int4) RETURNS bool
66         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
67
68 COMMENT ON FUNCTION _int_contained(_int4, _int4) IS 'contained in';
69
70 CREATE FUNCTION _int_overlap(_int4, _int4) RETURNS bool
71         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
72
73 COMMENT ON FUNCTION _int_overlap(_int4, _int4) IS 'overlaps';
74
75 CREATE FUNCTION _int_same(_int4, _int4) RETURNS bool
76         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
77
78 COMMENT ON FUNCTION _int_same(_int4, _int4) IS 'same as';
79
80 CREATE FUNCTION _int_different(_int4, _int4) RETURNS bool
81         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
82
83 COMMENT ON FUNCTION _int_different(_int4, _int4) IS 'different';
84
85 -- support routines for indexing
86
87 CREATE FUNCTION _int_union(_int4, _int4) RETURNS _int4
88         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
89
90 CREATE FUNCTION _int_inter(_int4, _int4) RETURNS _int4
91         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
92
93 --
94 -- OPERATORS
95 --
96
97 CREATE OPERATOR && (
98    LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_overlap,
99    COMMUTATOR = '&&',
100    RESTRICT = contsel, JOIN = contjoinsel
101 );
102
103 --CREATE OPERATOR = (
104 --   LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_same,
105 --   COMMUTATOR = '=', NEGATOR = '<>',
106 --   RESTRICT = eqsel, JOIN = eqjoinsel,
107 --   SORT1 = '<', SORT2 = '<'
108 --);
109
110 CREATE OPERATOR <> (
111    LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_different,
112    COMMUTATOR = '<>', NEGATOR = '=',
113    RESTRICT = neqsel, JOIN = neqjoinsel
114 );
115
116 CREATE OPERATOR @ (
117    LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contains,
118    COMMUTATOR = '~', RESTRICT = contsel, JOIN = contjoinsel
119 );
120
121 CREATE OPERATOR ~ (
122    LEFTARG = _int4, RIGHTARG = _int4, PROCEDURE = _int_contained,
123    COMMUTATOR = '@', RESTRICT = contsel, JOIN = contjoinsel
124 );
125
126
127 -- define the GiST support methods
128 CREATE FUNCTION g_int_consistent(opaque,_int4,int4) RETURNS bool
129         AS 'MODULE_PATHNAME' LANGUAGE 'c';
130
131 CREATE FUNCTION g_int_compress(opaque) RETURNS opaque 
132         AS 'MODULE_PATHNAME' LANGUAGE 'c';
133
134 CREATE FUNCTION g_int_decompress(opaque) RETURNS opaque 
135         AS 'MODULE_PATHNAME' LANGUAGE 'c';
136
137 CREATE FUNCTION g_int_penalty(opaque,opaque,opaque) RETURNS opaque
138         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
139
140 CREATE FUNCTION g_int_picksplit(opaque, opaque) RETURNS opaque
141         AS 'MODULE_PATHNAME' LANGUAGE 'c';
142
143 CREATE FUNCTION g_int_union(bytea, opaque) RETURNS _int4 
144         AS 'MODULE_PATHNAME' LANGUAGE 'c';
145
146 CREATE FUNCTION g_int_same(_int4, _int4, opaque) RETURNS opaque 
147         AS 'MODULE_PATHNAME' LANGUAGE 'c';
148
149
150 -- Create the operator class for indexing
151
152 CREATE OPERATOR CLASS gist__int_ops
153     DEFAULT FOR TYPE _int4 USING gist AS
154         OPERATOR        3       &&,
155         OPERATOR        6       =       RECHECK,
156         OPERATOR        7       @,
157         OPERATOR        8       ~,
158         OPERATOR        20      @@ (_int4, query_int),
159         FUNCTION        1       g_int_consistent (opaque, _int4, int4),
160         FUNCTION        2       g_int_union (bytea, opaque),
161         FUNCTION        3       g_int_compress (opaque),
162         FUNCTION        4       g_int_decompress (opaque),
163         FUNCTION        5       g_int_penalty (opaque, opaque, opaque),
164         FUNCTION        6       g_int_picksplit (opaque, opaque),
165         FUNCTION        7       g_int_same (_int4, _int4, opaque);
166
167
168 ---------------------------------------------
169 -- intbig
170 ---------------------------------------------
171 -- define the GiST support methods
172 CREATE FUNCTION g_intbig_consistent(opaque,_int4,int4) RETURNS bool
173         AS 'MODULE_PATHNAME' LANGUAGE 'c';
174
175 CREATE FUNCTION g_intbig_compress(opaque) RETURNS opaque 
176         AS 'MODULE_PATHNAME' LANGUAGE 'c';
177
178 CREATE FUNCTION g_intbig_decompress(opaque) RETURNS opaque 
179         AS 'MODULE_PATHNAME' LANGUAGE 'c';
180
181 CREATE FUNCTION g_intbig_penalty(opaque,opaque,opaque) RETURNS opaque
182         AS 'MODULE_PATHNAME' LANGUAGE 'c' with (isstrict);
183
184 CREATE FUNCTION g_intbig_picksplit(opaque, opaque) RETURNS opaque
185         AS 'MODULE_PATHNAME' LANGUAGE 'c';
186
187 CREATE FUNCTION g_intbig_union(bytea, opaque) RETURNS _int4 
188         AS 'MODULE_PATHNAME' LANGUAGE 'c';
189
190 CREATE FUNCTION g_intbig_same(_int4, _int4, opaque) RETURNS opaque 
191         AS 'MODULE_PATHNAME' LANGUAGE 'c';
192
193 -- register the opclass for indexing (not as default)
194
195 CREATE OPERATOR CLASS gist__intbig_ops
196     FOR TYPE _int4 USING gist AS
197         OPERATOR        3       &&      RECHECK,
198         OPERATOR        6       =       RECHECK,
199         OPERATOR        7       @       RECHECK,
200         OPERATOR        8       ~       RECHECK,
201         OPERATOR        20      @@ (_int4, query_int)   RECHECK,
202         FUNCTION        1       g_intbig_consistent (opaque, _int4, int4),
203         FUNCTION        2       g_intbig_union (bytea, opaque),
204         FUNCTION        3       g_intbig_compress (opaque),
205         FUNCTION        4       g_intbig_decompress (opaque),
206         FUNCTION        5       g_intbig_penalty (opaque, opaque, opaque),
207         FUNCTION        6       g_intbig_picksplit (opaque, opaque),
208         FUNCTION        7       g_intbig_same (_int4, _int4, opaque);
209
210 END TRANSACTION;