rev |
line source |
jbe@73
|
1 SET LOCAL search_path TO @extschema@;
|
jbe@73
|
2
|
jbe@0
|
3
|
jbe@0
|
4 ----------------------------------------
|
jbe@0
|
5 -- forward declarations (shell types) --
|
jbe@0
|
6 ----------------------------------------
|
jbe@0
|
7
|
jbe@46
|
8 CREATE TYPE ekey_point;
|
jbe@46
|
9 CREATE TYPE ekey_area;
|
jbe@0
|
10 CREATE TYPE epoint;
|
jbe@46
|
11 CREATE TYPE epoint_with_sample_count;
|
jbe@0
|
12 CREATE TYPE ebox;
|
jbe@0
|
13 CREATE TYPE ecircle;
|
jbe@0
|
14 CREATE TYPE ecluster;
|
jbe@0
|
15
|
jbe@0
|
16
|
jbe@0
|
17 ------------------------------------------------------------
|
jbe@0
|
18 -- dummy input/output functions for dummy index key types --
|
jbe@0
|
19 ------------------------------------------------------------
|
jbe@0
|
20
|
jbe@0
|
21 CREATE FUNCTION ekey_point_in_dummy(cstring)
|
jbe@0
|
22 RETURNS ekey_point
|
jbe@0
|
23 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
24 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
jbe@0
|
25
|
jbe@0
|
26 CREATE FUNCTION ekey_point_out_dummy(ekey_point)
|
jbe@0
|
27 RETURNS cstring
|
jbe@0
|
28 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
29 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
jbe@0
|
30
|
jbe@0
|
31 CREATE FUNCTION ekey_area_in_dummy(cstring)
|
jbe@0
|
32 RETURNS ekey_area
|
jbe@0
|
33 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
34 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
jbe@0
|
35
|
jbe@0
|
36 CREATE FUNCTION ekey_area_out_dummy(ekey_area)
|
jbe@0
|
37 RETURNS cstring
|
jbe@0
|
38 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
39 AS '$libdir/latlon-v0010', 'pgl_notimpl';
|
jbe@0
|
40
|
jbe@0
|
41
|
jbe@0
|
42 --------------------------
|
jbe@0
|
43 -- text input functions --
|
jbe@0
|
44 --------------------------
|
jbe@0
|
45
|
jbe@0
|
46 CREATE FUNCTION epoint_in(cstring)
|
jbe@0
|
47 RETURNS epoint
|
jbe@0
|
48 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
49 AS '$libdir/latlon-v0010', 'pgl_epoint_in';
|
jbe@46
|
50
|
jbe@46
|
51 CREATE FUNCTION epoint_with_sample_count_in(cstring)
|
jbe@46
|
52 RETURNS epoint_with_sample_count
|
jbe@46
|
53 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
54 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in';
|
jbe@0
|
55
|
jbe@0
|
56 CREATE FUNCTION ebox_in(cstring)
|
jbe@0
|
57 RETURNS ebox
|
jbe@0
|
58 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
59 AS '$libdir/latlon-v0010', 'pgl_ebox_in';
|
jbe@0
|
60
|
jbe@0
|
61 CREATE FUNCTION ecircle_in(cstring)
|
jbe@0
|
62 RETURNS ecircle
|
jbe@0
|
63 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
64 AS '$libdir/latlon-v0010', 'pgl_ecircle_in';
|
jbe@0
|
65
|
jbe@0
|
66 CREATE FUNCTION ecluster_in(cstring)
|
jbe@0
|
67 RETURNS ecluster
|
jbe@0
|
68 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
69 AS '$libdir/latlon-v0010', 'pgl_ecluster_in';
|
jbe@0
|
70
|
jbe@0
|
71
|
jbe@0
|
72 ---------------------------
|
jbe@0
|
73 -- text output functions --
|
jbe@0
|
74 ---------------------------
|
jbe@0
|
75
|
jbe@0
|
76 CREATE FUNCTION epoint_out(epoint)
|
jbe@0
|
77 RETURNS cstring
|
jbe@0
|
78 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
79 AS '$libdir/latlon-v0010', 'pgl_epoint_out';
|
jbe@46
|
80
|
jbe@46
|
81 CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count)
|
jbe@46
|
82 RETURNS cstring
|
jbe@46
|
83 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
84 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out';
|
jbe@0
|
85
|
jbe@0
|
86 CREATE FUNCTION ebox_out(ebox)
|
jbe@0
|
87 RETURNS cstring
|
jbe@0
|
88 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
89 AS '$libdir/latlon-v0010', 'pgl_ebox_out';
|
jbe@0
|
90
|
jbe@0
|
91 CREATE FUNCTION ecircle_out(ecircle)
|
jbe@0
|
92 RETURNS cstring
|
jbe@0
|
93 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
94 AS '$libdir/latlon-v0010', 'pgl_ecircle_out';
|
jbe@0
|
95
|
jbe@0
|
96 CREATE FUNCTION ecluster_out(ecluster)
|
jbe@0
|
97 RETURNS cstring
|
jbe@0
|
98 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
99 AS '$libdir/latlon-v0010', 'pgl_ecluster_out';
|
jbe@0
|
100
|
jbe@0
|
101
|
jbe@0
|
102 --------------------------
|
jbe@0
|
103 -- binary I/O functions --
|
jbe@0
|
104 --------------------------
|
jbe@0
|
105
|
jbe@0
|
106 CREATE FUNCTION epoint_recv(internal)
|
jbe@0
|
107 RETURNS epoint
|
jbe@0
|
108 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
109 AS '$libdir/latlon-v0010', 'pgl_epoint_recv';
|
jbe@0
|
110
|
jbe@0
|
111 CREATE FUNCTION ebox_recv(internal)
|
jbe@0
|
112 RETURNS ebox
|
jbe@0
|
113 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
114 AS '$libdir/latlon-v0010', 'pgl_ebox_recv';
|
jbe@0
|
115
|
jbe@0
|
116 CREATE FUNCTION ecircle_recv(internal)
|
jbe@0
|
117 RETURNS ecircle
|
jbe@0
|
118 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
119 AS '$libdir/latlon-v0010', 'pgl_ecircle_recv';
|
jbe@0
|
120
|
jbe@0
|
121 CREATE FUNCTION epoint_send(epoint)
|
jbe@0
|
122 RETURNS bytea
|
jbe@0
|
123 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
124 AS '$libdir/latlon-v0010', 'pgl_epoint_send';
|
jbe@0
|
125
|
jbe@0
|
126 CREATE FUNCTION ebox_send(ebox)
|
jbe@0
|
127 RETURNS bytea
|
jbe@0
|
128 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
129 AS '$libdir/latlon-v0010', 'pgl_ebox_send';
|
jbe@0
|
130
|
jbe@0
|
131 CREATE FUNCTION ecircle_send(ecircle)
|
jbe@0
|
132 RETURNS bytea
|
jbe@0
|
133 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
134 AS '$libdir/latlon-v0010', 'pgl_ecircle_send';
|
jbe@0
|
135
|
jbe@0
|
136
|
jbe@0
|
137 -----------------------------------------------
|
jbe@0
|
138 -- type definitions of dummy index key types --
|
jbe@0
|
139 -----------------------------------------------
|
jbe@0
|
140
|
jbe@0
|
141 CREATE TYPE ekey_point (
|
jbe@0
|
142 internallength = 8,
|
jbe@0
|
143 input = ekey_point_in_dummy,
|
jbe@0
|
144 output = ekey_point_out_dummy,
|
jbe@0
|
145 alignment = char );
|
jbe@0
|
146
|
jbe@0
|
147 CREATE TYPE ekey_area (
|
jbe@0
|
148 internallength = 9,
|
jbe@0
|
149 input = ekey_area_in_dummy,
|
jbe@0
|
150 output = ekey_area_out_dummy,
|
jbe@0
|
151 alignment = char );
|
jbe@0
|
152
|
jbe@0
|
153
|
jbe@0
|
154 ------------------------------------------
|
jbe@0
|
155 -- definitions of geographic data types --
|
jbe@0
|
156 ------------------------------------------
|
jbe@0
|
157
|
jbe@0
|
158 CREATE TYPE epoint (
|
jbe@0
|
159 internallength = 16,
|
jbe@0
|
160 input = epoint_in,
|
jbe@0
|
161 output = epoint_out,
|
jbe@0
|
162 receive = epoint_recv,
|
jbe@0
|
163 send = epoint_send,
|
jbe@0
|
164 alignment = double );
|
jbe@0
|
165
|
jbe@46
|
166 CREATE TYPE epoint_with_sample_count (
|
jbe@46
|
167 internallength = 20,
|
jbe@46
|
168 input = epoint_with_sample_count_in,
|
jbe@46
|
169 output = epoint_with_sample_count_out,
|
jbe@46
|
170 alignment = double );
|
jbe@46
|
171
|
jbe@0
|
172 CREATE TYPE ebox (
|
jbe@0
|
173 internallength = 32,
|
jbe@0
|
174 input = ebox_in,
|
jbe@0
|
175 output = ebox_out,
|
jbe@0
|
176 receive = ebox_recv,
|
jbe@0
|
177 send = ebox_send,
|
jbe@0
|
178 alignment = double );
|
jbe@0
|
179
|
jbe@0
|
180 CREATE TYPE ecircle (
|
jbe@0
|
181 internallength = 24,
|
jbe@0
|
182 input = ecircle_in,
|
jbe@0
|
183 output = ecircle_out,
|
jbe@0
|
184 receive = ecircle_recv,
|
jbe@0
|
185 send = ecircle_send,
|
jbe@0
|
186 alignment = double );
|
jbe@0
|
187
|
jbe@0
|
188 CREATE TYPE ecluster (
|
jbe@0
|
189 internallength = VARIABLE,
|
jbe@0
|
190 input = ecluster_in,
|
jbe@0
|
191 output = ecluster_out,
|
jbe@0
|
192 alignment = double,
|
jbe@0
|
193 storage = external );
|
jbe@0
|
194
|
jbe@0
|
195
|
jbe@0
|
196 --------------------
|
jbe@0
|
197 -- B-tree support --
|
jbe@0
|
198 --------------------
|
jbe@0
|
199
|
jbe@0
|
200 -- begin of B-tree support for epoint
|
jbe@0
|
201
|
jbe@0
|
202 CREATE FUNCTION epoint_btree_lt(epoint, epoint)
|
jbe@0
|
203 RETURNS boolean
|
jbe@0
|
204 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
205 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt';
|
jbe@0
|
206
|
jbe@0
|
207 CREATE FUNCTION epoint_btree_le(epoint, epoint)
|
jbe@0
|
208 RETURNS boolean
|
jbe@0
|
209 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
210 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le';
|
jbe@0
|
211
|
jbe@0
|
212 CREATE FUNCTION epoint_btree_eq(epoint, epoint)
|
jbe@0
|
213 RETURNS boolean
|
jbe@0
|
214 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
215 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq';
|
jbe@0
|
216
|
jbe@0
|
217 CREATE FUNCTION epoint_btree_ne(epoint, epoint)
|
jbe@0
|
218 RETURNS boolean
|
jbe@0
|
219 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
220 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne';
|
jbe@0
|
221
|
jbe@0
|
222 CREATE FUNCTION epoint_btree_ge(epoint, epoint)
|
jbe@0
|
223 RETURNS boolean
|
jbe@0
|
224 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
225 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge';
|
jbe@0
|
226
|
jbe@0
|
227 CREATE FUNCTION epoint_btree_gt(epoint, epoint)
|
jbe@0
|
228 RETURNS boolean
|
jbe@0
|
229 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
230 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt';
|
jbe@0
|
231
|
jbe@0
|
232 CREATE OPERATOR <<< (
|
jbe@0
|
233 leftarg = epoint,
|
jbe@0
|
234 rightarg = epoint,
|
jbe@0
|
235 procedure = epoint_btree_lt,
|
jbe@0
|
236 commutator = >>>,
|
jbe@0
|
237 negator = >>>=,
|
jbe@0
|
238 restrict = scalarltsel,
|
jbe@0
|
239 join = scalarltjoinsel
|
jbe@0
|
240 );
|
jbe@0
|
241
|
jbe@0
|
242 CREATE OPERATOR <<<= (
|
jbe@0
|
243 leftarg = epoint,
|
jbe@0
|
244 rightarg = epoint,
|
jbe@0
|
245 procedure = epoint_btree_le,
|
jbe@0
|
246 commutator = >>>=,
|
jbe@0
|
247 negator = >>>,
|
jbe@0
|
248 restrict = scalarltsel,
|
jbe@0
|
249 join = scalarltjoinsel
|
jbe@0
|
250 );
|
jbe@0
|
251
|
jbe@0
|
252 CREATE OPERATOR = (
|
jbe@0
|
253 leftarg = epoint,
|
jbe@0
|
254 rightarg = epoint,
|
jbe@0
|
255 procedure = epoint_btree_eq,
|
jbe@0
|
256 commutator = =,
|
jbe@0
|
257 negator = <>,
|
jbe@0
|
258 restrict = eqsel,
|
jbe@0
|
259 join = eqjoinsel,
|
jbe@0
|
260 merges
|
jbe@0
|
261 );
|
jbe@0
|
262
|
jbe@0
|
263 CREATE OPERATOR <> (
|
jbe@0
|
264 leftarg = epoint,
|
jbe@0
|
265 rightarg = epoint,
|
jbe@54
|
266 procedure = epoint_btree_ne,
|
jbe@0
|
267 commutator = <>,
|
jbe@0
|
268 negator = =,
|
jbe@0
|
269 restrict = neqsel,
|
jbe@0
|
270 join = neqjoinsel
|
jbe@0
|
271 );
|
jbe@0
|
272
|
jbe@0
|
273 CREATE OPERATOR >>>= (
|
jbe@0
|
274 leftarg = epoint,
|
jbe@0
|
275 rightarg = epoint,
|
jbe@0
|
276 procedure = epoint_btree_ge,
|
jbe@0
|
277 commutator = <<<=,
|
jbe@0
|
278 negator = <<<,
|
jbe@0
|
279 restrict = scalargtsel,
|
jbe@0
|
280 join = scalargtjoinsel
|
jbe@0
|
281 );
|
jbe@0
|
282
|
jbe@0
|
283 CREATE OPERATOR >>> (
|
jbe@0
|
284 leftarg = epoint,
|
jbe@0
|
285 rightarg = epoint,
|
jbe@0
|
286 procedure = epoint_btree_gt,
|
jbe@0
|
287 commutator = <<<,
|
jbe@0
|
288 negator = <<<=,
|
jbe@0
|
289 restrict = scalargtsel,
|
jbe@0
|
290 join = scalargtjoinsel
|
jbe@0
|
291 );
|
jbe@0
|
292
|
jbe@0
|
293 CREATE FUNCTION epoint_btree_cmp(epoint, epoint)
|
jbe@0
|
294 RETURNS int4
|
jbe@0
|
295 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
296 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp';
|
jbe@0
|
297
|
jbe@0
|
298 CREATE OPERATOR CLASS epoint_btree_ops
|
jbe@0
|
299 DEFAULT FOR TYPE epoint USING btree AS
|
jbe@0
|
300 OPERATOR 1 <<< ,
|
jbe@0
|
301 OPERATOR 2 <<<= ,
|
jbe@0
|
302 OPERATOR 3 = ,
|
jbe@0
|
303 OPERATOR 4 >>>= ,
|
jbe@0
|
304 OPERATOR 5 >>> ,
|
jbe@0
|
305 FUNCTION 1 epoint_btree_cmp(epoint, epoint);
|
jbe@0
|
306
|
jbe@0
|
307 -- end of B-tree support for epoint
|
jbe@0
|
308
|
jbe@0
|
309 -- begin of B-tree support for ebox
|
jbe@0
|
310
|
jbe@0
|
311 CREATE FUNCTION ebox_btree_lt(ebox, ebox)
|
jbe@0
|
312 RETURNS boolean
|
jbe@0
|
313 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
314 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt';
|
jbe@0
|
315
|
jbe@0
|
316 CREATE FUNCTION ebox_btree_le(ebox, ebox)
|
jbe@0
|
317 RETURNS boolean
|
jbe@0
|
318 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
319 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le';
|
jbe@0
|
320
|
jbe@0
|
321 CREATE FUNCTION ebox_btree_eq(ebox, ebox)
|
jbe@0
|
322 RETURNS boolean
|
jbe@0
|
323 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
324 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq';
|
jbe@0
|
325
|
jbe@0
|
326 CREATE FUNCTION ebox_btree_ne(ebox, ebox)
|
jbe@0
|
327 RETURNS boolean
|
jbe@0
|
328 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
329 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne';
|
jbe@0
|
330
|
jbe@0
|
331 CREATE FUNCTION ebox_btree_ge(ebox, ebox)
|
jbe@0
|
332 RETURNS boolean
|
jbe@0
|
333 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
334 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge';
|
jbe@0
|
335
|
jbe@0
|
336 CREATE FUNCTION ebox_btree_gt(ebox, ebox)
|
jbe@0
|
337 RETURNS boolean
|
jbe@0
|
338 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
339 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt';
|
jbe@0
|
340
|
jbe@0
|
341 CREATE OPERATOR <<< (
|
jbe@0
|
342 leftarg = ebox,
|
jbe@0
|
343 rightarg = ebox,
|
jbe@0
|
344 procedure = ebox_btree_lt,
|
jbe@0
|
345 commutator = >>>,
|
jbe@0
|
346 negator = >>>=,
|
jbe@0
|
347 restrict = scalarltsel,
|
jbe@0
|
348 join = scalarltjoinsel
|
jbe@0
|
349 );
|
jbe@0
|
350
|
jbe@0
|
351 CREATE OPERATOR <<<= (
|
jbe@0
|
352 leftarg = ebox,
|
jbe@0
|
353 rightarg = ebox,
|
jbe@0
|
354 procedure = ebox_btree_le,
|
jbe@0
|
355 commutator = >>>=,
|
jbe@0
|
356 negator = >>>,
|
jbe@0
|
357 restrict = scalarltsel,
|
jbe@0
|
358 join = scalarltjoinsel
|
jbe@0
|
359 );
|
jbe@0
|
360
|
jbe@0
|
361 CREATE OPERATOR = (
|
jbe@0
|
362 leftarg = ebox,
|
jbe@0
|
363 rightarg = ebox,
|
jbe@0
|
364 procedure = ebox_btree_eq,
|
jbe@0
|
365 commutator = =,
|
jbe@0
|
366 negator = <>,
|
jbe@0
|
367 restrict = eqsel,
|
jbe@0
|
368 join = eqjoinsel,
|
jbe@0
|
369 merges
|
jbe@0
|
370 );
|
jbe@0
|
371
|
jbe@0
|
372 CREATE OPERATOR <> (
|
jbe@0
|
373 leftarg = ebox,
|
jbe@0
|
374 rightarg = ebox,
|
jbe@54
|
375 procedure = ebox_btree_ne,
|
jbe@0
|
376 commutator = <>,
|
jbe@0
|
377 negator = =,
|
jbe@0
|
378 restrict = neqsel,
|
jbe@0
|
379 join = neqjoinsel
|
jbe@0
|
380 );
|
jbe@0
|
381
|
jbe@0
|
382 CREATE OPERATOR >>>= (
|
jbe@0
|
383 leftarg = ebox,
|
jbe@0
|
384 rightarg = ebox,
|
jbe@0
|
385 procedure = ebox_btree_ge,
|
jbe@0
|
386 commutator = <<<=,
|
jbe@0
|
387 negator = <<<,
|
jbe@0
|
388 restrict = scalargtsel,
|
jbe@0
|
389 join = scalargtjoinsel
|
jbe@0
|
390 );
|
jbe@0
|
391
|
jbe@0
|
392 CREATE OPERATOR >>> (
|
jbe@0
|
393 leftarg = ebox,
|
jbe@0
|
394 rightarg = ebox,
|
jbe@0
|
395 procedure = ebox_btree_gt,
|
jbe@0
|
396 commutator = <<<,
|
jbe@0
|
397 negator = <<<=,
|
jbe@0
|
398 restrict = scalargtsel,
|
jbe@0
|
399 join = scalargtjoinsel
|
jbe@0
|
400 );
|
jbe@0
|
401
|
jbe@0
|
402 CREATE FUNCTION ebox_btree_cmp(ebox, ebox)
|
jbe@0
|
403 RETURNS int4
|
jbe@0
|
404 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
405 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp';
|
jbe@0
|
406
|
jbe@0
|
407 CREATE OPERATOR CLASS ebox_btree_ops
|
jbe@0
|
408 DEFAULT FOR TYPE ebox USING btree AS
|
jbe@0
|
409 OPERATOR 1 <<< ,
|
jbe@0
|
410 OPERATOR 2 <<<= ,
|
jbe@0
|
411 OPERATOR 3 = ,
|
jbe@0
|
412 OPERATOR 4 >>>= ,
|
jbe@0
|
413 OPERATOR 5 >>> ,
|
jbe@0
|
414 FUNCTION 1 ebox_btree_cmp(ebox, ebox);
|
jbe@0
|
415
|
jbe@0
|
416 -- end of B-tree support for ebox
|
jbe@0
|
417
|
jbe@0
|
418 -- begin of B-tree support for ecircle
|
jbe@0
|
419
|
jbe@0
|
420 CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle)
|
jbe@0
|
421 RETURNS boolean
|
jbe@0
|
422 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
423 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt';
|
jbe@0
|
424
|
jbe@0
|
425 CREATE FUNCTION ecircle_btree_le(ecircle, ecircle)
|
jbe@0
|
426 RETURNS boolean
|
jbe@0
|
427 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
428 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le';
|
jbe@0
|
429
|
jbe@0
|
430 CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle)
|
jbe@0
|
431 RETURNS boolean
|
jbe@0
|
432 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
433 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq';
|
jbe@0
|
434
|
jbe@0
|
435 CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle)
|
jbe@0
|
436 RETURNS boolean
|
jbe@0
|
437 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
438 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne';
|
jbe@0
|
439
|
jbe@0
|
440 CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle)
|
jbe@0
|
441 RETURNS boolean
|
jbe@0
|
442 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
443 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge';
|
jbe@0
|
444
|
jbe@0
|
445 CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle)
|
jbe@0
|
446 RETURNS boolean
|
jbe@0
|
447 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
448 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt';
|
jbe@0
|
449
|
jbe@0
|
450 CREATE OPERATOR <<< (
|
jbe@0
|
451 leftarg = ecircle,
|
jbe@0
|
452 rightarg = ecircle,
|
jbe@0
|
453 procedure = ecircle_btree_lt,
|
jbe@0
|
454 commutator = >>>,
|
jbe@0
|
455 negator = >>>=,
|
jbe@0
|
456 restrict = scalarltsel,
|
jbe@0
|
457 join = scalarltjoinsel
|
jbe@0
|
458 );
|
jbe@0
|
459
|
jbe@0
|
460 CREATE OPERATOR <<<= (
|
jbe@0
|
461 leftarg = ecircle,
|
jbe@0
|
462 rightarg = ecircle,
|
jbe@0
|
463 procedure = ecircle_btree_le,
|
jbe@0
|
464 commutator = >>>=,
|
jbe@0
|
465 negator = >>>,
|
jbe@0
|
466 restrict = scalarltsel,
|
jbe@0
|
467 join = scalarltjoinsel
|
jbe@0
|
468 );
|
jbe@0
|
469
|
jbe@0
|
470 CREATE OPERATOR = (
|
jbe@0
|
471 leftarg = ecircle,
|
jbe@0
|
472 rightarg = ecircle,
|
jbe@0
|
473 procedure = ecircle_btree_eq,
|
jbe@0
|
474 commutator = =,
|
jbe@0
|
475 negator = <>,
|
jbe@0
|
476 restrict = eqsel,
|
jbe@0
|
477 join = eqjoinsel,
|
jbe@0
|
478 merges
|
jbe@0
|
479 );
|
jbe@0
|
480
|
jbe@0
|
481 CREATE OPERATOR <> (
|
jbe@0
|
482 leftarg = ecircle,
|
jbe@0
|
483 rightarg = ecircle,
|
jbe@54
|
484 procedure = ecircle_btree_ne,
|
jbe@0
|
485 commutator = <>,
|
jbe@0
|
486 negator = =,
|
jbe@0
|
487 restrict = neqsel,
|
jbe@0
|
488 join = neqjoinsel
|
jbe@0
|
489 );
|
jbe@0
|
490
|
jbe@0
|
491 CREATE OPERATOR >>>= (
|
jbe@0
|
492 leftarg = ecircle,
|
jbe@0
|
493 rightarg = ecircle,
|
jbe@0
|
494 procedure = ecircle_btree_ge,
|
jbe@0
|
495 commutator = <<<=,
|
jbe@0
|
496 negator = <<<,
|
jbe@0
|
497 restrict = scalargtsel,
|
jbe@0
|
498 join = scalargtjoinsel
|
jbe@0
|
499 );
|
jbe@0
|
500
|
jbe@0
|
501 CREATE OPERATOR >>> (
|
jbe@0
|
502 leftarg = ecircle,
|
jbe@0
|
503 rightarg = ecircle,
|
jbe@0
|
504 procedure = ecircle_btree_gt,
|
jbe@0
|
505 commutator = <<<,
|
jbe@0
|
506 negator = <<<=,
|
jbe@0
|
507 restrict = scalargtsel,
|
jbe@0
|
508 join = scalargtjoinsel
|
jbe@0
|
509 );
|
jbe@0
|
510
|
jbe@0
|
511 CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle)
|
jbe@0
|
512 RETURNS int4
|
jbe@0
|
513 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
514 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp';
|
jbe@0
|
515
|
jbe@0
|
516 CREATE OPERATOR CLASS ecircle_btree_ops
|
jbe@0
|
517 DEFAULT FOR TYPE ecircle USING btree AS
|
jbe@0
|
518 OPERATOR 1 <<< ,
|
jbe@0
|
519 OPERATOR 2 <<<= ,
|
jbe@0
|
520 OPERATOR 3 = ,
|
jbe@0
|
521 OPERATOR 4 >>>= ,
|
jbe@0
|
522 OPERATOR 5 >>> ,
|
jbe@0
|
523 FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle);
|
jbe@0
|
524
|
jbe@0
|
525 -- end of B-tree support for ecircle
|
jbe@0
|
526
|
jbe@0
|
527
|
jbe@0
|
528 ----------------
|
jbe@0
|
529 -- type casts --
|
jbe@0
|
530 ----------------
|
jbe@0
|
531
|
jbe@0
|
532 CREATE FUNCTION cast_epoint_to_ebox(epoint)
|
jbe@0
|
533 RETURNS ebox
|
jbe@0
|
534 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
535 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox';
|
jbe@0
|
536
|
jbe@0
|
537 CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint);
|
jbe@0
|
538
|
jbe@0
|
539 CREATE FUNCTION cast_epoint_to_ecircle(epoint)
|
jbe@0
|
540 RETURNS ecircle
|
jbe@0
|
541 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
542 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle';
|
jbe@0
|
543
|
jbe@0
|
544 CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint);
|
jbe@0
|
545
|
jbe@0
|
546 CREATE FUNCTION cast_epoint_to_ecluster(epoint)
|
jbe@0
|
547 RETURNS ecluster
|
jbe@0
|
548 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
549 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster';
|
jbe@0
|
550
|
jbe@0
|
551 CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint);
|
jbe@0
|
552
|
jbe@0
|
553 CREATE FUNCTION cast_ebox_to_ecluster(ebox)
|
jbe@0
|
554 RETURNS ecluster
|
jbe@0
|
555 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
556 AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster';
|
jbe@0
|
557
|
jbe@0
|
558 CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox);
|
jbe@0
|
559
|
jbe@0
|
560
|
jbe@0
|
561 ---------------------------
|
jbe@0
|
562 -- constructor functions --
|
jbe@0
|
563 ---------------------------
|
jbe@0
|
564
|
jbe@0
|
565 CREATE FUNCTION epoint(float8, float8)
|
jbe@0
|
566 RETURNS epoint
|
jbe@0
|
567 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
568 AS '$libdir/latlon-v0010', 'pgl_create_epoint';
|
jbe@0
|
569
|
jbe@0
|
570 CREATE FUNCTION epoint_latlon(float8, float8)
|
jbe@0
|
571 RETURNS epoint
|
jbe@0
|
572 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
jbe@73
|
573 SELECT @extschema@.epoint($1, $2)
|
jbe@0
|
574 $$;
|
jbe@0
|
575
|
jbe@0
|
576 CREATE FUNCTION epoint_lonlat(float8, float8)
|
jbe@0
|
577 RETURNS epoint
|
jbe@0
|
578 LANGUAGE SQL IMMUTABLE STRICT AS $$
|
jbe@73
|
579 SELECT @extschema@.epoint($2, $1)
|
jbe@0
|
580 $$;
|
jbe@0
|
581
|
jbe@46
|
582 CREATE FUNCTION epoint_with_sample_count(epoint, int4)
|
jbe@46
|
583 RETURNS epoint_with_sample_count
|
jbe@46
|
584 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
585 AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count';
|
jbe@46
|
586
|
jbe@0
|
587 CREATE FUNCTION empty_ebox()
|
jbe@0
|
588 RETURNS ebox
|
jbe@0
|
589 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
590 AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox';
|
jbe@0
|
591
|
jbe@0
|
592 CREATE FUNCTION ebox(float8, float8, float8, float8)
|
jbe@0
|
593 RETURNS ebox
|
jbe@0
|
594 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
595 AS '$libdir/latlon-v0010', 'pgl_create_ebox';
|
jbe@0
|
596
|
jbe@0
|
597 CREATE FUNCTION ebox(epoint, epoint)
|
jbe@0
|
598 RETURNS ebox
|
jbe@0
|
599 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
600 AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints';
|
jbe@0
|
601
|
jbe@0
|
602 CREATE FUNCTION ecircle(float8, float8, float8)
|
jbe@0
|
603 RETURNS ecircle
|
jbe@0
|
604 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
605 AS '$libdir/latlon-v0010', 'pgl_create_ecircle';
|
jbe@0
|
606
|
jbe@0
|
607 CREATE FUNCTION ecircle(epoint, float8)
|
jbe@0
|
608 RETURNS ecircle
|
jbe@0
|
609 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
610 AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint';
|
jbe@0
|
611
|
jbe@0
|
612 CREATE FUNCTION ecluster_concat(ecluster[])
|
jbe@0
|
613 RETURNS ecluster
|
jbe@0
|
614 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
615 SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster
|
jbe@0
|
616 $$;
|
jbe@0
|
617
|
jbe@0
|
618 CREATE FUNCTION ecluster_concat(ecluster, ecluster)
|
jbe@0
|
619 RETURNS ecluster
|
jbe@0
|
620 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
621 SELECT (
|
jbe@73
|
622 $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||)
|
jbe@73
|
623 $2::pg_catalog.text
|
jbe@73
|
624 )::@extschema@.ecluster
|
jbe@0
|
625 $$;
|
jbe@0
|
626
|
jbe@0
|
627 CREATE FUNCTION ecluster_create_multipoint(epoint[])
|
jbe@0
|
628 RETURNS ecluster
|
jbe@0
|
629 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
630 SELECT
|
jbe@73
|
631 pg_catalog.array_to_string(
|
jbe@73
|
632 pg_catalog.array_agg(
|
jbe@73
|
633 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')'
|
jbe@73
|
634 ),
|
jbe@73
|
635 ' '
|
jbe@73
|
636 )::@extschema@.ecluster
|
jbe@73
|
637 FROM pg_catalog.unnest($1)
|
jbe@0
|
638 $$;
|
jbe@0
|
639
|
jbe@0
|
640 CREATE FUNCTION ecluster_create_path(epoint[])
|
jbe@0
|
641 RETURNS ecluster
|
jbe@0
|
642 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
643 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
jbe@73
|
644 'empty'::@extschema@.ecluster
|
jbe@73
|
645 ELSE
|
jbe@73
|
646 (
|
jbe@73
|
647 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')'
|
jbe@73
|
648 )::@extschema@.ecluster
|
jbe@0
|
649 END
|
jbe@73
|
650 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
jbe@0
|
651 $$;
|
jbe@0
|
652
|
jbe@0
|
653 CREATE FUNCTION ecluster_create_outline(epoint[])
|
jbe@0
|
654 RETURNS ecluster
|
jbe@0
|
655 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
656 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
jbe@73
|
657 'empty'::@extschema@.ecluster
|
jbe@73
|
658 ELSE
|
jbe@73
|
659 (
|
jbe@73
|
660 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')'
|
jbe@73
|
661 )::@extschema@.ecluster
|
jbe@0
|
662 END
|
jbe@73
|
663 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
jbe@0
|
664 $$;
|
jbe@0
|
665
|
jbe@0
|
666 CREATE FUNCTION ecluster_create_polygon(epoint[])
|
jbe@0
|
667 RETURNS ecluster
|
jbe@0
|
668 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
669 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN
|
jbe@73
|
670 'empty'::@extschema@.ecluster
|
jbe@73
|
671 ELSE
|
jbe@73
|
672 (
|
jbe@73
|
673 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ')
|
jbe@73
|
674 OPERATOR(pg_catalog.||) ')'
|
jbe@73
|
675 )::@extschema@.ecluster
|
jbe@0
|
676 END
|
jbe@73
|
677 FROM pg_catalog.array_to_string($1, ' ') AS "str"
|
jbe@0
|
678 $$;
|
jbe@0
|
679
|
jbe@0
|
680
|
jbe@0
|
681 ----------------------
|
jbe@0
|
682 -- getter functions --
|
jbe@0
|
683 ----------------------
|
jbe@0
|
684
|
jbe@0
|
685 CREATE FUNCTION latitude(epoint)
|
jbe@0
|
686 RETURNS float8
|
jbe@0
|
687 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
688 AS '$libdir/latlon-v0010', 'pgl_epoint_lat';
|
jbe@0
|
689
|
jbe@0
|
690 CREATE FUNCTION longitude(epoint)
|
jbe@0
|
691 RETURNS float8
|
jbe@0
|
692 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
693 AS '$libdir/latlon-v0010', 'pgl_epoint_lon';
|
jbe@0
|
694
|
jbe@0
|
695 CREATE FUNCTION min_latitude(ebox)
|
jbe@0
|
696 RETURNS float8
|
jbe@0
|
697 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
698 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min';
|
jbe@0
|
699
|
jbe@0
|
700 CREATE FUNCTION max_latitude(ebox)
|
jbe@0
|
701 RETURNS float8
|
jbe@0
|
702 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
703 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max';
|
jbe@0
|
704
|
jbe@0
|
705 CREATE FUNCTION min_longitude(ebox)
|
jbe@0
|
706 RETURNS float8
|
jbe@0
|
707 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
708 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min';
|
jbe@0
|
709
|
jbe@0
|
710 CREATE FUNCTION max_longitude(ebox)
|
jbe@0
|
711 RETURNS float8
|
jbe@0
|
712 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
713 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max';
|
jbe@0
|
714
|
jbe@0
|
715 CREATE FUNCTION center(ecircle)
|
jbe@0
|
716 RETURNS epoint
|
jbe@0
|
717 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
718 AS '$libdir/latlon-v0010', 'pgl_ecircle_center';
|
jbe@0
|
719
|
jbe@0
|
720 CREATE FUNCTION radius(ecircle)
|
jbe@0
|
721 RETURNS float8
|
jbe@0
|
722 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
723 AS '$libdir/latlon-v0010', 'pgl_ecircle_radius';
|
jbe@0
|
724
|
jbe@0
|
725 CREATE FUNCTION ecluster_extract_points(ecluster)
|
jbe@0
|
726 RETURNS SETOF epoint
|
jbe@0
|
727 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
728 SELECT "match"[2]::@extschema@.epoint
|
jbe@73
|
729 FROM pg_catalog.regexp_matches(
|
jbe@73
|
730 $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g'
|
jbe@73
|
731 ) AS "match"
|
jbe@0
|
732 $$;
|
jbe@0
|
733
|
jbe@0
|
734 CREATE FUNCTION ecluster_extract_paths(ecluster)
|
jbe@0
|
735 RETURNS SETOF epoint[]
|
jbe@0
|
736 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
737 SELECT (
|
jbe@73
|
738 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
jbe@73
|
739 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
740 )
|
jbe@73
|
741 FROM pg_catalog.regexp_matches(
|
jbe@73
|
742 $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g'
|
jbe@73
|
743 ) AS "m1"
|
jbe@0
|
744 $$;
|
jbe@0
|
745
|
jbe@0
|
746 CREATE FUNCTION ecluster_extract_outlines(ecluster)
|
jbe@0
|
747 RETURNS SETOF epoint[]
|
jbe@0
|
748 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
749 SELECT (
|
jbe@73
|
750 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
jbe@73
|
751 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
752 )
|
jbe@73
|
753 FROM pg_catalog.regexp_matches(
|
jbe@73
|
754 $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g'
|
jbe@73
|
755 ) AS "m1"
|
jbe@0
|
756 $$;
|
jbe@0
|
757
|
jbe@0
|
758 CREATE FUNCTION ecluster_extract_polygons(ecluster)
|
jbe@0
|
759 RETURNS SETOF epoint[]
|
jbe@0
|
760 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
761 SELECT (
|
jbe@73
|
762 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint)
|
jbe@73
|
763 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2"
|
jbe@0
|
764 )
|
jbe@73
|
765 FROM pg_catalog.regexp_matches(
|
jbe@73
|
766 $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g'
|
jbe@73
|
767 ) AS "m1"
|
jbe@0
|
768 $$;
|
jbe@0
|
769
|
jbe@0
|
770
|
jbe@0
|
771 ---------------
|
jbe@0
|
772 -- operators --
|
jbe@0
|
773 ---------------
|
jbe@0
|
774
|
jbe@0
|
775 CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox)
|
jbe@0
|
776 RETURNS boolean
|
jbe@0
|
777 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
778 AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap';
|
jbe@0
|
779
|
jbe@0
|
780 CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle)
|
jbe@0
|
781 RETURNS boolean
|
jbe@0
|
782 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
783 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap';
|
jbe@0
|
784
|
jbe@0
|
785 CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster)
|
jbe@0
|
786 RETURNS boolean
|
jbe@0
|
787 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
788 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap';
|
jbe@0
|
789
|
jbe@10
|
790 CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster)
|
jbe@10
|
791 RETURNS boolean
|
jbe@10
|
792 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
793 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap';
|
jbe@10
|
794
|
jbe@0
|
795 CREATE FUNCTION ebox_overlap_proc(ebox, ebox)
|
jbe@0
|
796 RETURNS boolean
|
jbe@0
|
797 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
798 AS '$libdir/latlon-v0010', 'pgl_ebox_overlap';
|
jbe@0
|
799
|
jbe@10
|
800 CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle)
|
jbe@10
|
801 RETURNS boolean
|
jbe@10
|
802 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
803 AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap';
|
jbe@10
|
804
|
jbe@10
|
805 CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster)
|
jbe@10
|
806 RETURNS boolean
|
jbe@10
|
807 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
808 AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap';
|
jbe@10
|
809
|
jbe@0
|
810 CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle)
|
jbe@0
|
811 RETURNS boolean
|
jbe@0
|
812 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
813 AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap';
|
jbe@0
|
814
|
jbe@0
|
815 CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster)
|
jbe@0
|
816 RETURNS boolean
|
jbe@0
|
817 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
818 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap';
|
jbe@0
|
819
|
jbe@10
|
820 CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster)
|
jbe@10
|
821 RETURNS boolean
|
jbe@10
|
822 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
823 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap';
|
jbe@10
|
824
|
jbe@16
|
825 CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster)
|
jbe@16
|
826 RETURNS boolean
|
jbe@16
|
827 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
828 AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap';
|
jbe@16
|
829
|
jbe@10
|
830 CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster)
|
jbe@10
|
831 RETURNS boolean
|
jbe@10
|
832 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
833 AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap';
|
jbe@10
|
834
|
jbe@16
|
835 CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster)
|
jbe@16
|
836 RETURNS boolean
|
jbe@16
|
837 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
838 AS '$libdir/latlon-v0010', 'pgl_ecluster_contains';
|
jbe@16
|
839
|
jbe@0
|
840 CREATE FUNCTION epoint_distance_proc(epoint, epoint)
|
jbe@0
|
841 RETURNS float8
|
jbe@0
|
842 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
843 AS '$libdir/latlon-v0010', 'pgl_epoint_distance';
|
jbe@0
|
844
|
jbe@0
|
845 CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle)
|
jbe@0
|
846 RETURNS float8
|
jbe@0
|
847 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
848 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance';
|
jbe@0
|
849
|
jbe@0
|
850 CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster)
|
jbe@0
|
851 RETURNS float8
|
jbe@0
|
852 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
853 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance';
|
jbe@0
|
854
|
jbe@0
|
855 CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle)
|
jbe@0
|
856 RETURNS float8
|
jbe@0
|
857 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
858 AS '$libdir/latlon-v0010', 'pgl_ecircle_distance';
|
jbe@0
|
859
|
jbe@0
|
860 CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster)
|
jbe@0
|
861 RETURNS float8
|
jbe@0
|
862 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
863 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance';
|
jbe@0
|
864
|
jbe@16
|
865 CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster)
|
jbe@16
|
866 RETURNS float8
|
jbe@16
|
867 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
868 AS '$libdir/latlon-v0010', 'pgl_ecluster_distance';
|
jbe@46
|
869
|
jbe@46
|
870 CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count)
|
jbe@46
|
871 RETURNS float8
|
jbe@46
|
872 LANGUAGE C IMMUTABLE STRICT
|
jbe@71
|
873 AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance';
|
jbe@16
|
874
|
jbe@0
|
875 CREATE OPERATOR && (
|
jbe@0
|
876 leftarg = epoint,
|
jbe@0
|
877 rightarg = ebox,
|
jbe@0
|
878 procedure = epoint_ebox_overlap_proc,
|
jbe@0
|
879 commutator = &&,
|
jbe@0
|
880 restrict = areasel,
|
jbe@0
|
881 join = areajoinsel
|
jbe@0
|
882 );
|
jbe@0
|
883
|
jbe@0
|
884 CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint)
|
jbe@0
|
885 RETURNS boolean
|
jbe@73
|
886 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
jbe@0
|
887
|
jbe@0
|
888 CREATE OPERATOR && (
|
jbe@0
|
889 leftarg = ebox,
|
jbe@0
|
890 rightarg = epoint,
|
jbe@0
|
891 procedure = epoint_ebox_overlap_commutator,
|
jbe@0
|
892 commutator = &&,
|
jbe@0
|
893 restrict = areasel,
|
jbe@0
|
894 join = areajoinsel
|
jbe@0
|
895 );
|
jbe@0
|
896
|
jbe@0
|
897 CREATE OPERATOR && (
|
jbe@0
|
898 leftarg = epoint,
|
jbe@0
|
899 rightarg = ecircle,
|
jbe@0
|
900 procedure = epoint_ecircle_overlap_proc,
|
jbe@0
|
901 commutator = &&,
|
jbe@0
|
902 restrict = areasel,
|
jbe@0
|
903 join = areajoinsel
|
jbe@0
|
904 );
|
jbe@0
|
905
|
jbe@0
|
906 CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint)
|
jbe@0
|
907 RETURNS boolean
|
jbe@73
|
908 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
jbe@0
|
909
|
jbe@0
|
910 CREATE OPERATOR && (
|
jbe@0
|
911 leftarg = ecircle,
|
jbe@0
|
912 rightarg = epoint,
|
jbe@0
|
913 procedure = epoint_ecircle_overlap_commutator,
|
jbe@0
|
914 commutator = &&,
|
jbe@0
|
915 restrict = areasel,
|
jbe@0
|
916 join = areajoinsel
|
jbe@0
|
917 );
|
jbe@0
|
918
|
jbe@0
|
919 CREATE OPERATOR && (
|
jbe@0
|
920 leftarg = epoint,
|
jbe@0
|
921 rightarg = ecluster,
|
jbe@0
|
922 procedure = epoint_ecluster_overlap_proc,
|
jbe@0
|
923 commutator = &&,
|
jbe@0
|
924 restrict = areasel,
|
jbe@0
|
925 join = areajoinsel
|
jbe@0
|
926 );
|
jbe@0
|
927
|
jbe@0
|
928 CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint)
|
jbe@0
|
929 RETURNS boolean
|
jbe@73
|
930 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
jbe@0
|
931
|
jbe@0
|
932 CREATE OPERATOR && (
|
jbe@0
|
933 leftarg = ecluster,
|
jbe@0
|
934 rightarg = epoint,
|
jbe@0
|
935 procedure = epoint_ecluster_overlap_commutator,
|
jbe@0
|
936 commutator = &&,
|
jbe@0
|
937 restrict = areasel,
|
jbe@0
|
938 join = areajoinsel
|
jbe@0
|
939 );
|
jbe@0
|
940
|
jbe@0
|
941 CREATE OPERATOR && (
|
jbe@0
|
942 leftarg = ebox,
|
jbe@0
|
943 rightarg = ebox,
|
jbe@0
|
944 procedure = ebox_overlap_proc,
|
jbe@0
|
945 commutator = &&,
|
jbe@0
|
946 restrict = areasel,
|
jbe@0
|
947 join = areajoinsel
|
jbe@0
|
948 );
|
jbe@0
|
949
|
jbe@0
|
950 CREATE OPERATOR && (
|
jbe@0
|
951 leftarg = ecircle,
|
jbe@0
|
952 rightarg = ecircle,
|
jbe@0
|
953 procedure = ecircle_overlap_proc,
|
jbe@0
|
954 commutator = &&,
|
jbe@0
|
955 restrict = areasel,
|
jbe@0
|
956 join = areajoinsel
|
jbe@0
|
957 );
|
jbe@0
|
958
|
jbe@0
|
959 CREATE OPERATOR && (
|
jbe@0
|
960 leftarg = ecircle,
|
jbe@0
|
961 rightarg = ecluster,
|
jbe@0
|
962 procedure = ecircle_ecluster_overlap_proc,
|
jbe@0
|
963 commutator = &&,
|
jbe@0
|
964 restrict = areasel,
|
jbe@0
|
965 join = areajoinsel
|
jbe@0
|
966 );
|
jbe@0
|
967
|
jbe@0
|
968 CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle)
|
jbe@0
|
969 RETURNS boolean
|
jbe@73
|
970 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1';
|
jbe@0
|
971
|
jbe@0
|
972 CREATE OPERATOR && (
|
jbe@0
|
973 leftarg = ecluster,
|
jbe@0
|
974 rightarg = ecircle,
|
jbe@0
|
975 procedure = ecircle_ecluster_overlap_commutator,
|
jbe@0
|
976 commutator = &&,
|
jbe@0
|
977 restrict = areasel,
|
jbe@0
|
978 join = areajoinsel
|
jbe@0
|
979 );
|
jbe@0
|
980
|
jbe@16
|
981 CREATE OPERATOR && (
|
jbe@16
|
982 leftarg = ecluster,
|
jbe@16
|
983 rightarg = ecluster,
|
jbe@16
|
984 procedure = ecluster_overlap_proc,
|
jbe@16
|
985 commutator = &&,
|
jbe@16
|
986 restrict = areasel,
|
jbe@16
|
987 join = areajoinsel
|
jbe@16
|
988 );
|
jbe@16
|
989
|
jbe@16
|
990 CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle)
|
jbe@16
|
991 RETURNS boolean
|
jbe@73
|
992 LANGUAGE sql IMMUTABLE
|
jbe@73
|
993 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2';
|
jbe@16
|
994
|
jbe@16
|
995 CREATE OPERATOR && (
|
jbe@16
|
996 leftarg = ebox,
|
jbe@16
|
997 rightarg = ecircle,
|
jbe@16
|
998 procedure = ebox_ecircle_overlap_castwrap,
|
jbe@16
|
999 commutator = &&,
|
jbe@16
|
1000 restrict = areasel,
|
jbe@16
|
1001 join = areajoinsel
|
jbe@16
|
1002 );
|
jbe@16
|
1003
|
jbe@16
|
1004 CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox)
|
jbe@16
|
1005 RETURNS boolean
|
jbe@73
|
1006 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1007 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster';
|
jbe@16
|
1008
|
jbe@16
|
1009 CREATE OPERATOR && (
|
jbe@16
|
1010 leftarg = ecircle,
|
jbe@16
|
1011 rightarg = ebox,
|
jbe@16
|
1012 procedure = ebox_ecircle_overlap_castwrap,
|
jbe@16
|
1013 commutator = &&,
|
jbe@16
|
1014 restrict = areasel,
|
jbe@16
|
1015 join = areajoinsel
|
jbe@16
|
1016 );
|
jbe@16
|
1017
|
jbe@16
|
1018 CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster)
|
jbe@16
|
1019 RETURNS boolean
|
jbe@73
|
1020 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1021 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2';
|
jbe@16
|
1022
|
jbe@16
|
1023 CREATE OPERATOR && (
|
jbe@16
|
1024 leftarg = ebox,
|
jbe@16
|
1025 rightarg = ecluster,
|
jbe@16
|
1026 procedure = ebox_ecluster_overlap_castwrap,
|
jbe@16
|
1027 commutator = &&,
|
jbe@16
|
1028 restrict = areasel,
|
jbe@16
|
1029 join = areajoinsel
|
jbe@16
|
1030 );
|
jbe@16
|
1031
|
jbe@16
|
1032 CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox)
|
jbe@16
|
1033 RETURNS boolean
|
jbe@73
|
1034 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1035 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster';
|
jbe@16
|
1036
|
jbe@16
|
1037 CREATE OPERATOR && (
|
jbe@16
|
1038 leftarg = ecluster,
|
jbe@16
|
1039 rightarg = ebox,
|
jbe@16
|
1040 procedure = ebox_ecluster_overlap_castwrap,
|
jbe@16
|
1041 commutator = &&,
|
jbe@16
|
1042 restrict = areasel,
|
jbe@16
|
1043 join = areajoinsel
|
jbe@16
|
1044 );
|
jbe@16
|
1045
|
jbe@10
|
1046 CREATE OPERATOR &&+ (
|
jbe@10
|
1047 leftarg = epoint,
|
jbe@10
|
1048 rightarg = ecluster,
|
jbe@10
|
1049 procedure = epoint_ecluster_may_overlap_proc,
|
jbe@10
|
1050 commutator = &&+,
|
jbe@10
|
1051 restrict = areasel,
|
jbe@10
|
1052 join = areajoinsel
|
jbe@10
|
1053 );
|
jbe@10
|
1054
|
jbe@10
|
1055 CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint)
|
jbe@10
|
1056 RETURNS boolean
|
jbe@73
|
1057 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
jbe@10
|
1058
|
jbe@10
|
1059 CREATE OPERATOR &&+ (
|
jbe@10
|
1060 leftarg = ecluster,
|
jbe@10
|
1061 rightarg = epoint,
|
jbe@10
|
1062 procedure = epoint_ecluster_may_overlap_commutator,
|
jbe@10
|
1063 commutator = &&+,
|
jbe@10
|
1064 restrict = areasel,
|
jbe@10
|
1065 join = areajoinsel
|
jbe@10
|
1066 );
|
jbe@10
|
1067
|
jbe@10
|
1068 CREATE OPERATOR &&+ (
|
jbe@10
|
1069 leftarg = ebox,
|
jbe@10
|
1070 rightarg = ecircle,
|
jbe@10
|
1071 procedure = ebox_ecircle_may_overlap_proc,
|
jbe@10
|
1072 commutator = &&+,
|
jbe@10
|
1073 restrict = areasel,
|
jbe@10
|
1074 join = areajoinsel
|
jbe@10
|
1075 );
|
jbe@10
|
1076
|
jbe@10
|
1077 CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox)
|
jbe@10
|
1078 RETURNS boolean
|
jbe@73
|
1079 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
jbe@10
|
1080
|
jbe@10
|
1081 CREATE OPERATOR &&+ (
|
jbe@10
|
1082 leftarg = ecircle,
|
jbe@10
|
1083 rightarg = ebox,
|
jbe@10
|
1084 procedure = ebox_ecircle_may_overlap_commutator,
|
jbe@10
|
1085 commutator = &&+,
|
jbe@10
|
1086 restrict = areasel,
|
jbe@10
|
1087 join = areajoinsel
|
jbe@10
|
1088 );
|
jbe@10
|
1089
|
jbe@10
|
1090 CREATE OPERATOR &&+ (
|
jbe@10
|
1091 leftarg = ebox,
|
jbe@10
|
1092 rightarg = ecluster,
|
jbe@10
|
1093 procedure = ebox_ecluster_may_overlap_proc,
|
jbe@10
|
1094 commutator = &&+,
|
jbe@10
|
1095 restrict = areasel,
|
jbe@10
|
1096 join = areajoinsel
|
jbe@10
|
1097 );
|
jbe@10
|
1098
|
jbe@10
|
1099 CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox)
|
jbe@10
|
1100 RETURNS boolean
|
jbe@73
|
1101 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
jbe@10
|
1102
|
jbe@10
|
1103 CREATE OPERATOR &&+ (
|
jbe@10
|
1104 leftarg = ecluster,
|
jbe@10
|
1105 rightarg = ebox,
|
jbe@10
|
1106 procedure = ebox_ecluster_may_overlap_commutator,
|
jbe@10
|
1107 commutator = &&+,
|
jbe@10
|
1108 restrict = areasel,
|
jbe@10
|
1109 join = areajoinsel
|
jbe@10
|
1110 );
|
jbe@10
|
1111
|
jbe@10
|
1112 CREATE OPERATOR &&+ (
|
jbe@10
|
1113 leftarg = ecircle,
|
jbe@10
|
1114 rightarg = ecluster,
|
jbe@10
|
1115 procedure = ecircle_ecluster_may_overlap_proc,
|
jbe@10
|
1116 commutator = &&+,
|
jbe@10
|
1117 restrict = areasel,
|
jbe@10
|
1118 join = areajoinsel
|
jbe@10
|
1119 );
|
jbe@10
|
1120
|
jbe@10
|
1121 CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle)
|
jbe@10
|
1122 RETURNS boolean
|
jbe@73
|
1123 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1';
|
jbe@10
|
1124
|
jbe@10
|
1125 CREATE OPERATOR &&+ (
|
jbe@10
|
1126 leftarg = ecluster,
|
jbe@10
|
1127 rightarg = ecircle,
|
jbe@10
|
1128 procedure = ecircle_ecluster_may_overlap_commutator,
|
jbe@10
|
1129 commutator = &&+,
|
jbe@10
|
1130 restrict = areasel,
|
jbe@10
|
1131 join = areajoinsel
|
jbe@10
|
1132 );
|
jbe@10
|
1133
|
jbe@10
|
1134 CREATE OPERATOR &&+ (
|
jbe@10
|
1135 leftarg = ecluster,
|
jbe@10
|
1136 rightarg = ecluster,
|
jbe@10
|
1137 procedure = ecluster_may_overlap_proc,
|
jbe@10
|
1138 commutator = &&+,
|
jbe@10
|
1139 restrict = areasel,
|
jbe@10
|
1140 join = areajoinsel
|
jbe@10
|
1141 );
|
jbe@10
|
1142
|
jbe@16
|
1143 CREATE OPERATOR @> (
|
jbe@16
|
1144 leftarg = ebox,
|
jbe@16
|
1145 rightarg = epoint,
|
jbe@16
|
1146 procedure = epoint_ebox_overlap_commutator,
|
jbe@16
|
1147 commutator = <@,
|
jbe@16
|
1148 restrict = areasel,
|
jbe@16
|
1149 join = areajoinsel
|
jbe@16
|
1150 );
|
jbe@16
|
1151
|
jbe@16
|
1152 CREATE OPERATOR <@ (
|
jbe@16
|
1153 leftarg = epoint,
|
jbe@16
|
1154 rightarg = ebox,
|
jbe@16
|
1155 procedure = epoint_ebox_overlap_proc,
|
jbe@16
|
1156 commutator = @>,
|
jbe@16
|
1157 restrict = areasel,
|
jbe@16
|
1158 join = areajoinsel
|
jbe@16
|
1159 );
|
jbe@16
|
1160
|
jbe@16
|
1161 CREATE OPERATOR @> (
|
jbe@16
|
1162 leftarg = ecluster,
|
jbe@16
|
1163 rightarg = epoint,
|
jbe@16
|
1164 procedure = epoint_ecluster_overlap_commutator,
|
jbe@16
|
1165 commutator = <@,
|
jbe@16
|
1166 restrict = areasel,
|
jbe@16
|
1167 join = areajoinsel
|
jbe@16
|
1168 );
|
jbe@16
|
1169
|
jbe@16
|
1170 CREATE OPERATOR <@ (
|
jbe@16
|
1171 leftarg = epoint,
|
jbe@16
|
1172 rightarg = ecluster,
|
jbe@16
|
1173 procedure = epoint_ecluster_overlap_proc,
|
jbe@64
|
1174 commutator = @>,
|
jbe@16
|
1175 restrict = areasel,
|
jbe@16
|
1176 join = areajoinsel
|
jbe@16
|
1177 );
|
jbe@16
|
1178
|
jbe@16
|
1179 CREATE OPERATOR @> (
|
jbe@16
|
1180 leftarg = ecluster,
|
jbe@16
|
1181 rightarg = ecluster,
|
jbe@16
|
1182 procedure = ecluster_contains_proc,
|
jbe@16
|
1183 commutator = <@,
|
jbe@16
|
1184 restrict = areasel,
|
jbe@16
|
1185 join = areajoinsel
|
jbe@16
|
1186 );
|
jbe@16
|
1187
|
jbe@16
|
1188 CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster)
|
jbe@16
|
1189 RETURNS boolean
|
jbe@73
|
1190 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1';
|
jbe@16
|
1191
|
jbe@16
|
1192 CREATE OPERATOR <@ (
|
jbe@16
|
1193 leftarg = ecluster,
|
jbe@16
|
1194 rightarg = ecluster,
|
jbe@16
|
1195 procedure = ecluster_contains_commutator,
|
jbe@16
|
1196 commutator = @>,
|
jbe@16
|
1197 restrict = areasel,
|
jbe@16
|
1198 join = areajoinsel
|
jbe@16
|
1199 );
|
jbe@16
|
1200
|
jbe@20
|
1201 CREATE FUNCTION ebox_contains_castwrap(ebox, ebox)
|
jbe@20
|
1202 RETURNS boolean
|
jbe@73
|
1203 LANGUAGE sql IMMUTABLE AS $$
|
jbe@73
|
1204 SELECT
|
jbe@73
|
1205 $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster
|
jbe@73
|
1206 $$;
|
jbe@20
|
1207
|
jbe@20
|
1208 CREATE OPERATOR @> (
|
jbe@20
|
1209 leftarg = ebox,
|
jbe@20
|
1210 rightarg = ebox,
|
jbe@20
|
1211 procedure = ebox_contains_castwrap,
|
jbe@20
|
1212 commutator = <@,
|
jbe@20
|
1213 restrict = areasel,
|
jbe@20
|
1214 join = areajoinsel
|
jbe@20
|
1215 );
|
jbe@20
|
1216
|
jbe@20
|
1217 CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox)
|
jbe@20
|
1218 RETURNS boolean
|
jbe@73
|
1219 LANGUAGE sql IMMUTABLE AS $$
|
jbe@73
|
1220 SELECT
|
jbe@73
|
1221 $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster
|
jbe@73
|
1222 $$;
|
jbe@20
|
1223
|
jbe@20
|
1224 CREATE OPERATOR <@ (
|
jbe@20
|
1225 leftarg = ebox,
|
jbe@20
|
1226 rightarg = ebox,
|
jbe@20
|
1227 procedure = ebox_contains_swapped_castwrap,
|
jbe@20
|
1228 commutator = @>,
|
jbe@20
|
1229 restrict = areasel,
|
jbe@20
|
1230 join = areajoinsel
|
jbe@20
|
1231 );
|
jbe@20
|
1232
|
jbe@16
|
1233 CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster)
|
jbe@16
|
1234 RETURNS boolean
|
jbe@73
|
1235 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1236 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2';
|
jbe@16
|
1237
|
jbe@16
|
1238 CREATE OPERATOR @> (
|
jbe@16
|
1239 leftarg = ebox,
|
jbe@16
|
1240 rightarg = ecluster,
|
jbe@16
|
1241 procedure = ebox_ecluster_contains_castwrap,
|
jbe@16
|
1242 commutator = <@,
|
jbe@16
|
1243 restrict = areasel,
|
jbe@16
|
1244 join = areajoinsel
|
jbe@16
|
1245 );
|
jbe@16
|
1246
|
jbe@16
|
1247 CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox)
|
jbe@16
|
1248 RETURNS boolean
|
jbe@73
|
1249 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1250 AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1';
|
jbe@16
|
1251
|
jbe@16
|
1252 CREATE OPERATOR <@ (
|
jbe@16
|
1253 leftarg = ecluster,
|
jbe@16
|
1254 rightarg = ebox,
|
jbe@16
|
1255 procedure = ebox_ecluster_contains_castwrap,
|
jbe@16
|
1256 commutator = @>,
|
jbe@16
|
1257 restrict = areasel,
|
jbe@16
|
1258 join = areajoinsel
|
jbe@16
|
1259 );
|
jbe@16
|
1260
|
jbe@16
|
1261 CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox)
|
jbe@16
|
1262 RETURNS boolean
|
jbe@73
|
1263 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1264 AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster';
|
jbe@16
|
1265
|
jbe@16
|
1266 CREATE OPERATOR @> (
|
jbe@16
|
1267 leftarg = ecluster,
|
jbe@16
|
1268 rightarg = ebox,
|
jbe@16
|
1269 procedure = ecluster_ebox_contains_castwrap,
|
jbe@16
|
1270 commutator = <@,
|
jbe@16
|
1271 restrict = areasel,
|
jbe@16
|
1272 join = areajoinsel
|
jbe@16
|
1273 );
|
jbe@16
|
1274
|
jbe@16
|
1275 CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster)
|
jbe@16
|
1276 RETURNS boolean
|
jbe@73
|
1277 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1278 AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster';
|
jbe@16
|
1279
|
jbe@16
|
1280 CREATE OPERATOR <@ (
|
jbe@16
|
1281 leftarg = ebox,
|
jbe@16
|
1282 rightarg = ecluster,
|
jbe@16
|
1283 procedure = ecluster_ebox_contains_castwrap,
|
jbe@16
|
1284 commutator = @>,
|
jbe@16
|
1285 restrict = areasel,
|
jbe@16
|
1286 join = areajoinsel
|
jbe@16
|
1287 );
|
jbe@16
|
1288
|
jbe@0
|
1289 CREATE OPERATOR <-> (
|
jbe@0
|
1290 leftarg = epoint,
|
jbe@0
|
1291 rightarg = epoint,
|
jbe@0
|
1292 procedure = epoint_distance_proc,
|
jbe@0
|
1293 commutator = <->
|
jbe@0
|
1294 );
|
jbe@0
|
1295
|
jbe@0
|
1296 CREATE OPERATOR <-> (
|
jbe@0
|
1297 leftarg = epoint,
|
jbe@0
|
1298 rightarg = ecircle,
|
jbe@0
|
1299 procedure = epoint_ecircle_distance_proc,
|
jbe@0
|
1300 commutator = <->
|
jbe@0
|
1301 );
|
jbe@0
|
1302
|
jbe@0
|
1303 CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint)
|
jbe@0
|
1304 RETURNS float8
|
jbe@73
|
1305 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
jbe@0
|
1306
|
jbe@0
|
1307 CREATE OPERATOR <-> (
|
jbe@0
|
1308 leftarg = ecircle,
|
jbe@0
|
1309 rightarg = epoint,
|
jbe@0
|
1310 procedure = epoint_ecircle_distance_commutator,
|
jbe@0
|
1311 commutator = <->
|
jbe@0
|
1312 );
|
jbe@0
|
1313
|
jbe@0
|
1314 CREATE OPERATOR <-> (
|
jbe@0
|
1315 leftarg = epoint,
|
jbe@0
|
1316 rightarg = ecluster,
|
jbe@0
|
1317 procedure = epoint_ecluster_distance_proc,
|
jbe@0
|
1318 commutator = <->
|
jbe@0
|
1319 );
|
jbe@0
|
1320
|
jbe@0
|
1321 CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint)
|
jbe@0
|
1322 RETURNS float8
|
jbe@73
|
1323 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
jbe@0
|
1324
|
jbe@0
|
1325 CREATE OPERATOR <-> (
|
jbe@0
|
1326 leftarg = ecluster,
|
jbe@0
|
1327 rightarg = epoint,
|
jbe@0
|
1328 procedure = epoint_ecluster_distance_commutator,
|
jbe@0
|
1329 commutator = <->
|
jbe@0
|
1330 );
|
jbe@0
|
1331
|
jbe@0
|
1332 CREATE OPERATOR <-> (
|
jbe@0
|
1333 leftarg = ecircle,
|
jbe@0
|
1334 rightarg = ecircle,
|
jbe@0
|
1335 procedure = ecircle_distance_proc,
|
jbe@0
|
1336 commutator = <->
|
jbe@0
|
1337 );
|
jbe@0
|
1338
|
jbe@0
|
1339 CREATE OPERATOR <-> (
|
jbe@0
|
1340 leftarg = ecircle,
|
jbe@0
|
1341 rightarg = ecluster,
|
jbe@0
|
1342 procedure = ecircle_ecluster_distance_proc,
|
jbe@0
|
1343 commutator = <->
|
jbe@0
|
1344 );
|
jbe@0
|
1345
|
jbe@0
|
1346 CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle)
|
jbe@0
|
1347 RETURNS float8
|
jbe@73
|
1348 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1';
|
jbe@0
|
1349
|
jbe@0
|
1350 CREATE OPERATOR <-> (
|
jbe@0
|
1351 leftarg = ecluster,
|
jbe@0
|
1352 rightarg = ecircle,
|
jbe@0
|
1353 procedure = ecircle_ecluster_distance_commutator,
|
jbe@0
|
1354 commutator = <->
|
jbe@0
|
1355 );
|
jbe@0
|
1356
|
jbe@16
|
1357 CREATE OPERATOR <-> (
|
jbe@16
|
1358 leftarg = ecluster,
|
jbe@16
|
1359 rightarg = ecluster,
|
jbe@16
|
1360 procedure = ecluster_distance_proc,
|
jbe@16
|
1361 commutator = <->
|
jbe@16
|
1362 );
|
jbe@16
|
1363
|
jbe@16
|
1364 CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox)
|
jbe@16
|
1365 RETURNS float8
|
jbe@73
|
1366 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1367 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
jbe@16
|
1368
|
jbe@16
|
1369 CREATE OPERATOR <-> (
|
jbe@16
|
1370 leftarg = epoint,
|
jbe@16
|
1371 rightarg = ebox,
|
jbe@16
|
1372 procedure = epoint_ebox_distance_castwrap,
|
jbe@16
|
1373 commutator = <->
|
jbe@16
|
1374 );
|
jbe@16
|
1375
|
jbe@16
|
1376 CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint)
|
jbe@16
|
1377 RETURNS float8
|
jbe@73
|
1378 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1379 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
jbe@16
|
1380
|
jbe@16
|
1381 CREATE OPERATOR <-> (
|
jbe@16
|
1382 leftarg = ebox,
|
jbe@16
|
1383 rightarg = epoint,
|
jbe@16
|
1384 procedure = epoint_ebox_distance_castwrap,
|
jbe@16
|
1385 commutator = <->
|
jbe@16
|
1386 );
|
jbe@16
|
1387
|
jbe@16
|
1388 CREATE FUNCTION ebox_distance_castwrap(ebox, ebox)
|
jbe@16
|
1389 RETURNS float8
|
jbe@73
|
1390 LANGUAGE sql IMMUTABLE AS $$
|
jbe@73
|
1391 SELECT
|
jbe@73
|
1392 $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster
|
jbe@73
|
1393 $$;
|
jbe@16
|
1394
|
jbe@16
|
1395 CREATE OPERATOR <-> (
|
jbe@16
|
1396 leftarg = ebox,
|
jbe@16
|
1397 rightarg = ebox,
|
jbe@16
|
1398 procedure = ebox_distance_castwrap,
|
jbe@16
|
1399 commutator = <->
|
jbe@16
|
1400 );
|
jbe@16
|
1401
|
jbe@16
|
1402 CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle)
|
jbe@16
|
1403 RETURNS float8
|
jbe@73
|
1404 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1405 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
jbe@16
|
1406
|
jbe@16
|
1407 CREATE OPERATOR <-> (
|
jbe@16
|
1408 leftarg = ebox,
|
jbe@16
|
1409 rightarg = ecircle,
|
jbe@16
|
1410 procedure = ebox_ecircle_distance_castwrap,
|
jbe@16
|
1411 commutator = <->
|
jbe@16
|
1412 );
|
jbe@16
|
1413
|
jbe@16
|
1414 CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox)
|
jbe@16
|
1415 RETURNS float8
|
jbe@73
|
1416 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1417 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
jbe@16
|
1418
|
jbe@16
|
1419 CREATE OPERATOR <-> (
|
jbe@16
|
1420 leftarg = ecircle,
|
jbe@16
|
1421 rightarg = ebox,
|
jbe@16
|
1422 procedure = ebox_ecircle_distance_castwrap,
|
jbe@16
|
1423 commutator = <->
|
jbe@16
|
1424 );
|
jbe@16
|
1425
|
jbe@16
|
1426 CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster)
|
jbe@16
|
1427 RETURNS float8
|
jbe@73
|
1428 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1429 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2';
|
jbe@16
|
1430
|
jbe@16
|
1431 CREATE OPERATOR <-> (
|
jbe@16
|
1432 leftarg = ebox,
|
jbe@16
|
1433 rightarg = ecluster,
|
jbe@16
|
1434 procedure = ebox_ecluster_distance_castwrap,
|
jbe@16
|
1435 commutator = <->
|
jbe@16
|
1436 );
|
jbe@16
|
1437
|
jbe@16
|
1438 CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox)
|
jbe@16
|
1439 RETURNS float8
|
jbe@73
|
1440 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1441 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster';
|
jbe@16
|
1442
|
jbe@16
|
1443 CREATE OPERATOR <-> (
|
jbe@16
|
1444 leftarg = ecluster,
|
jbe@16
|
1445 rightarg = ebox,
|
jbe@16
|
1446 procedure = ebox_ecluster_distance_castwrap,
|
jbe@16
|
1447 commutator = <->
|
jbe@16
|
1448 );
|
jbe@16
|
1449
|
jbe@46
|
1450 CREATE OPERATOR <=> (
|
jbe@46
|
1451 leftarg = ecluster,
|
jbe@46
|
1452 rightarg = epoint_with_sample_count,
|
jbe@46
|
1453 procedure = fair_distance_operator_proc
|
jbe@46
|
1454 );
|
jbe@42
|
1455
|
jbe@42
|
1456
|
jbe@0
|
1457 ----------------
|
jbe@0
|
1458 -- GiST index --
|
jbe@0
|
1459 ----------------
|
jbe@0
|
1460
|
jbe@0
|
1461 CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal)
|
jbe@0
|
1462 RETURNS boolean
|
jbe@0
|
1463 LANGUAGE C STRICT
|
jbe@71
|
1464 AS '$libdir/latlon-v0010', 'pgl_gist_consistent';
|
jbe@0
|
1465
|
jbe@0
|
1466 CREATE FUNCTION pgl_gist_union(internal, internal)
|
jbe@0
|
1467 RETURNS internal
|
jbe@0
|
1468 LANGUAGE C STRICT
|
jbe@71
|
1469 AS '$libdir/latlon-v0010', 'pgl_gist_union';
|
jbe@0
|
1470
|
jbe@0
|
1471 CREATE FUNCTION pgl_gist_compress_epoint(internal)
|
jbe@0
|
1472 RETURNS internal
|
jbe@0
|
1473 LANGUAGE C STRICT
|
jbe@71
|
1474 AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint';
|
jbe@0
|
1475
|
jbe@0
|
1476 CREATE FUNCTION pgl_gist_compress_ecircle(internal)
|
jbe@0
|
1477 RETURNS internal
|
jbe@0
|
1478 LANGUAGE C STRICT
|
jbe@71
|
1479 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle';
|
jbe@0
|
1480
|
jbe@0
|
1481 CREATE FUNCTION pgl_gist_compress_ecluster(internal)
|
jbe@0
|
1482 RETURNS internal
|
jbe@0
|
1483 LANGUAGE C STRICT
|
jbe@71
|
1484 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster';
|
jbe@0
|
1485
|
jbe@0
|
1486 CREATE FUNCTION pgl_gist_decompress(internal)
|
jbe@0
|
1487 RETURNS internal
|
jbe@0
|
1488 LANGUAGE C STRICT
|
jbe@71
|
1489 AS '$libdir/latlon-v0010', 'pgl_gist_decompress';
|
jbe@0
|
1490
|
jbe@0
|
1491 CREATE FUNCTION pgl_gist_penalty(internal, internal, internal)
|
jbe@0
|
1492 RETURNS internal
|
jbe@0
|
1493 LANGUAGE C STRICT
|
jbe@71
|
1494 AS '$libdir/latlon-v0010', 'pgl_gist_penalty';
|
jbe@0
|
1495
|
jbe@0
|
1496 CREATE FUNCTION pgl_gist_picksplit(internal, internal)
|
jbe@0
|
1497 RETURNS internal
|
jbe@0
|
1498 LANGUAGE C STRICT
|
jbe@71
|
1499 AS '$libdir/latlon-v0010', 'pgl_gist_picksplit';
|
jbe@0
|
1500
|
jbe@0
|
1501 CREATE FUNCTION pgl_gist_same(internal, internal, internal)
|
jbe@0
|
1502 RETURNS internal
|
jbe@0
|
1503 LANGUAGE C STRICT
|
jbe@71
|
1504 AS '$libdir/latlon-v0010', 'pgl_gist_same';
|
jbe@0
|
1505
|
jbe@0
|
1506 CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid)
|
jbe@0
|
1507 RETURNS internal
|
jbe@0
|
1508 LANGUAGE C STRICT
|
jbe@71
|
1509 AS '$libdir/latlon-v0010', 'pgl_gist_distance';
|
jbe@0
|
1510
|
jbe@0
|
1511 CREATE OPERATOR CLASS epoint_ops
|
jbe@0
|
1512 DEFAULT FOR TYPE epoint USING gist AS
|
jbe@10
|
1513 OPERATOR 11 = ,
|
jbe@10
|
1514 OPERATOR 22 && (epoint, ebox),
|
jbe@16
|
1515 OPERATOR 222 <@ (epoint, ebox),
|
jbe@10
|
1516 OPERATOR 23 && (epoint, ecircle),
|
jbe@10
|
1517 OPERATOR 24 && (epoint, ecluster),
|
jbe@10
|
1518 OPERATOR 124 &&+ (epoint, ecluster),
|
jbe@16
|
1519 OPERATOR 224 <@ (epoint, ecluster),
|
jbe@10
|
1520 OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1521 OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops,
|
jbe@10
|
1522 OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops,
|
jbe@10
|
1523 OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops,
|
jbe@0
|
1524 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1525 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1526 FUNCTION 3 pgl_gist_compress_epoint(internal),
|
jbe@0
|
1527 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1528 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1529 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1530 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1531 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1532 STORAGE ekey_point;
|
jbe@0
|
1533
|
jbe@0
|
1534 CREATE OPERATOR CLASS ecircle_ops
|
jbe@0
|
1535 DEFAULT FOR TYPE ecircle USING gist AS
|
jbe@10
|
1536 OPERATOR 13 = ,
|
jbe@10
|
1537 OPERATOR 21 && (ecircle, epoint),
|
jbe@16
|
1538 OPERATOR 22 && (ecircle, ebox),
|
jbe@10
|
1539 OPERATOR 122 &&+ (ecircle, ebox),
|
jbe@10
|
1540 OPERATOR 23 && (ecircle, ecircle),
|
jbe@10
|
1541 OPERATOR 24 && (ecircle, ecluster),
|
jbe@10
|
1542 OPERATOR 124 &&+ (ecircle, ecluster),
|
jbe@10
|
1543 OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1544 OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops,
|
jbe@10
|
1545 OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops,
|
jbe@10
|
1546 OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops,
|
jbe@0
|
1547 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1548 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1549 FUNCTION 3 pgl_gist_compress_ecircle(internal),
|
jbe@0
|
1550 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1551 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1552 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1553 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1554 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1555 STORAGE ekey_area;
|
jbe@0
|
1556
|
jbe@0
|
1557 CREATE OPERATOR CLASS ecluster_ops
|
jbe@0
|
1558 DEFAULT FOR TYPE ecluster USING gist AS
|
jbe@10
|
1559 OPERATOR 21 && (ecluster, epoint),
|
jbe@10
|
1560 OPERATOR 121 &&+ (ecluster, epoint),
|
jbe@16
|
1561 OPERATOR 221 @> (ecluster, epoint),
|
jbe@16
|
1562 OPERATOR 22 && (ecluster, ebox),
|
jbe@10
|
1563 OPERATOR 122 &&+ (ecluster, ebox),
|
jbe@16
|
1564 OPERATOR 222 @> (ecluster, ebox),
|
jbe@16
|
1565 OPERATOR 322 <@ (ecluster, ebox),
|
jbe@10
|
1566 OPERATOR 23 && (ecluster, ecircle),
|
jbe@10
|
1567 OPERATOR 123 &&+ (ecluster, ecircle),
|
jbe@16
|
1568 OPERATOR 24 && (ecluster, ecluster),
|
jbe@10
|
1569 OPERATOR 124 &&+ (ecluster, ecluster),
|
jbe@16
|
1570 OPERATOR 224 @> (ecluster, ecluster),
|
jbe@16
|
1571 OPERATOR 324 <@ (ecluster, ecluster),
|
jbe@16
|
1572 OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops,
|
jbe@16
|
1573 OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops,
|
jbe@16
|
1574 OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops,
|
jbe@16
|
1575 OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops,
|
jbe@46
|
1576 OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops,
|
jbe@0
|
1577 FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal),
|
jbe@0
|
1578 FUNCTION 2 pgl_gist_union(internal, internal),
|
jbe@0
|
1579 FUNCTION 3 pgl_gist_compress_ecluster(internal),
|
jbe@0
|
1580 FUNCTION 4 pgl_gist_decompress(internal),
|
jbe@0
|
1581 FUNCTION 5 pgl_gist_penalty(internal, internal, internal),
|
jbe@0
|
1582 FUNCTION 6 pgl_gist_picksplit(internal, internal),
|
jbe@0
|
1583 FUNCTION 7 pgl_gist_same(internal, internal, internal),
|
jbe@0
|
1584 FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid),
|
jbe@0
|
1585 STORAGE ekey_area;
|
jbe@0
|
1586
|
jbe@0
|
1587
|
jbe@0
|
1588 ---------------------
|
jbe@0
|
1589 -- alias functions --
|
jbe@0
|
1590 ---------------------
|
jbe@0
|
1591
|
jbe@0
|
1592 CREATE FUNCTION distance(epoint, epoint)
|
jbe@0
|
1593 RETURNS float8
|
jbe@73
|
1594 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2';
|
jbe@0
|
1595
|
jbe@0
|
1596 CREATE FUNCTION distance(ecluster, epoint)
|
jbe@0
|
1597 RETURNS float8
|
jbe@73
|
1598 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2';
|
jbe@0
|
1599
|
jbe@0
|
1600 CREATE FUNCTION distance_within(epoint, epoint, float8)
|
jbe@0
|
1601 RETURNS boolean
|
jbe@73
|
1602 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1603 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)';
|
jbe@0
|
1604
|
jbe@0
|
1605 CREATE FUNCTION distance_within(ecluster, epoint, float8)
|
jbe@0
|
1606 RETURNS boolean
|
jbe@73
|
1607 LANGUAGE sql IMMUTABLE
|
jbe@73
|
1608 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)';
|
jbe@0
|
1609
|
jbe@46
|
1610 CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000)
|
jbe@46
|
1611 RETURNS float8
|
jbe@73
|
1612 LANGUAGE sql IMMUTABLE AS $$
|
jbe@73
|
1613 SELECT
|
jbe@73
|
1614 $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3)
|
jbe@73
|
1615 $$;
|
jbe@46
|
1616
|
jbe@0
|
1617
|
jbe@0
|
1618 --------------------------------
|
jbe@0
|
1619 -- other data storage formats --
|
jbe@0
|
1620 --------------------------------
|
jbe@0
|
1621
|
jbe@39
|
1622 CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint')
|
jbe@0
|
1623 RETURNS epoint
|
jbe@0
|
1624 LANGUAGE plpgsql IMMUTABLE STRICT AS $$
|
jbe@0
|
1625 DECLARE
|
jbe@73
|
1626 "result" @extschema@.epoint;
|
jbe@0
|
1627 BEGIN
|
jbe@73
|
1628 IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN
|
jbe@0
|
1629 -- avoid dynamic command execution for better performance
|
jbe@73
|
1630 RETURN @extschema@.epoint($2, $1);
|
jbe@0
|
1631 END IF;
|
jbe@73
|
1632 IF
|
jbe@73
|
1633 $3 OPERATOR(pg_catalog.=) 'epoint' OR
|
jbe@73
|
1634 $3 OPERATOR(pg_catalog.=) 'epoint_latlon'
|
jbe@73
|
1635 THEN
|
jbe@0
|
1636 -- avoid dynamic command execution for better performance
|
jbe@73
|
1637 RETURN @extschema@.epoint($1, $2);
|
jbe@0
|
1638 END IF;
|
jbe@73
|
1639 EXECUTE
|
jbe@73
|
1640 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2;
|
jbe@0
|
1641 RETURN "result";
|
jbe@0
|
1642 END;
|
jbe@0
|
1643 $$;
|
jbe@0
|
1644
|
jbe@39
|
1645 CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat')
|
jbe@39
|
1646 RETURNS SETOF jsonb
|
jbe@39
|
1647 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@39
|
1648 SELECT "result" FROM
|
jbe@73
|
1649 ( SELECT pg_catalog.jsonb_array_length($1) - 1 )
|
jbe@73
|
1650 AS "lastindex_row" ("lastindex")
|
jbe@73
|
1651 CROSS JOIN LATERAL pg_catalog.jsonb_array_elements(
|
jbe@39
|
1652 CASE WHEN
|
jbe@73
|
1653 @extschema@.coords_to_epoint(
|
jbe@73
|
1654 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0)
|
jbe@73
|
1655 ::pg_catalog.float8,
|
jbe@73
|
1656 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1)
|
jbe@73
|
1657 ::pg_catalog.float8,
|
jbe@39
|
1658 $2
|
jbe@73
|
1659 ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint(
|
jbe@73
|
1660 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0)
|
jbe@73
|
1661 ::pg_catalog.float8,
|
jbe@73
|
1662 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1)
|
jbe@73
|
1663 ::pg_catalog.float8,
|
jbe@39
|
1664 $2
|
jbe@39
|
1665 )
|
jbe@39
|
1666 THEN
|
jbe@39
|
1667 $1 - "lastindex"
|
jbe@39
|
1668 ELSE
|
jbe@39
|
1669 $1
|
jbe@39
|
1670 END
|
jbe@39
|
1671 ) AS "result_row" ("result")
|
jbe@39
|
1672 $$;
|
jbe@39
|
1673
|
jbe@0
|
1674 CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat')
|
jbe@0
|
1675 RETURNS epoint
|
jbe@0
|
1676 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@0
|
1677 SELECT CASE
|
jbe@73
|
1678 WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN
|
jbe@73
|
1679 @extschema@.coords_to_epoint(
|
jbe@73
|
1680 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0)
|
jbe@73
|
1681 ::pg_catalog.float8,
|
jbe@73
|
1682 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1)
|
jbe@73
|
1683 ::pg_catalog.float8,
|
jbe@0
|
1684 $2
|
jbe@0
|
1685 )
|
jbe@0
|
1686 WHEN $1->>'type' = 'Feature' THEN
|
jbe@73
|
1687 @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2)
|
jbe@0
|
1688 ELSE
|
jbe@0
|
1689 NULL
|
jbe@0
|
1690 END
|
jbe@0
|
1691 $$;
|
jbe@0
|
1692
|
jbe@0
|
1693 CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat')
|
jbe@0
|
1694 RETURNS ecluster
|
jbe@0
|
1695 LANGUAGE sql IMMUTABLE STRICT AS $$
|
jbe@73
|
1696 SELECT CASE $1 OPERATOR(pg_catalog.->>) 'type'
|
jbe@0
|
1697 WHEN 'Point' THEN
|
jbe@73
|
1698 @extschema@.coords_to_epoint(
|
jbe@73
|
1699 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0)
|
jbe@73
|
1700 ::pg_catalog.float8,
|
jbe@73
|
1701 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1)
|
jbe@73
|
1702 ::pg_catalog.float8,
|
jbe@0
|
1703 $2
|
jbe@73
|
1704 )::@extschema@.ecluster
|
jbe@0
|
1705 WHEN 'MultiPoint' THEN
|
jbe@73
|
1706 ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg(
|
jbe@73
|
1707 @extschema@.coords_to_epoint(
|
jbe@73
|
1708 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
jbe@73
|
1709 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
jbe@0
|
1710 $2
|
jbe@0
|
1711 )
|
jbe@0
|
1712 ))
|
jbe@73
|
1713 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1714 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
jbe@73
|
1715 ) AS "coord"
|
jbe@0
|
1716 )
|
jbe@0
|
1717 WHEN 'LineString' THEN
|
jbe@73
|
1718 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg(
|
jbe@73
|
1719 @extschema@.coords_to_epoint(
|
jbe@73
|
1720 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
jbe@73
|
1721 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
jbe@0
|
1722 $2
|
jbe@0
|
1723 )
|
jbe@0
|
1724 ))
|
jbe@73
|
1725 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1726 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
jbe@73
|
1727 ) AS "coord"
|
jbe@0
|
1728 )
|
jbe@0
|
1729 WHEN 'MultiLineString' THEN
|
jbe@73
|
1730 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1731 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg(
|
jbe@0
|
1732 coords_to_epoint(
|
jbe@73
|
1733 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
jbe@73
|
1734 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
jbe@0
|
1735 $2
|
jbe@0
|
1736 )
|
jbe@0
|
1737 ))
|
jbe@73
|
1738 FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord"
|
jbe@0
|
1739 )
|
jbe@0
|
1740 ))
|
jbe@73
|
1741 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1742 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
jbe@73
|
1743 ) AS "coord_array"
|
jbe@0
|
1744 )
|
jbe@0
|
1745 WHEN 'Polygon' THEN
|
jbe@73
|
1746 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1747 ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg(
|
jbe@73
|
1748 @extschema@.coords_to_epoint(
|
jbe@73
|
1749 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
jbe@73
|
1750 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
jbe@0
|
1751 $2
|
jbe@0
|
1752 )
|
jbe@0
|
1753 ))
|
jbe@73
|
1754 FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2)
|
jbe@73
|
1755 AS "coord"
|
jbe@0
|
1756 )
|
jbe@0
|
1757 ))
|
jbe@73
|
1758 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1759 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
jbe@73
|
1760 ) AS "coord_array"
|
jbe@0
|
1761 )
|
jbe@0
|
1762 WHEN 'MultiPolygon' THEN
|
jbe@73
|
1763 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1764 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1765 ( SELECT pg_catalog.ecluster_create_polygon(pg_catalog.array_agg(
|
jbe@73
|
1766 @extschema@.coords_to_epoint(
|
jbe@73
|
1767 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8,
|
jbe@73
|
1768 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8,
|
jbe@0
|
1769 $2
|
jbe@0
|
1770 )
|
jbe@0
|
1771 ))
|
jbe@73
|
1772 FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2)
|
jbe@73
|
1773 AS "coord"
|
jbe@0
|
1774 )
|
jbe@0
|
1775 ))
|
jbe@73
|
1776 FROM pg_catalog.jsonb_array_elements("coord_array_array")
|
jbe@73
|
1777 AS "coord_array"
|
jbe@0
|
1778 )
|
jbe@0
|
1779 ))
|
jbe@73
|
1780 FROM jsonb_array_elements(
|
jbe@73
|
1781 $1 OPERATOR(pg_catalog.->) 'coordinates'
|
jbe@73
|
1782 ) AS "coord_array_array"
|
jbe@0
|
1783 )
|
jbe@39
|
1784 WHEN 'GeometryCollection' THEN
|
jbe@73
|
1785 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1786 @extschema@.GeoJSON_to_ecluster("geometry", $2)
|
jbe@39
|
1787 ))
|
jbe@73
|
1788 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1789 $1 OPERATOR(pg_catalog.->) 'geometries'
|
jbe@73
|
1790 ) AS "geometry"
|
jbe@39
|
1791 )
|
jbe@0
|
1792 WHEN 'Feature' THEN
|
jbe@73
|
1793 @extschema@.GeoJSON_to_ecluster(
|
jbe@73
|
1794 $1 OPERATOR(pg_catalog.->) 'geometry', $2
|
jbe@73
|
1795 )
|
jbe@0
|
1796 WHEN 'FeatureCollection' THEN
|
jbe@73
|
1797 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg(
|
jbe@73
|
1798 @extschema@.GeoJSON_to_ecluster("feature", $2)
|
jbe@0
|
1799 ))
|
jbe@73
|
1800 FROM pg_catalog.jsonb_array_elements(
|
jbe@73
|
1801 $1 OPERATOR(pg_catalog.->) 'features'
|
jbe@73
|
1802 ) AS "feature"
|
jbe@0
|
1803 )
|
jbe@0
|
1804 ELSE
|
jbe@0
|
1805 NULL
|
jbe@0
|
1806 END
|
jbe@0
|
1807 $$;
|
jbe@0
|
1808
|