9 -- define the GiST support methods
10 create function gbox_consistent(opaque,box,int4) returns bool as 'MODULE_PATHNAME' language 'C';
12 create function gbox_compress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
14 create function rtree_decompress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
16 create function gbox_penalty(opaque,opaque,opaque) returns opaque as 'MODULE_PATHNAME' language 'C' with (isstrict);
18 create function gbox_picksplit(opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
20 create function gbox_union(bytea, opaque) returns box as 'MODULE_PATHNAME' language 'C';
22 create function gbox_same(box, box, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
24 -- add a new opclass (non-default)
25 INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
27 (SELECT oid FROM pg_am WHERE amname = 'gist'),
29 (SELECT oid FROM pg_type WHERE typname = 'box'),
33 -- get the comparators for boxes and store them in a tmp table
34 SELECT o.oid AS opoid, o.oprname
35 INTO TEMP TABLE rt_ops_tmp
36 FROM pg_operator o, pg_type t
37 WHERE o.oprleft = t.oid
38 and t.typname = 'box';
40 -- using the tmp table, generate the amop entries
42 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
43 SELECT opcl.oid, 1, false, c.opoid
44 FROM pg_opclass opcl, rt_ops_tmp c
46 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
47 and opcname = 'gist_box_ops'
51 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
52 SELECT opcl.oid, 2, false, c.opoid
53 FROM pg_opclass opcl, rt_ops_tmp c
55 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
56 and opcname = 'gist_box_ops'
60 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
61 SELECT opcl.oid, 3, false, c.opoid
62 FROM pg_opclass opcl, rt_ops_tmp c
64 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
65 and opcname = 'gist_box_ops'
69 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
70 SELECT opcl.oid, 4, false, c.opoid
71 FROM pg_opclass opcl, rt_ops_tmp c
73 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
74 and opcname = 'gist_box_ops'
78 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
79 SELECT opcl.oid, 5, false, c.opoid
80 FROM pg_opclass opcl, rt_ops_tmp c
82 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
83 and opcname = 'gist_box_ops'
87 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
88 SELECT opcl.oid, 6, false, c.opoid
89 FROM pg_opclass opcl, rt_ops_tmp c
91 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
92 and opcname = 'gist_box_ops'
96 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
97 SELECT opcl.oid, 7, false, c.opoid
98 FROM pg_opclass opcl, rt_ops_tmp c
100 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
101 and opcname = 'gist_box_ops'
105 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
106 SELECT opcl.oid, 8, false, c.opoid
107 FROM pg_opclass opcl, rt_ops_tmp c
109 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
110 and opcname = 'gist_box_ops'
113 DROP table rt_ops_tmp;
115 -- add the entries to amproc for the support methods
116 -- note the amprocnum numbers associated with each are specific!
118 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
119 SELECT opcl.oid, 1, pro.oid
120 FROM pg_opclass opcl, pg_proc pro
122 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
123 and opcname = 'gist_box_ops'
124 and proname = 'gbox_consistent';
126 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
127 SELECT opcl.oid, 2, pro.oid
128 FROM pg_opclass opcl, pg_proc pro
130 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
131 and opcname = 'gist_box_ops'
132 and proname = 'gbox_union';
134 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
135 SELECT opcl.oid, 3, pro.oid
136 FROM pg_opclass opcl, pg_proc pro
138 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
139 and opcname = 'gist_box_ops'
140 and proname = 'gbox_compress';
142 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
143 SELECT opcl.oid, 4, pro.oid
144 FROM pg_opclass opcl, pg_proc pro
146 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
147 and opcname = 'gist_box_ops'
148 and proname = 'rtree_decompress';
150 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
151 SELECT opcl.oid, 5, pro.oid
152 FROM pg_opclass opcl, pg_proc pro
154 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
155 and opcname = 'gist_box_ops'
156 and proname = 'gbox_penalty';
158 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
159 SELECT opcl.oid, 6, pro.oid
160 FROM pg_opclass opcl, pg_proc pro
162 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
163 and opcname = 'gist_box_ops'
164 and proname = 'gbox_picksplit';
166 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
167 SELECT opcl.oid, 7, pro.oid
168 FROM pg_opclass opcl, pg_proc pro
170 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
171 and opcname = 'gist_box_ops'
172 and proname = 'gbox_same';
181 -- define the GiST support methods
182 create function gpoly_consistent(opaque,polygon,int4) returns bool as 'MODULE_PATHNAME' language 'C';
184 create function gpoly_compress(opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
186 create function gpoly_penalty(opaque,opaque,opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
188 create function gpoly_picksplit(opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
190 create function gpoly_union(bytea, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
192 create function gpoly_same(opaque, opaque, opaque) returns opaque as 'MODULE_PATHNAME' language 'C';
194 -- add a new opclass (non-default)
195 INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
197 (SELECT oid FROM pg_am WHERE amname = 'gist'),
199 (SELECT oid FROM pg_type WHERE typname = 'polygon'),
203 -- get the comparators for polygons and store them in a tmp table
204 -- hack for 757 (poly_contain_pt) Teodor
205 SELECT o.oid AS opoid, o.oprname
206 INTO TEMP TABLE rt_ops_tmp
207 FROM pg_operator o, pg_type t
208 WHERE o.oprleft = t.oid and o.oid <> 757
209 and t.typname = 'polygon';
211 -- using the tmp table, generate the amop entries
213 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
214 SELECT opcl.oid, 1, false, c.opoid
215 FROM pg_opclass opcl, rt_ops_tmp c
217 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
218 and opcname = 'gist_poly_ops'
219 and c.oprname = '<<';
222 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
223 SELECT opcl.oid, 2, false, c.opoid
224 FROM pg_opclass opcl, rt_ops_tmp c
226 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
227 and opcname = 'gist_poly_ops'
228 and c.oprname = '&<';
231 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
232 SELECT opcl.oid, 3, false, c.opoid
233 FROM pg_opclass opcl, rt_ops_tmp c
235 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
236 and opcname = 'gist_poly_ops'
237 and c.oprname = '&&';
240 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
241 SELECT opcl.oid, 4, false, c.opoid
242 FROM pg_opclass opcl, rt_ops_tmp c
244 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
245 and opcname = 'gist_poly_ops'
246 and c.oprname = '&>';
249 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
250 SELECT opcl.oid, 5, false, c.opoid
251 FROM pg_opclass opcl, rt_ops_tmp c
253 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
254 and opcname = 'gist_poly_ops'
255 and c.oprname = '>>';
258 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
259 SELECT opcl.oid, 6, false, c.opoid
260 FROM pg_opclass opcl, rt_ops_tmp c
262 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
263 and opcname = 'gist_poly_ops'
264 and c.oprname = '~=';
267 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
268 SELECT opcl.oid, 7, false, c.opoid
269 FROM pg_opclass opcl, rt_ops_tmp c
271 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
272 and opcname = 'gist_poly_ops'
276 INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
277 SELECT opcl.oid, 8, false, c.opoid
278 FROM pg_opclass opcl, rt_ops_tmp c
280 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
281 and opcname = 'gist_poly_ops'
284 DROP table rt_ops_tmp;
286 -- add the entries to amproc for the support methods
287 -- note the amprocnum numbers associated with each are specific!
289 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
290 SELECT opcl.oid, 1, pro.oid
291 FROM pg_opclass opcl, pg_proc pro
293 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
294 and opcname = 'gist_poly_ops'
295 and proname = 'gpoly_consistent';
297 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
298 SELECT opcl.oid, 2, pro.oid
299 FROM pg_opclass opcl, pg_proc pro
301 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
302 and opcname = 'gist_poly_ops'
303 and proname = 'gpoly_union';
305 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
306 SELECT opcl.oid, 3, pro.oid
307 FROM pg_opclass opcl, pg_proc pro
309 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
310 and opcname = 'gist_poly_ops'
311 and proname = 'gpoly_compress';
313 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
314 SELECT opcl.oid, 4, pro.oid
315 FROM pg_opclass opcl, pg_proc pro
317 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
318 and opcname = 'gist_poly_ops'
319 and proname = 'rtree_decompress';
321 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
322 SELECT opcl.oid, 5, pro.oid
323 FROM pg_opclass opcl, pg_proc pro
325 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
326 and opcname = 'gist_poly_ops'
327 and proname = 'gpoly_penalty';
329 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
330 SELECT opcl.oid, 6, pro.oid
331 FROM pg_opclass opcl, pg_proc pro
333 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
334 and opcname = 'gist_poly_ops'
335 and proname = 'gpoly_picksplit';
337 INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
338 SELECT opcl.oid, 7, pro.oid
339 FROM pg_opclass opcl, pg_proc pro
341 opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
342 and opcname = 'gist_poly_ops'
343 and proname = 'gpoly_same';