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