pgLatLon
changeset 51:133626ff7cb2 v0.11
Include system's limits.h to avoid compiler error with PostgreSQL version 10.0
author | jbe |
---|---|
date | Thu Nov 09 23:28:32 2017 +0100 (2017-11-09) |
parents | 232da3c28d83 |
children | 7aa3078dc686 537df4c9de92 |
files | GNUmakefile README.html README.mkd latlon--0.10--0.11.sql latlon--0.10.sql latlon--0.11.sql latlon--0.9--0.10.sql latlon-v0009.c latlon.control |
line diff
1.1 --- a/GNUmakefile Thu Sep 28 02:17:53 2017 +0200 1.2 +++ b/GNUmakefile Thu Nov 09 23:28:32 2017 +0100 1.3 @@ -1,5 +1,5 @@ 1.4 EXTENSION = latlon 1.5 -DATA = latlon--0.9--0.10.sql latlon--0.10.sql 1.6 +DATA = latlon--0.10--0.11.sql latlon--0.11.sql 1.7 MODULES = latlon-v0009 1.8 1.9 PG_CONFIG = pg_config
2.1 --- a/README.html Thu Sep 28 02:17:53 2017 +0200 2.2 +++ b/README.html Thu Nov 09 23:28:32 2017 +0100 2.3 @@ -1,5 +1,5 @@ 2.4 -<html><head><title>pgLatLon v0.10 documentation</title></head><body> 2.5 -<h1>pgLatLon v0.10 documentation</h1> 2.6 +<html><head><title>pgLatLon v0.11 documentation</title></head><body> 2.7 +<h1>pgLatLon v0.11 documentation</h1> 2.8 2.9 <p>pgLatLon is a spatial database extension for the PostgreSQL object-relational 2.10 database management system providing geographic data types and spatial indexing
3.1 --- a/README.mkd Thu Sep 28 02:17:53 2017 +0200 3.2 +++ b/README.mkd Thu Nov 09 23:28:32 2017 +0100 3.3 @@ -1,4 +1,4 @@ 3.4 -pgLatLon v0.10 documentation 3.5 +pgLatLon v0.11 documentation 3.6 =========================== 3.7 3.8 pgLatLon is a spatial database extension for the PostgreSQL object-relational
5.1 --- a/latlon--0.10.sql Thu Sep 28 02:17:53 2017 +0200 5.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 5.3 @@ -1,1717 +0,0 @@ 5.4 - 5.5 ----------------------------------------- 5.6 --- forward declarations (shell types) -- 5.7 ----------------------------------------- 5.8 - 5.9 -CREATE TYPE ekey_point; 5.10 -CREATE TYPE ekey_area; 5.11 -CREATE TYPE epoint; 5.12 -CREATE TYPE epoint_with_sample_count; 5.13 -CREATE TYPE ebox; 5.14 -CREATE TYPE ecircle; 5.15 -CREATE TYPE ecluster; 5.16 - 5.17 - 5.18 ------------------------------------------------------------- 5.19 --- dummy input/output functions for dummy index key types -- 5.20 ------------------------------------------------------------- 5.21 - 5.22 -CREATE FUNCTION ekey_point_in_dummy(cstring) 5.23 - RETURNS ekey_point 5.24 - LANGUAGE C IMMUTABLE STRICT 5.25 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 5.26 - 5.27 -CREATE FUNCTION ekey_point_out_dummy(ekey_point) 5.28 - RETURNS cstring 5.29 - LANGUAGE C IMMUTABLE STRICT 5.30 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 5.31 - 5.32 -CREATE FUNCTION ekey_area_in_dummy(cstring) 5.33 - RETURNS ekey_area 5.34 - LANGUAGE C IMMUTABLE STRICT 5.35 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 5.36 - 5.37 -CREATE FUNCTION ekey_area_out_dummy(ekey_area) 5.38 - RETURNS cstring 5.39 - LANGUAGE C IMMUTABLE STRICT 5.40 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 5.41 - 5.42 - 5.43 --------------------------- 5.44 --- text input functions -- 5.45 --------------------------- 5.46 - 5.47 -CREATE FUNCTION epoint_in(cstring) 5.48 - RETURNS epoint 5.49 - LANGUAGE C IMMUTABLE STRICT 5.50 - AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 5.51 - 5.52 -CREATE FUNCTION epoint_with_sample_count_in(cstring) 5.53 - RETURNS epoint_with_sample_count 5.54 - LANGUAGE C IMMUTABLE STRICT 5.55 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 5.56 - 5.57 -CREATE FUNCTION ebox_in(cstring) 5.58 - RETURNS ebox 5.59 - LANGUAGE C IMMUTABLE STRICT 5.60 - AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 5.61 - 5.62 -CREATE FUNCTION ecircle_in(cstring) 5.63 - RETURNS ecircle 5.64 - LANGUAGE C IMMUTABLE STRICT 5.65 - AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 5.66 - 5.67 -CREATE FUNCTION ecluster_in(cstring) 5.68 - RETURNS ecluster 5.69 - LANGUAGE C IMMUTABLE STRICT 5.70 - AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 5.71 - 5.72 - 5.73 ---------------------------- 5.74 --- text output functions -- 5.75 ---------------------------- 5.76 - 5.77 -CREATE FUNCTION epoint_out(epoint) 5.78 - RETURNS cstring 5.79 - LANGUAGE C IMMUTABLE STRICT 5.80 - AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 5.81 - 5.82 -CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 5.83 - RETURNS cstring 5.84 - LANGUAGE C IMMUTABLE STRICT 5.85 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 5.86 - 5.87 -CREATE FUNCTION ebox_out(ebox) 5.88 - RETURNS cstring 5.89 - LANGUAGE C IMMUTABLE STRICT 5.90 - AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 5.91 - 5.92 -CREATE FUNCTION ecircle_out(ecircle) 5.93 - RETURNS cstring 5.94 - LANGUAGE C IMMUTABLE STRICT 5.95 - AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 5.96 - 5.97 -CREATE FUNCTION ecluster_out(ecluster) 5.98 - RETURNS cstring 5.99 - LANGUAGE C IMMUTABLE STRICT 5.100 - AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 5.101 - 5.102 - 5.103 --------------------------- 5.104 --- binary I/O functions -- 5.105 --------------------------- 5.106 - 5.107 -CREATE FUNCTION epoint_recv(internal) 5.108 - RETURNS epoint 5.109 - LANGUAGE C IMMUTABLE STRICT 5.110 - AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 5.111 - 5.112 -CREATE FUNCTION ebox_recv(internal) 5.113 - RETURNS ebox 5.114 - LANGUAGE C IMMUTABLE STRICT 5.115 - AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 5.116 - 5.117 -CREATE FUNCTION ecircle_recv(internal) 5.118 - RETURNS ecircle 5.119 - LANGUAGE C IMMUTABLE STRICT 5.120 - AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 5.121 - 5.122 -CREATE FUNCTION epoint_send(epoint) 5.123 - RETURNS bytea 5.124 - LANGUAGE C IMMUTABLE STRICT 5.125 - AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 5.126 - 5.127 -CREATE FUNCTION ebox_send(ebox) 5.128 - RETURNS bytea 5.129 - LANGUAGE C IMMUTABLE STRICT 5.130 - AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 5.131 - 5.132 -CREATE FUNCTION ecircle_send(ecircle) 5.133 - RETURNS bytea 5.134 - LANGUAGE C IMMUTABLE STRICT 5.135 - AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 5.136 - 5.137 - 5.138 ------------------------------------------------ 5.139 --- type definitions of dummy index key types -- 5.140 ------------------------------------------------ 5.141 - 5.142 -CREATE TYPE ekey_point ( 5.143 - internallength = 8, 5.144 - input = ekey_point_in_dummy, 5.145 - output = ekey_point_out_dummy, 5.146 - alignment = char ); 5.147 - 5.148 -CREATE TYPE ekey_area ( 5.149 - internallength = 9, 5.150 - input = ekey_area_in_dummy, 5.151 - output = ekey_area_out_dummy, 5.152 - alignment = char ); 5.153 - 5.154 - 5.155 ------------------------------------------- 5.156 --- definitions of geographic data types -- 5.157 ------------------------------------------- 5.158 - 5.159 -CREATE TYPE epoint ( 5.160 - internallength = 16, 5.161 - input = epoint_in, 5.162 - output = epoint_out, 5.163 - receive = epoint_recv, 5.164 - send = epoint_send, 5.165 - alignment = double ); 5.166 - 5.167 -CREATE TYPE epoint_with_sample_count ( 5.168 - internallength = 20, 5.169 - input = epoint_with_sample_count_in, 5.170 - output = epoint_with_sample_count_out, 5.171 - alignment = double ); 5.172 - 5.173 -CREATE TYPE ebox ( 5.174 - internallength = 32, 5.175 - input = ebox_in, 5.176 - output = ebox_out, 5.177 - receive = ebox_recv, 5.178 - send = ebox_send, 5.179 - alignment = double ); 5.180 - 5.181 -CREATE TYPE ecircle ( 5.182 - internallength = 24, 5.183 - input = ecircle_in, 5.184 - output = ecircle_out, 5.185 - receive = ecircle_recv, 5.186 - send = ecircle_send, 5.187 - alignment = double ); 5.188 - 5.189 -CREATE TYPE ecluster ( 5.190 - internallength = VARIABLE, 5.191 - input = ecluster_in, 5.192 - output = ecluster_out, 5.193 - alignment = double, 5.194 - storage = external ); 5.195 - 5.196 - 5.197 --------------------- 5.198 --- B-tree support -- 5.199 --------------------- 5.200 - 5.201 --- begin of B-tree support for epoint 5.202 - 5.203 -CREATE FUNCTION epoint_btree_lt(epoint, epoint) 5.204 - RETURNS boolean 5.205 - LANGUAGE C IMMUTABLE STRICT 5.206 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 5.207 - 5.208 -CREATE FUNCTION epoint_btree_le(epoint, epoint) 5.209 - RETURNS boolean 5.210 - LANGUAGE C IMMUTABLE STRICT 5.211 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 5.212 - 5.213 -CREATE FUNCTION epoint_btree_eq(epoint, epoint) 5.214 - RETURNS boolean 5.215 - LANGUAGE C IMMUTABLE STRICT 5.216 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 5.217 - 5.218 -CREATE FUNCTION epoint_btree_ne(epoint, epoint) 5.219 - RETURNS boolean 5.220 - LANGUAGE C IMMUTABLE STRICT 5.221 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 5.222 - 5.223 -CREATE FUNCTION epoint_btree_ge(epoint, epoint) 5.224 - RETURNS boolean 5.225 - LANGUAGE C IMMUTABLE STRICT 5.226 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 5.227 - 5.228 -CREATE FUNCTION epoint_btree_gt(epoint, epoint) 5.229 - RETURNS boolean 5.230 - LANGUAGE C IMMUTABLE STRICT 5.231 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 5.232 - 5.233 -CREATE OPERATOR <<< ( 5.234 - leftarg = epoint, 5.235 - rightarg = epoint, 5.236 - procedure = epoint_btree_lt, 5.237 - commutator = >>>, 5.238 - negator = >>>=, 5.239 - restrict = scalarltsel, 5.240 - join = scalarltjoinsel 5.241 -); 5.242 - 5.243 -CREATE OPERATOR <<<= ( 5.244 - leftarg = epoint, 5.245 - rightarg = epoint, 5.246 - procedure = epoint_btree_le, 5.247 - commutator = >>>=, 5.248 - negator = >>>, 5.249 - restrict = scalarltsel, 5.250 - join = scalarltjoinsel 5.251 -); 5.252 - 5.253 -CREATE OPERATOR = ( 5.254 - leftarg = epoint, 5.255 - rightarg = epoint, 5.256 - procedure = epoint_btree_eq, 5.257 - commutator = =, 5.258 - negator = <>, 5.259 - restrict = eqsel, 5.260 - join = eqjoinsel, 5.261 - merges 5.262 -); 5.263 - 5.264 -CREATE OPERATOR <> ( 5.265 - leftarg = epoint, 5.266 - rightarg = epoint, 5.267 - procedure = epoint_btree_eq, 5.268 - commutator = <>, 5.269 - negator = =, 5.270 - restrict = neqsel, 5.271 - join = neqjoinsel 5.272 -); 5.273 - 5.274 -CREATE OPERATOR >>>= ( 5.275 - leftarg = epoint, 5.276 - rightarg = epoint, 5.277 - procedure = epoint_btree_ge, 5.278 - commutator = <<<=, 5.279 - negator = <<<, 5.280 - restrict = scalargtsel, 5.281 - join = scalargtjoinsel 5.282 -); 5.283 - 5.284 -CREATE OPERATOR >>> ( 5.285 - leftarg = epoint, 5.286 - rightarg = epoint, 5.287 - procedure = epoint_btree_gt, 5.288 - commutator = <<<, 5.289 - negator = <<<=, 5.290 - restrict = scalargtsel, 5.291 - join = scalargtjoinsel 5.292 -); 5.293 - 5.294 -CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 5.295 - RETURNS int4 5.296 - LANGUAGE C IMMUTABLE STRICT 5.297 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 5.298 - 5.299 -CREATE OPERATOR CLASS epoint_btree_ops 5.300 - DEFAULT FOR TYPE epoint USING btree AS 5.301 - OPERATOR 1 <<< , 5.302 - OPERATOR 2 <<<= , 5.303 - OPERATOR 3 = , 5.304 - OPERATOR 4 >>>= , 5.305 - OPERATOR 5 >>> , 5.306 - FUNCTION 1 epoint_btree_cmp(epoint, epoint); 5.307 - 5.308 --- end of B-tree support for epoint 5.309 - 5.310 --- begin of B-tree support for ebox 5.311 - 5.312 -CREATE FUNCTION ebox_btree_lt(ebox, ebox) 5.313 - RETURNS boolean 5.314 - LANGUAGE C IMMUTABLE STRICT 5.315 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 5.316 - 5.317 -CREATE FUNCTION ebox_btree_le(ebox, ebox) 5.318 - RETURNS boolean 5.319 - LANGUAGE C IMMUTABLE STRICT 5.320 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 5.321 - 5.322 -CREATE FUNCTION ebox_btree_eq(ebox, ebox) 5.323 - RETURNS boolean 5.324 - LANGUAGE C IMMUTABLE STRICT 5.325 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 5.326 - 5.327 -CREATE FUNCTION ebox_btree_ne(ebox, ebox) 5.328 - RETURNS boolean 5.329 - LANGUAGE C IMMUTABLE STRICT 5.330 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 5.331 - 5.332 -CREATE FUNCTION ebox_btree_ge(ebox, ebox) 5.333 - RETURNS boolean 5.334 - LANGUAGE C IMMUTABLE STRICT 5.335 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 5.336 - 5.337 -CREATE FUNCTION ebox_btree_gt(ebox, ebox) 5.338 - RETURNS boolean 5.339 - LANGUAGE C IMMUTABLE STRICT 5.340 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 5.341 - 5.342 -CREATE OPERATOR <<< ( 5.343 - leftarg = ebox, 5.344 - rightarg = ebox, 5.345 - procedure = ebox_btree_lt, 5.346 - commutator = >>>, 5.347 - negator = >>>=, 5.348 - restrict = scalarltsel, 5.349 - join = scalarltjoinsel 5.350 -); 5.351 - 5.352 -CREATE OPERATOR <<<= ( 5.353 - leftarg = ebox, 5.354 - rightarg = ebox, 5.355 - procedure = ebox_btree_le, 5.356 - commutator = >>>=, 5.357 - negator = >>>, 5.358 - restrict = scalarltsel, 5.359 - join = scalarltjoinsel 5.360 -); 5.361 - 5.362 -CREATE OPERATOR = ( 5.363 - leftarg = ebox, 5.364 - rightarg = ebox, 5.365 - procedure = ebox_btree_eq, 5.366 - commutator = =, 5.367 - negator = <>, 5.368 - restrict = eqsel, 5.369 - join = eqjoinsel, 5.370 - merges 5.371 -); 5.372 - 5.373 -CREATE OPERATOR <> ( 5.374 - leftarg = ebox, 5.375 - rightarg = ebox, 5.376 - procedure = ebox_btree_eq, 5.377 - commutator = <>, 5.378 - negator = =, 5.379 - restrict = neqsel, 5.380 - join = neqjoinsel 5.381 -); 5.382 - 5.383 -CREATE OPERATOR >>>= ( 5.384 - leftarg = ebox, 5.385 - rightarg = ebox, 5.386 - procedure = ebox_btree_ge, 5.387 - commutator = <<<=, 5.388 - negator = <<<, 5.389 - restrict = scalargtsel, 5.390 - join = scalargtjoinsel 5.391 -); 5.392 - 5.393 -CREATE OPERATOR >>> ( 5.394 - leftarg = ebox, 5.395 - rightarg = ebox, 5.396 - procedure = ebox_btree_gt, 5.397 - commutator = <<<, 5.398 - negator = <<<=, 5.399 - restrict = scalargtsel, 5.400 - join = scalargtjoinsel 5.401 -); 5.402 - 5.403 -CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 5.404 - RETURNS int4 5.405 - LANGUAGE C IMMUTABLE STRICT 5.406 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 5.407 - 5.408 -CREATE OPERATOR CLASS ebox_btree_ops 5.409 - DEFAULT FOR TYPE ebox USING btree AS 5.410 - OPERATOR 1 <<< , 5.411 - OPERATOR 2 <<<= , 5.412 - OPERATOR 3 = , 5.413 - OPERATOR 4 >>>= , 5.414 - OPERATOR 5 >>> , 5.415 - FUNCTION 1 ebox_btree_cmp(ebox, ebox); 5.416 - 5.417 --- end of B-tree support for ebox 5.418 - 5.419 --- begin of B-tree support for ecircle 5.420 - 5.421 -CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 5.422 - RETURNS boolean 5.423 - LANGUAGE C IMMUTABLE STRICT 5.424 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 5.425 - 5.426 -CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 5.427 - RETURNS boolean 5.428 - LANGUAGE C IMMUTABLE STRICT 5.429 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 5.430 - 5.431 -CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 5.432 - RETURNS boolean 5.433 - LANGUAGE C IMMUTABLE STRICT 5.434 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 5.435 - 5.436 -CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 5.437 - RETURNS boolean 5.438 - LANGUAGE C IMMUTABLE STRICT 5.439 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 5.440 - 5.441 -CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 5.442 - RETURNS boolean 5.443 - LANGUAGE C IMMUTABLE STRICT 5.444 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 5.445 - 5.446 -CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 5.447 - RETURNS boolean 5.448 - LANGUAGE C IMMUTABLE STRICT 5.449 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 5.450 - 5.451 -CREATE OPERATOR <<< ( 5.452 - leftarg = ecircle, 5.453 - rightarg = ecircle, 5.454 - procedure = ecircle_btree_lt, 5.455 - commutator = >>>, 5.456 - negator = >>>=, 5.457 - restrict = scalarltsel, 5.458 - join = scalarltjoinsel 5.459 -); 5.460 - 5.461 -CREATE OPERATOR <<<= ( 5.462 - leftarg = ecircle, 5.463 - rightarg = ecircle, 5.464 - procedure = ecircle_btree_le, 5.465 - commutator = >>>=, 5.466 - negator = >>>, 5.467 - restrict = scalarltsel, 5.468 - join = scalarltjoinsel 5.469 -); 5.470 - 5.471 -CREATE OPERATOR = ( 5.472 - leftarg = ecircle, 5.473 - rightarg = ecircle, 5.474 - procedure = ecircle_btree_eq, 5.475 - commutator = =, 5.476 - negator = <>, 5.477 - restrict = eqsel, 5.478 - join = eqjoinsel, 5.479 - merges 5.480 -); 5.481 - 5.482 -CREATE OPERATOR <> ( 5.483 - leftarg = ecircle, 5.484 - rightarg = ecircle, 5.485 - procedure = ecircle_btree_eq, 5.486 - commutator = <>, 5.487 - negator = =, 5.488 - restrict = neqsel, 5.489 - join = neqjoinsel 5.490 -); 5.491 - 5.492 -CREATE OPERATOR >>>= ( 5.493 - leftarg = ecircle, 5.494 - rightarg = ecircle, 5.495 - procedure = ecircle_btree_ge, 5.496 - commutator = <<<=, 5.497 - negator = <<<, 5.498 - restrict = scalargtsel, 5.499 - join = scalargtjoinsel 5.500 -); 5.501 - 5.502 -CREATE OPERATOR >>> ( 5.503 - leftarg = ecircle, 5.504 - rightarg = ecircle, 5.505 - procedure = ecircle_btree_gt, 5.506 - commutator = <<<, 5.507 - negator = <<<=, 5.508 - restrict = scalargtsel, 5.509 - join = scalargtjoinsel 5.510 -); 5.511 - 5.512 -CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 5.513 - RETURNS int4 5.514 - LANGUAGE C IMMUTABLE STRICT 5.515 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 5.516 - 5.517 -CREATE OPERATOR CLASS ecircle_btree_ops 5.518 - DEFAULT FOR TYPE ecircle USING btree AS 5.519 - OPERATOR 1 <<< , 5.520 - OPERATOR 2 <<<= , 5.521 - OPERATOR 3 = , 5.522 - OPERATOR 4 >>>= , 5.523 - OPERATOR 5 >>> , 5.524 - FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 5.525 - 5.526 --- end of B-tree support for ecircle 5.527 - 5.528 - 5.529 ----------------- 5.530 --- type casts -- 5.531 ----------------- 5.532 - 5.533 -CREATE FUNCTION cast_epoint_to_ebox(epoint) 5.534 - RETURNS ebox 5.535 - LANGUAGE C IMMUTABLE STRICT 5.536 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 5.537 - 5.538 -CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 5.539 - 5.540 -CREATE FUNCTION cast_epoint_to_ecircle(epoint) 5.541 - RETURNS ecircle 5.542 - LANGUAGE C IMMUTABLE STRICT 5.543 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 5.544 - 5.545 -CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 5.546 - 5.547 -CREATE FUNCTION cast_epoint_to_ecluster(epoint) 5.548 - RETURNS ecluster 5.549 - LANGUAGE C IMMUTABLE STRICT 5.550 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 5.551 - 5.552 -CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 5.553 - 5.554 -CREATE FUNCTION cast_ebox_to_ecluster(ebox) 5.555 - RETURNS ecluster 5.556 - LANGUAGE C IMMUTABLE STRICT 5.557 - AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 5.558 - 5.559 -CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 5.560 - 5.561 - 5.562 ---------------------------- 5.563 --- constructor functions -- 5.564 ---------------------------- 5.565 - 5.566 -CREATE FUNCTION epoint(float8, float8) 5.567 - RETURNS epoint 5.568 - LANGUAGE C IMMUTABLE STRICT 5.569 - AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 5.570 - 5.571 -CREATE FUNCTION epoint_latlon(float8, float8) 5.572 - RETURNS epoint 5.573 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 5.574 - SELECT epoint($1, $2) 5.575 - $$; 5.576 - 5.577 -CREATE FUNCTION epoint_lonlat(float8, float8) 5.578 - RETURNS epoint 5.579 - LANGUAGE SQL IMMUTABLE STRICT AS $$ 5.580 - SELECT epoint($2, $1) 5.581 - $$; 5.582 - 5.583 -CREATE FUNCTION epoint_with_sample_count(epoint, int4) 5.584 - RETURNS epoint_with_sample_count 5.585 - LANGUAGE C IMMUTABLE STRICT 5.586 - AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 5.587 - 5.588 -CREATE FUNCTION empty_ebox() 5.589 - RETURNS ebox 5.590 - LANGUAGE C IMMUTABLE STRICT 5.591 - AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 5.592 - 5.593 -CREATE FUNCTION ebox(float8, float8, float8, float8) 5.594 - RETURNS ebox 5.595 - LANGUAGE C IMMUTABLE STRICT 5.596 - AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 5.597 - 5.598 -CREATE FUNCTION ebox(epoint, epoint) 5.599 - RETURNS ebox 5.600 - LANGUAGE C IMMUTABLE STRICT 5.601 - AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 5.602 - 5.603 -CREATE FUNCTION ecircle(float8, float8, float8) 5.604 - RETURNS ecircle 5.605 - LANGUAGE C IMMUTABLE STRICT 5.606 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 5.607 - 5.608 -CREATE FUNCTION ecircle(epoint, float8) 5.609 - RETURNS ecircle 5.610 - LANGUAGE C IMMUTABLE STRICT 5.611 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 5.612 - 5.613 -CREATE FUNCTION ecluster_concat(ecluster[]) 5.614 - RETURNS ecluster 5.615 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.616 - SELECT array_to_string($1, ' ')::ecluster 5.617 - $$; 5.618 - 5.619 -CREATE FUNCTION ecluster_concat(ecluster, ecluster) 5.620 - RETURNS ecluster 5.621 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.622 - SELECT ($1::text || ' ' || $2::text)::ecluster 5.623 - $$; 5.624 - 5.625 -CREATE FUNCTION ecluster_create_multipoint(epoint[]) 5.626 - RETURNS ecluster 5.627 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.628 - SELECT 5.629 - array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster 5.630 - FROM unnest($1) 5.631 - $$; 5.632 - 5.633 -CREATE FUNCTION ecluster_create_path(epoint[]) 5.634 - RETURNS ecluster 5.635 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.636 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 5.637 - ('path (' || array_to_string($1, ' ') || ')')::ecluster 5.638 - END 5.639 - FROM array_to_string($1, ' ') AS "str" 5.640 - $$; 5.641 - 5.642 -CREATE FUNCTION ecluster_create_outline(epoint[]) 5.643 - RETURNS ecluster 5.644 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.645 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 5.646 - ('outline (' || array_to_string($1, ' ') || ')')::ecluster 5.647 - END 5.648 - FROM array_to_string($1, ' ') AS "str" 5.649 - $$; 5.650 - 5.651 -CREATE FUNCTION ecluster_create_polygon(epoint[]) 5.652 - RETURNS ecluster 5.653 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.654 - SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 5.655 - ('polygon (' || array_to_string($1, ' ') || ')')::ecluster 5.656 - END 5.657 - FROM array_to_string($1, ' ') AS "str" 5.658 - $$; 5.659 - 5.660 - 5.661 ----------------------- 5.662 --- getter functions -- 5.663 ----------------------- 5.664 - 5.665 -CREATE FUNCTION latitude(epoint) 5.666 - RETURNS float8 5.667 - LANGUAGE C IMMUTABLE STRICT 5.668 - AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 5.669 - 5.670 -CREATE FUNCTION longitude(epoint) 5.671 - RETURNS float8 5.672 - LANGUAGE C IMMUTABLE STRICT 5.673 - AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 5.674 - 5.675 -CREATE FUNCTION min_latitude(ebox) 5.676 - RETURNS float8 5.677 - LANGUAGE C IMMUTABLE STRICT 5.678 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 5.679 - 5.680 -CREATE FUNCTION max_latitude(ebox) 5.681 - RETURNS float8 5.682 - LANGUAGE C IMMUTABLE STRICT 5.683 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 5.684 - 5.685 -CREATE FUNCTION min_longitude(ebox) 5.686 - RETURNS float8 5.687 - LANGUAGE C IMMUTABLE STRICT 5.688 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 5.689 - 5.690 -CREATE FUNCTION max_longitude(ebox) 5.691 - RETURNS float8 5.692 - LANGUAGE C IMMUTABLE STRICT 5.693 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 5.694 - 5.695 -CREATE FUNCTION center(ecircle) 5.696 - RETURNS epoint 5.697 - LANGUAGE C IMMUTABLE STRICT 5.698 - AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 5.699 - 5.700 -CREATE FUNCTION radius(ecircle) 5.701 - RETURNS float8 5.702 - LANGUAGE C IMMUTABLE STRICT 5.703 - AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 5.704 - 5.705 -CREATE FUNCTION ecluster_extract_points(ecluster) 5.706 - RETURNS SETOF epoint 5.707 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.708 - SELECT "match"[2]::epoint 5.709 - FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match" 5.710 - $$; 5.711 - 5.712 -CREATE FUNCTION ecluster_extract_paths(ecluster) 5.713 - RETURNS SETOF epoint[] 5.714 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.715 - SELECT ( 5.716 - SELECT array_agg("m2"[1]::epoint) 5.717 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 5.718 - ) 5.719 - FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1" 5.720 - $$; 5.721 - 5.722 -CREATE FUNCTION ecluster_extract_outlines(ecluster) 5.723 - RETURNS SETOF epoint[] 5.724 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.725 - SELECT ( 5.726 - SELECT array_agg("m2"[1]::epoint) 5.727 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 5.728 - ) 5.729 - FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1" 5.730 - $$; 5.731 - 5.732 -CREATE FUNCTION ecluster_extract_polygons(ecluster) 5.733 - RETURNS SETOF epoint[] 5.734 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.735 - SELECT ( 5.736 - SELECT array_agg("m2"[1]::epoint) 5.737 - FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 5.738 - ) 5.739 - FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1" 5.740 - $$; 5.741 - 5.742 - 5.743 ---------------- 5.744 --- operators -- 5.745 ---------------- 5.746 - 5.747 -CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 5.748 - RETURNS boolean 5.749 - LANGUAGE C IMMUTABLE STRICT 5.750 - AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 5.751 - 5.752 -CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 5.753 - RETURNS boolean 5.754 - LANGUAGE C IMMUTABLE STRICT 5.755 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 5.756 - 5.757 -CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 5.758 - RETURNS boolean 5.759 - LANGUAGE C IMMUTABLE STRICT 5.760 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 5.761 - 5.762 -CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 5.763 - RETURNS boolean 5.764 - LANGUAGE C IMMUTABLE STRICT 5.765 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 5.766 - 5.767 -CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 5.768 - RETURNS boolean 5.769 - LANGUAGE C IMMUTABLE STRICT 5.770 - AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 5.771 - 5.772 -CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 5.773 - RETURNS boolean 5.774 - LANGUAGE C IMMUTABLE STRICT 5.775 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 5.776 - 5.777 -CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 5.778 - RETURNS boolean 5.779 - LANGUAGE C IMMUTABLE STRICT 5.780 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 5.781 - 5.782 -CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 5.783 - RETURNS boolean 5.784 - LANGUAGE C IMMUTABLE STRICT 5.785 - AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 5.786 - 5.787 -CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 5.788 - RETURNS boolean 5.789 - LANGUAGE C IMMUTABLE STRICT 5.790 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 5.791 - 5.792 -CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 5.793 - RETURNS boolean 5.794 - LANGUAGE C IMMUTABLE STRICT 5.795 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 5.796 - 5.797 -CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 5.798 - RETURNS boolean 5.799 - LANGUAGE C IMMUTABLE STRICT 5.800 - AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 5.801 - 5.802 -CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 5.803 - RETURNS boolean 5.804 - LANGUAGE C IMMUTABLE STRICT 5.805 - AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 5.806 - 5.807 -CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 5.808 - RETURNS boolean 5.809 - LANGUAGE C IMMUTABLE STRICT 5.810 - AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 5.811 - 5.812 -CREATE FUNCTION epoint_distance_proc(epoint, epoint) 5.813 - RETURNS float8 5.814 - LANGUAGE C IMMUTABLE STRICT 5.815 - AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 5.816 - 5.817 -CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 5.818 - RETURNS float8 5.819 - LANGUAGE C IMMUTABLE STRICT 5.820 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 5.821 - 5.822 -CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 5.823 - RETURNS float8 5.824 - LANGUAGE C IMMUTABLE STRICT 5.825 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 5.826 - 5.827 -CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 5.828 - RETURNS float8 5.829 - LANGUAGE C IMMUTABLE STRICT 5.830 - AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 5.831 - 5.832 -CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 5.833 - RETURNS float8 5.834 - LANGUAGE C IMMUTABLE STRICT 5.835 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 5.836 - 5.837 -CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 5.838 - RETURNS float8 5.839 - LANGUAGE C IMMUTABLE STRICT 5.840 - AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 5.841 - 5.842 -CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 5.843 - RETURNS float8 5.844 - LANGUAGE C IMMUTABLE STRICT 5.845 - AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 5.846 - 5.847 -CREATE OPERATOR && ( 5.848 - leftarg = epoint, 5.849 - rightarg = ebox, 5.850 - procedure = epoint_ebox_overlap_proc, 5.851 - commutator = &&, 5.852 - restrict = areasel, 5.853 - join = areajoinsel 5.854 -); 5.855 - 5.856 -CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 5.857 - RETURNS boolean 5.858 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 5.859 - 5.860 -CREATE OPERATOR && ( 5.861 - leftarg = ebox, 5.862 - rightarg = epoint, 5.863 - procedure = epoint_ebox_overlap_commutator, 5.864 - commutator = &&, 5.865 - restrict = areasel, 5.866 - join = areajoinsel 5.867 -); 5.868 - 5.869 -CREATE OPERATOR && ( 5.870 - leftarg = epoint, 5.871 - rightarg = ecircle, 5.872 - procedure = epoint_ecircle_overlap_proc, 5.873 - commutator = &&, 5.874 - restrict = areasel, 5.875 - join = areajoinsel 5.876 -); 5.877 - 5.878 -CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 5.879 - RETURNS boolean 5.880 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 5.881 - 5.882 -CREATE OPERATOR && ( 5.883 - leftarg = ecircle, 5.884 - rightarg = epoint, 5.885 - procedure = epoint_ecircle_overlap_commutator, 5.886 - commutator = &&, 5.887 - restrict = areasel, 5.888 - join = areajoinsel 5.889 -); 5.890 - 5.891 -CREATE OPERATOR && ( 5.892 - leftarg = epoint, 5.893 - rightarg = ecluster, 5.894 - procedure = epoint_ecluster_overlap_proc, 5.895 - commutator = &&, 5.896 - restrict = areasel, 5.897 - join = areajoinsel 5.898 -); 5.899 - 5.900 -CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 5.901 - RETURNS boolean 5.902 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 5.903 - 5.904 -CREATE OPERATOR && ( 5.905 - leftarg = ecluster, 5.906 - rightarg = epoint, 5.907 - procedure = epoint_ecluster_overlap_commutator, 5.908 - commutator = &&, 5.909 - restrict = areasel, 5.910 - join = areajoinsel 5.911 -); 5.912 - 5.913 -CREATE OPERATOR && ( 5.914 - leftarg = ebox, 5.915 - rightarg = ebox, 5.916 - procedure = ebox_overlap_proc, 5.917 - commutator = &&, 5.918 - restrict = areasel, 5.919 - join = areajoinsel 5.920 -); 5.921 - 5.922 -CREATE OPERATOR && ( 5.923 - leftarg = ecircle, 5.924 - rightarg = ecircle, 5.925 - procedure = ecircle_overlap_proc, 5.926 - commutator = &&, 5.927 - restrict = areasel, 5.928 - join = areajoinsel 5.929 -); 5.930 - 5.931 -CREATE OPERATOR && ( 5.932 - leftarg = ecircle, 5.933 - rightarg = ecluster, 5.934 - procedure = ecircle_ecluster_overlap_proc, 5.935 - commutator = &&, 5.936 - restrict = areasel, 5.937 - join = areajoinsel 5.938 -); 5.939 - 5.940 -CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 5.941 - RETURNS boolean 5.942 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 5.943 - 5.944 -CREATE OPERATOR && ( 5.945 - leftarg = ecluster, 5.946 - rightarg = ecircle, 5.947 - procedure = ecircle_ecluster_overlap_commutator, 5.948 - commutator = &&, 5.949 - restrict = areasel, 5.950 - join = areajoinsel 5.951 -); 5.952 - 5.953 -CREATE OPERATOR && ( 5.954 - leftarg = ecluster, 5.955 - rightarg = ecluster, 5.956 - procedure = ecluster_overlap_proc, 5.957 - commutator = &&, 5.958 - restrict = areasel, 5.959 - join = areajoinsel 5.960 -); 5.961 - 5.962 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 5.963 - RETURNS boolean 5.964 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 5.965 - 5.966 -CREATE OPERATOR && ( 5.967 - leftarg = ebox, 5.968 - rightarg = ecircle, 5.969 - procedure = ebox_ecircle_overlap_castwrap, 5.970 - commutator = &&, 5.971 - restrict = areasel, 5.972 - join = areajoinsel 5.973 -); 5.974 - 5.975 -CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 5.976 - RETURNS boolean 5.977 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 5.978 - 5.979 -CREATE OPERATOR && ( 5.980 - leftarg = ecircle, 5.981 - rightarg = ebox, 5.982 - procedure = ebox_ecircle_overlap_castwrap, 5.983 - commutator = &&, 5.984 - restrict = areasel, 5.985 - join = areajoinsel 5.986 -); 5.987 - 5.988 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 5.989 - RETURNS boolean 5.990 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 5.991 - 5.992 -CREATE OPERATOR && ( 5.993 - leftarg = ebox, 5.994 - rightarg = ecluster, 5.995 - procedure = ebox_ecluster_overlap_castwrap, 5.996 - commutator = &&, 5.997 - restrict = areasel, 5.998 - join = areajoinsel 5.999 -); 5.1000 - 5.1001 -CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 5.1002 - RETURNS boolean 5.1003 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 5.1004 - 5.1005 -CREATE OPERATOR && ( 5.1006 - leftarg = ecluster, 5.1007 - rightarg = ebox, 5.1008 - procedure = ebox_ecluster_overlap_castwrap, 5.1009 - commutator = &&, 5.1010 - restrict = areasel, 5.1011 - join = areajoinsel 5.1012 -); 5.1013 - 5.1014 -CREATE OPERATOR &&+ ( 5.1015 - leftarg = epoint, 5.1016 - rightarg = ecluster, 5.1017 - procedure = epoint_ecluster_may_overlap_proc, 5.1018 - commutator = &&+, 5.1019 - restrict = areasel, 5.1020 - join = areajoinsel 5.1021 -); 5.1022 - 5.1023 -CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 5.1024 - RETURNS boolean 5.1025 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 5.1026 - 5.1027 -CREATE OPERATOR &&+ ( 5.1028 - leftarg = ecluster, 5.1029 - rightarg = epoint, 5.1030 - procedure = epoint_ecluster_may_overlap_commutator, 5.1031 - commutator = &&+, 5.1032 - restrict = areasel, 5.1033 - join = areajoinsel 5.1034 -); 5.1035 - 5.1036 -CREATE OPERATOR &&+ ( 5.1037 - leftarg = ebox, 5.1038 - rightarg = ecircle, 5.1039 - procedure = ebox_ecircle_may_overlap_proc, 5.1040 - commutator = &&+, 5.1041 - restrict = areasel, 5.1042 - join = areajoinsel 5.1043 -); 5.1044 - 5.1045 -CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 5.1046 - RETURNS boolean 5.1047 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 5.1048 - 5.1049 -CREATE OPERATOR &&+ ( 5.1050 - leftarg = ecircle, 5.1051 - rightarg = ebox, 5.1052 - procedure = ebox_ecircle_may_overlap_commutator, 5.1053 - commutator = &&+, 5.1054 - restrict = areasel, 5.1055 - join = areajoinsel 5.1056 -); 5.1057 - 5.1058 -CREATE OPERATOR &&+ ( 5.1059 - leftarg = ebox, 5.1060 - rightarg = ecluster, 5.1061 - procedure = ebox_ecluster_may_overlap_proc, 5.1062 - commutator = &&+, 5.1063 - restrict = areasel, 5.1064 - join = areajoinsel 5.1065 -); 5.1066 - 5.1067 -CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 5.1068 - RETURNS boolean 5.1069 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 5.1070 - 5.1071 -CREATE OPERATOR &&+ ( 5.1072 - leftarg = ecluster, 5.1073 - rightarg = ebox, 5.1074 - procedure = ebox_ecluster_may_overlap_commutator, 5.1075 - commutator = &&+, 5.1076 - restrict = areasel, 5.1077 - join = areajoinsel 5.1078 -); 5.1079 - 5.1080 -CREATE OPERATOR &&+ ( 5.1081 - leftarg = ecircle, 5.1082 - rightarg = ecluster, 5.1083 - procedure = ecircle_ecluster_may_overlap_proc, 5.1084 - commutator = &&+, 5.1085 - restrict = areasel, 5.1086 - join = areajoinsel 5.1087 -); 5.1088 - 5.1089 -CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 5.1090 - RETURNS boolean 5.1091 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 5.1092 - 5.1093 -CREATE OPERATOR &&+ ( 5.1094 - leftarg = ecluster, 5.1095 - rightarg = ecircle, 5.1096 - procedure = ecircle_ecluster_may_overlap_commutator, 5.1097 - commutator = &&+, 5.1098 - restrict = areasel, 5.1099 - join = areajoinsel 5.1100 -); 5.1101 - 5.1102 -CREATE OPERATOR &&+ ( 5.1103 - leftarg = ecluster, 5.1104 - rightarg = ecluster, 5.1105 - procedure = ecluster_may_overlap_proc, 5.1106 - commutator = &&+, 5.1107 - restrict = areasel, 5.1108 - join = areajoinsel 5.1109 -); 5.1110 - 5.1111 -CREATE OPERATOR @> ( 5.1112 - leftarg = ebox, 5.1113 - rightarg = epoint, 5.1114 - procedure = epoint_ebox_overlap_commutator, 5.1115 - commutator = <@, 5.1116 - restrict = areasel, 5.1117 - join = areajoinsel 5.1118 -); 5.1119 - 5.1120 -CREATE OPERATOR <@ ( 5.1121 - leftarg = epoint, 5.1122 - rightarg = ebox, 5.1123 - procedure = epoint_ebox_overlap_proc, 5.1124 - commutator = @>, 5.1125 - restrict = areasel, 5.1126 - join = areajoinsel 5.1127 -); 5.1128 - 5.1129 -CREATE OPERATOR @> ( 5.1130 - leftarg = ecluster, 5.1131 - rightarg = epoint, 5.1132 - procedure = epoint_ecluster_overlap_commutator, 5.1133 - commutator = <@, 5.1134 - restrict = areasel, 5.1135 - join = areajoinsel 5.1136 -); 5.1137 - 5.1138 -CREATE OPERATOR <@ ( 5.1139 - leftarg = epoint, 5.1140 - rightarg = ecluster, 5.1141 - procedure = epoint_ecluster_overlap_proc, 5.1142 - commutator = <@, 5.1143 - restrict = areasel, 5.1144 - join = areajoinsel 5.1145 -); 5.1146 - 5.1147 -CREATE OPERATOR @> ( 5.1148 - leftarg = ecluster, 5.1149 - rightarg = ecluster, 5.1150 - procedure = ecluster_contains_proc, 5.1151 - commutator = <@, 5.1152 - restrict = areasel, 5.1153 - join = areajoinsel 5.1154 -); 5.1155 - 5.1156 -CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 5.1157 - RETURNS boolean 5.1158 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1'; 5.1159 - 5.1160 -CREATE OPERATOR <@ ( 5.1161 - leftarg = ecluster, 5.1162 - rightarg = ecluster, 5.1163 - procedure = ecluster_contains_commutator, 5.1164 - commutator = @>, 5.1165 - restrict = areasel, 5.1166 - join = areajoinsel 5.1167 -); 5.1168 - 5.1169 -CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 5.1170 - RETURNS boolean 5.1171 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2::ecluster'; 5.1172 - 5.1173 -CREATE OPERATOR @> ( 5.1174 - leftarg = ebox, 5.1175 - rightarg = ebox, 5.1176 - procedure = ebox_contains_castwrap, 5.1177 - commutator = <@, 5.1178 - restrict = areasel, 5.1179 - join = areajoinsel 5.1180 -); 5.1181 - 5.1182 -CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 5.1183 - RETURNS boolean 5.1184 - LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1::ecluster'; 5.1185 - 5.1186 -CREATE OPERATOR <@ ( 5.1187 - leftarg = ebox, 5.1188 - rightarg = ebox, 5.1189 - procedure = ebox_contains_swapped_castwrap, 5.1190 - commutator = @>, 5.1191 - restrict = areasel, 5.1192 - join = areajoinsel 5.1193 -); 5.1194 - 5.1195 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 5.1196 - RETURNS boolean 5.1197 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2'; 5.1198 - 5.1199 -CREATE OPERATOR @> ( 5.1200 - leftarg = ebox, 5.1201 - rightarg = ecluster, 5.1202 - procedure = ebox_ecluster_contains_castwrap, 5.1203 - commutator = <@, 5.1204 - restrict = areasel, 5.1205 - join = areajoinsel 5.1206 -); 5.1207 - 5.1208 -CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 5.1209 - RETURNS boolean 5.1210 - LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1'; 5.1211 - 5.1212 -CREATE OPERATOR <@ ( 5.1213 - leftarg = ecluster, 5.1214 - rightarg = ebox, 5.1215 - procedure = ebox_ecluster_contains_castwrap, 5.1216 - commutator = @>, 5.1217 - restrict = areasel, 5.1218 - join = areajoinsel 5.1219 -); 5.1220 - 5.1221 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 5.1222 - RETURNS boolean 5.1223 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster'; 5.1224 - 5.1225 -CREATE OPERATOR @> ( 5.1226 - leftarg = ecluster, 5.1227 - rightarg = ebox, 5.1228 - procedure = ecluster_ebox_contains_castwrap, 5.1229 - commutator = <@, 5.1230 - restrict = areasel, 5.1231 - join = areajoinsel 5.1232 -); 5.1233 - 5.1234 -CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 5.1235 - RETURNS boolean 5.1236 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster'; 5.1237 - 5.1238 -CREATE OPERATOR <@ ( 5.1239 - leftarg = ebox, 5.1240 - rightarg = ecluster, 5.1241 - procedure = ecluster_ebox_contains_castwrap, 5.1242 - commutator = @>, 5.1243 - restrict = areasel, 5.1244 - join = areajoinsel 5.1245 -); 5.1246 - 5.1247 -CREATE OPERATOR <-> ( 5.1248 - leftarg = epoint, 5.1249 - rightarg = epoint, 5.1250 - procedure = epoint_distance_proc, 5.1251 - commutator = <-> 5.1252 -); 5.1253 - 5.1254 -CREATE OPERATOR <-> ( 5.1255 - leftarg = epoint, 5.1256 - rightarg = ecircle, 5.1257 - procedure = epoint_ecircle_distance_proc, 5.1258 - commutator = <-> 5.1259 -); 5.1260 - 5.1261 -CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 5.1262 - RETURNS float8 5.1263 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 5.1264 - 5.1265 -CREATE OPERATOR <-> ( 5.1266 - leftarg = ecircle, 5.1267 - rightarg = epoint, 5.1268 - procedure = epoint_ecircle_distance_commutator, 5.1269 - commutator = <-> 5.1270 -); 5.1271 - 5.1272 -CREATE OPERATOR <-> ( 5.1273 - leftarg = epoint, 5.1274 - rightarg = ecluster, 5.1275 - procedure = epoint_ecluster_distance_proc, 5.1276 - commutator = <-> 5.1277 -); 5.1278 - 5.1279 -CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 5.1280 - RETURNS float8 5.1281 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 5.1282 - 5.1283 -CREATE OPERATOR <-> ( 5.1284 - leftarg = ecluster, 5.1285 - rightarg = epoint, 5.1286 - procedure = epoint_ecluster_distance_commutator, 5.1287 - commutator = <-> 5.1288 -); 5.1289 - 5.1290 -CREATE OPERATOR <-> ( 5.1291 - leftarg = ecircle, 5.1292 - rightarg = ecircle, 5.1293 - procedure = ecircle_distance_proc, 5.1294 - commutator = <-> 5.1295 -); 5.1296 - 5.1297 -CREATE OPERATOR <-> ( 5.1298 - leftarg = ecircle, 5.1299 - rightarg = ecluster, 5.1300 - procedure = ecircle_ecluster_distance_proc, 5.1301 - commutator = <-> 5.1302 -); 5.1303 - 5.1304 -CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 5.1305 - RETURNS float8 5.1306 - LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 5.1307 - 5.1308 -CREATE OPERATOR <-> ( 5.1309 - leftarg = ecluster, 5.1310 - rightarg = ecircle, 5.1311 - procedure = ecircle_ecluster_distance_commutator, 5.1312 - commutator = <-> 5.1313 -); 5.1314 - 5.1315 -CREATE OPERATOR <-> ( 5.1316 - leftarg = ecluster, 5.1317 - rightarg = ecluster, 5.1318 - procedure = ecluster_distance_proc, 5.1319 - commutator = <-> 5.1320 -); 5.1321 - 5.1322 -CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 5.1323 - RETURNS float8 5.1324 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 5.1325 - 5.1326 -CREATE OPERATOR <-> ( 5.1327 - leftarg = epoint, 5.1328 - rightarg = ebox, 5.1329 - procedure = epoint_ebox_distance_castwrap, 5.1330 - commutator = <-> 5.1331 -); 5.1332 - 5.1333 -CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 5.1334 - RETURNS float8 5.1335 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 5.1336 - 5.1337 -CREATE OPERATOR <-> ( 5.1338 - leftarg = ebox, 5.1339 - rightarg = epoint, 5.1340 - procedure = epoint_ebox_distance_castwrap, 5.1341 - commutator = <-> 5.1342 -); 5.1343 - 5.1344 -CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 5.1345 - RETURNS float8 5.1346 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster'; 5.1347 - 5.1348 -CREATE OPERATOR <-> ( 5.1349 - leftarg = ebox, 5.1350 - rightarg = ebox, 5.1351 - procedure = ebox_distance_castwrap, 5.1352 - commutator = <-> 5.1353 -); 5.1354 - 5.1355 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 5.1356 - RETURNS float8 5.1357 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 5.1358 - 5.1359 -CREATE OPERATOR <-> ( 5.1360 - leftarg = ebox, 5.1361 - rightarg = ecircle, 5.1362 - procedure = ebox_ecircle_distance_castwrap, 5.1363 - commutator = <-> 5.1364 -); 5.1365 - 5.1366 -CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 5.1367 - RETURNS float8 5.1368 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 5.1369 - 5.1370 -CREATE OPERATOR <-> ( 5.1371 - leftarg = ecircle, 5.1372 - rightarg = ebox, 5.1373 - procedure = ebox_ecircle_distance_castwrap, 5.1374 - commutator = <-> 5.1375 -); 5.1376 - 5.1377 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 5.1378 - RETURNS float8 5.1379 - LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 5.1380 - 5.1381 -CREATE OPERATOR <-> ( 5.1382 - leftarg = ebox, 5.1383 - rightarg = ecluster, 5.1384 - procedure = ebox_ecluster_distance_castwrap, 5.1385 - commutator = <-> 5.1386 -); 5.1387 - 5.1388 -CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 5.1389 - RETURNS float8 5.1390 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 5.1391 - 5.1392 -CREATE OPERATOR <-> ( 5.1393 - leftarg = ecluster, 5.1394 - rightarg = ebox, 5.1395 - procedure = ebox_ecluster_distance_castwrap, 5.1396 - commutator = <-> 5.1397 -); 5.1398 - 5.1399 -CREATE OPERATOR <=> ( 5.1400 - leftarg = ecluster, 5.1401 - rightarg = epoint_with_sample_count, 5.1402 - procedure = fair_distance_operator_proc 5.1403 -); 5.1404 - 5.1405 - 5.1406 ----------------- 5.1407 --- GiST index -- 5.1408 ----------------- 5.1409 - 5.1410 -CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 5.1411 - RETURNS boolean 5.1412 - LANGUAGE C STRICT 5.1413 - AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 5.1414 - 5.1415 -CREATE FUNCTION pgl_gist_union(internal, internal) 5.1416 - RETURNS internal 5.1417 - LANGUAGE C STRICT 5.1418 - AS '$libdir/latlon-v0009', 'pgl_gist_union'; 5.1419 - 5.1420 -CREATE FUNCTION pgl_gist_compress_epoint(internal) 5.1421 - RETURNS internal 5.1422 - LANGUAGE C STRICT 5.1423 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 5.1424 - 5.1425 -CREATE FUNCTION pgl_gist_compress_ecircle(internal) 5.1426 - RETURNS internal 5.1427 - LANGUAGE C STRICT 5.1428 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 5.1429 - 5.1430 -CREATE FUNCTION pgl_gist_compress_ecluster(internal) 5.1431 - RETURNS internal 5.1432 - LANGUAGE C STRICT 5.1433 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 5.1434 - 5.1435 -CREATE FUNCTION pgl_gist_decompress(internal) 5.1436 - RETURNS internal 5.1437 - LANGUAGE C STRICT 5.1438 - AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 5.1439 - 5.1440 -CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 5.1441 - RETURNS internal 5.1442 - LANGUAGE C STRICT 5.1443 - AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 5.1444 - 5.1445 -CREATE FUNCTION pgl_gist_picksplit(internal, internal) 5.1446 - RETURNS internal 5.1447 - LANGUAGE C STRICT 5.1448 - AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 5.1449 - 5.1450 -CREATE FUNCTION pgl_gist_same(internal, internal, internal) 5.1451 - RETURNS internal 5.1452 - LANGUAGE C STRICT 5.1453 - AS '$libdir/latlon-v0009', 'pgl_gist_same'; 5.1454 - 5.1455 -CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 5.1456 - RETURNS internal 5.1457 - LANGUAGE C STRICT 5.1458 - AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 5.1459 - 5.1460 -CREATE OPERATOR CLASS epoint_ops 5.1461 - DEFAULT FOR TYPE epoint USING gist AS 5.1462 - OPERATOR 11 = , 5.1463 - OPERATOR 22 && (epoint, ebox), 5.1464 - OPERATOR 222 <@ (epoint, ebox), 5.1465 - OPERATOR 23 && (epoint, ecircle), 5.1466 - OPERATOR 24 && (epoint, ecluster), 5.1467 - OPERATOR 124 &&+ (epoint, ecluster), 5.1468 - OPERATOR 224 <@ (epoint, ecluster), 5.1469 - OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 5.1470 - OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 5.1471 - OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 5.1472 - OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 5.1473 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 5.1474 - FUNCTION 2 pgl_gist_union(internal, internal), 5.1475 - FUNCTION 3 pgl_gist_compress_epoint(internal), 5.1476 - FUNCTION 4 pgl_gist_decompress(internal), 5.1477 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 5.1478 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 5.1479 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 5.1480 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 5.1481 - STORAGE ekey_point; 5.1482 - 5.1483 -CREATE OPERATOR CLASS ecircle_ops 5.1484 - DEFAULT FOR TYPE ecircle USING gist AS 5.1485 - OPERATOR 13 = , 5.1486 - OPERATOR 21 && (ecircle, epoint), 5.1487 - OPERATOR 22 && (ecircle, ebox), 5.1488 - OPERATOR 122 &&+ (ecircle, ebox), 5.1489 - OPERATOR 23 && (ecircle, ecircle), 5.1490 - OPERATOR 24 && (ecircle, ecluster), 5.1491 - OPERATOR 124 &&+ (ecircle, ecluster), 5.1492 - OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 5.1493 - OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 5.1494 - OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 5.1495 - OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 5.1496 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 5.1497 - FUNCTION 2 pgl_gist_union(internal, internal), 5.1498 - FUNCTION 3 pgl_gist_compress_ecircle(internal), 5.1499 - FUNCTION 4 pgl_gist_decompress(internal), 5.1500 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 5.1501 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 5.1502 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 5.1503 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 5.1504 - STORAGE ekey_area; 5.1505 - 5.1506 -CREATE OPERATOR CLASS ecluster_ops 5.1507 - DEFAULT FOR TYPE ecluster USING gist AS 5.1508 - OPERATOR 21 && (ecluster, epoint), 5.1509 - OPERATOR 121 &&+ (ecluster, epoint), 5.1510 - OPERATOR 221 @> (ecluster, epoint), 5.1511 - OPERATOR 22 && (ecluster, ebox), 5.1512 - OPERATOR 122 &&+ (ecluster, ebox), 5.1513 - OPERATOR 222 @> (ecluster, ebox), 5.1514 - OPERATOR 322 <@ (ecluster, ebox), 5.1515 - OPERATOR 23 && (ecluster, ecircle), 5.1516 - OPERATOR 123 &&+ (ecluster, ecircle), 5.1517 - OPERATOR 24 && (ecluster, ecluster), 5.1518 - OPERATOR 124 &&+ (ecluster, ecluster), 5.1519 - OPERATOR 224 @> (ecluster, ecluster), 5.1520 - OPERATOR 324 <@ (ecluster, ecluster), 5.1521 - OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 5.1522 - OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 5.1523 - OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 5.1524 - OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 5.1525 - OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 5.1526 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 5.1527 - FUNCTION 2 pgl_gist_union(internal, internal), 5.1528 - FUNCTION 3 pgl_gist_compress_ecluster(internal), 5.1529 - FUNCTION 4 pgl_gist_decompress(internal), 5.1530 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 5.1531 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 5.1532 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 5.1533 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 5.1534 - STORAGE ekey_area; 5.1535 - 5.1536 - 5.1537 ---------------------- 5.1538 --- alias functions -- 5.1539 ---------------------- 5.1540 - 5.1541 -CREATE FUNCTION distance(epoint, epoint) 5.1542 - RETURNS float8 5.1543 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 5.1544 - 5.1545 -CREATE FUNCTION distance(ecluster, epoint) 5.1546 - RETURNS float8 5.1547 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 5.1548 - 5.1549 -CREATE FUNCTION distance_within(epoint, epoint, float8) 5.1550 - RETURNS boolean 5.1551 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 5.1552 - 5.1553 -CREATE FUNCTION distance_within(ecluster, epoint, float8) 5.1554 - RETURNS boolean 5.1555 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 5.1556 - 5.1557 -CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 5.1558 - RETURNS float8 5.1559 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 5.1560 - 5.1561 - 5.1562 --------------------------------- 5.1563 --- other data storage formats -- 5.1564 --------------------------------- 5.1565 - 5.1566 -CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 5.1567 - RETURNS epoint 5.1568 - LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 5.1569 - DECLARE 5.1570 - "result" epoint; 5.1571 - BEGIN 5.1572 - IF $3 = 'epoint_lonlat' THEN 5.1573 - -- avoid dynamic command execution for better performance 5.1574 - RETURN epoint($2, $1); 5.1575 - END IF; 5.1576 - IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN 5.1577 - -- avoid dynamic command execution for better performance 5.1578 - RETURN epoint($1, $2); 5.1579 - END IF; 5.1580 - EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2; 5.1581 - RETURN "result"; 5.1582 - END; 5.1583 - $$; 5.1584 - 5.1585 -CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 5.1586 - RETURNS SETOF jsonb 5.1587 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.1588 - SELECT "result" FROM 5.1589 - ( SELECT jsonb_array_length($1) - 1 ) AS "lastindex_row" ("lastindex") 5.1590 - CROSS JOIN LATERAL jsonb_array_elements( 5.1591 - CASE WHEN 5.1592 - coords_to_epoint( 5.1593 - ($1->0->>0)::float8, 5.1594 - ($1->0->>1)::float8, 5.1595 - $2 5.1596 - ) = coords_to_epoint( 5.1597 - ($1->"lastindex"->>0)::float8, 5.1598 - ($1->"lastindex"->>1)::float8, 5.1599 - $2 5.1600 - ) 5.1601 - THEN 5.1602 - $1 - "lastindex" 5.1603 - ELSE 5.1604 - $1 5.1605 - END 5.1606 - ) AS "result_row" ("result") 5.1607 - $$; 5.1608 - 5.1609 -CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 5.1610 - RETURNS epoint 5.1611 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.1612 - SELECT CASE 5.1613 - WHEN $1->>'type' = 'Point' THEN 5.1614 - coords_to_epoint( 5.1615 - ($1->'coordinates'->>0)::float8, 5.1616 - ($1->'coordinates'->>1)::float8, 5.1617 - $2 5.1618 - ) 5.1619 - WHEN $1->>'type' = 'Feature' THEN 5.1620 - GeoJSON_to_epoint($1->'geometry', $2) 5.1621 - ELSE 5.1622 - NULL 5.1623 - END 5.1624 - $$; 5.1625 - 5.1626 -CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 5.1627 - RETURNS ecluster 5.1628 - LANGUAGE sql IMMUTABLE STRICT AS $$ 5.1629 - SELECT CASE $1->>'type' 5.1630 - WHEN 'Point' THEN 5.1631 - coords_to_epoint( 5.1632 - ($1->'coordinates'->>0)::float8, 5.1633 - ($1->'coordinates'->>1)::float8, 5.1634 - $2 5.1635 - )::ecluster 5.1636 - WHEN 'MultiPoint' THEN 5.1637 - ( SELECT ecluster_create_multipoint(array_agg( 5.1638 - coords_to_epoint( 5.1639 - ("coord"->>0)::float8, 5.1640 - ("coord"->>1)::float8, 5.1641 - $2 5.1642 - ) 5.1643 - )) 5.1644 - FROM jsonb_array_elements($1->'coordinates') AS "coord" 5.1645 - ) 5.1646 - WHEN 'LineString' THEN 5.1647 - ( SELECT ecluster_create_path(array_agg( 5.1648 - coords_to_epoint( 5.1649 - ("coord"->>0)::float8, 5.1650 - ("coord"->>1)::float8, 5.1651 - $2 5.1652 - ) 5.1653 - )) 5.1654 - FROM jsonb_array_elements($1->'coordinates') AS "coord" 5.1655 - ) 5.1656 - WHEN 'MultiLineString' THEN 5.1657 - ( SELECT ecluster_concat(array_agg( 5.1658 - ( SELECT ecluster_create_path(array_agg( 5.1659 - coords_to_epoint( 5.1660 - ("coord"->>0)::float8, 5.1661 - ("coord"->>1)::float8, 5.1662 - $2 5.1663 - ) 5.1664 - )) 5.1665 - FROM jsonb_array_elements("coord_array") AS "coord" 5.1666 - ) 5.1667 - )) 5.1668 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 5.1669 - ) 5.1670 - WHEN 'Polygon' THEN 5.1671 - ( SELECT ecluster_concat(array_agg( 5.1672 - ( SELECT ecluster_create_polygon(array_agg( 5.1673 - coords_to_epoint( 5.1674 - ("coord"->>0)::float8, 5.1675 - ("coord"->>1)::float8, 5.1676 - $2 5.1677 - ) 5.1678 - )) 5.1679 - FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 5.1680 - ) 5.1681 - )) 5.1682 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 5.1683 - ) 5.1684 - WHEN 'MultiPolygon' THEN 5.1685 - ( SELECT ecluster_concat(array_agg( 5.1686 - ( SELECT ecluster_concat(array_agg( 5.1687 - ( SELECT ecluster_create_polygon(array_agg( 5.1688 - coords_to_epoint( 5.1689 - ("coord"->>0)::float8, 5.1690 - ("coord"->>1)::float8, 5.1691 - $2 5.1692 - ) 5.1693 - )) 5.1694 - FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 5.1695 - ) 5.1696 - )) 5.1697 - FROM jsonb_array_elements("coord_array_array") AS "coord_array" 5.1698 - ) 5.1699 - )) 5.1700 - FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array" 5.1701 - ) 5.1702 - WHEN 'GeometryCollection' THEN 5.1703 - ( SELECT ecluster_concat(array_agg( 5.1704 - GeoJSON_to_ecluster("geometry", $2) 5.1705 - )) 5.1706 - FROM jsonb_array_elements($1->'geometries') AS "geometry" 5.1707 - ) 5.1708 - WHEN 'Feature' THEN 5.1709 - GeoJSON_to_ecluster($1->'geometry', $2) 5.1710 - WHEN 'FeatureCollection' THEN 5.1711 - ( SELECT ecluster_concat(array_agg( 5.1712 - GeoJSON_to_ecluster("feature", $2) 5.1713 - )) 5.1714 - FROM jsonb_array_elements($1->'features') AS "feature" 5.1715 - ) 5.1716 - ELSE 5.1717 - NULL 5.1718 - END 5.1719 - $$; 5.1720 -
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/latlon--0.11.sql Thu Nov 09 23:28:32 2017 +0100 6.3 @@ -0,0 +1,1717 @@ 6.4 + 6.5 +---------------------------------------- 6.6 +-- forward declarations (shell types) -- 6.7 +---------------------------------------- 6.8 + 6.9 +CREATE TYPE ekey_point; 6.10 +CREATE TYPE ekey_area; 6.11 +CREATE TYPE epoint; 6.12 +CREATE TYPE epoint_with_sample_count; 6.13 +CREATE TYPE ebox; 6.14 +CREATE TYPE ecircle; 6.15 +CREATE TYPE ecluster; 6.16 + 6.17 + 6.18 +------------------------------------------------------------ 6.19 +-- dummy input/output functions for dummy index key types -- 6.20 +------------------------------------------------------------ 6.21 + 6.22 +CREATE FUNCTION ekey_point_in_dummy(cstring) 6.23 + RETURNS ekey_point 6.24 + LANGUAGE C IMMUTABLE STRICT 6.25 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 6.26 + 6.27 +CREATE FUNCTION ekey_point_out_dummy(ekey_point) 6.28 + RETURNS cstring 6.29 + LANGUAGE C IMMUTABLE STRICT 6.30 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 6.31 + 6.32 +CREATE FUNCTION ekey_area_in_dummy(cstring) 6.33 + RETURNS ekey_area 6.34 + LANGUAGE C IMMUTABLE STRICT 6.35 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 6.36 + 6.37 +CREATE FUNCTION ekey_area_out_dummy(ekey_area) 6.38 + RETURNS cstring 6.39 + LANGUAGE C IMMUTABLE STRICT 6.40 + AS '$libdir/latlon-v0009', 'pgl_notimpl'; 6.41 + 6.42 + 6.43 +-------------------------- 6.44 +-- text input functions -- 6.45 +-------------------------- 6.46 + 6.47 +CREATE FUNCTION epoint_in(cstring) 6.48 + RETURNS epoint 6.49 + LANGUAGE C IMMUTABLE STRICT 6.50 + AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 6.51 + 6.52 +CREATE FUNCTION epoint_with_sample_count_in(cstring) 6.53 + RETURNS epoint_with_sample_count 6.54 + LANGUAGE C IMMUTABLE STRICT 6.55 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 6.56 + 6.57 +CREATE FUNCTION ebox_in(cstring) 6.58 + RETURNS ebox 6.59 + LANGUAGE C IMMUTABLE STRICT 6.60 + AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 6.61 + 6.62 +CREATE FUNCTION ecircle_in(cstring) 6.63 + RETURNS ecircle 6.64 + LANGUAGE C IMMUTABLE STRICT 6.65 + AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 6.66 + 6.67 +CREATE FUNCTION ecluster_in(cstring) 6.68 + RETURNS ecluster 6.69 + LANGUAGE C IMMUTABLE STRICT 6.70 + AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 6.71 + 6.72 + 6.73 +--------------------------- 6.74 +-- text output functions -- 6.75 +--------------------------- 6.76 + 6.77 +CREATE FUNCTION epoint_out(epoint) 6.78 + RETURNS cstring 6.79 + LANGUAGE C IMMUTABLE STRICT 6.80 + AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 6.81 + 6.82 +CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 6.83 + RETURNS cstring 6.84 + LANGUAGE C IMMUTABLE STRICT 6.85 + AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 6.86 + 6.87 +CREATE FUNCTION ebox_out(ebox) 6.88 + RETURNS cstring 6.89 + LANGUAGE C IMMUTABLE STRICT 6.90 + AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 6.91 + 6.92 +CREATE FUNCTION ecircle_out(ecircle) 6.93 + RETURNS cstring 6.94 + LANGUAGE C IMMUTABLE STRICT 6.95 + AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 6.96 + 6.97 +CREATE FUNCTION ecluster_out(ecluster) 6.98 + RETURNS cstring 6.99 + LANGUAGE C IMMUTABLE STRICT 6.100 + AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 6.101 + 6.102 + 6.103 +-------------------------- 6.104 +-- binary I/O functions -- 6.105 +-------------------------- 6.106 + 6.107 +CREATE FUNCTION epoint_recv(internal) 6.108 + RETURNS epoint 6.109 + LANGUAGE C IMMUTABLE STRICT 6.110 + AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 6.111 + 6.112 +CREATE FUNCTION ebox_recv(internal) 6.113 + RETURNS ebox 6.114 + LANGUAGE C IMMUTABLE STRICT 6.115 + AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 6.116 + 6.117 +CREATE FUNCTION ecircle_recv(internal) 6.118 + RETURNS ecircle 6.119 + LANGUAGE C IMMUTABLE STRICT 6.120 + AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 6.121 + 6.122 +CREATE FUNCTION epoint_send(epoint) 6.123 + RETURNS bytea 6.124 + LANGUAGE C IMMUTABLE STRICT 6.125 + AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 6.126 + 6.127 +CREATE FUNCTION ebox_send(ebox) 6.128 + RETURNS bytea 6.129 + LANGUAGE C IMMUTABLE STRICT 6.130 + AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 6.131 + 6.132 +CREATE FUNCTION ecircle_send(ecircle) 6.133 + RETURNS bytea 6.134 + LANGUAGE C IMMUTABLE STRICT 6.135 + AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 6.136 + 6.137 + 6.138 +----------------------------------------------- 6.139 +-- type definitions of dummy index key types -- 6.140 +----------------------------------------------- 6.141 + 6.142 +CREATE TYPE ekey_point ( 6.143 + internallength = 8, 6.144 + input = ekey_point_in_dummy, 6.145 + output = ekey_point_out_dummy, 6.146 + alignment = char ); 6.147 + 6.148 +CREATE TYPE ekey_area ( 6.149 + internallength = 9, 6.150 + input = ekey_area_in_dummy, 6.151 + output = ekey_area_out_dummy, 6.152 + alignment = char ); 6.153 + 6.154 + 6.155 +------------------------------------------ 6.156 +-- definitions of geographic data types -- 6.157 +------------------------------------------ 6.158 + 6.159 +CREATE TYPE epoint ( 6.160 + internallength = 16, 6.161 + input = epoint_in, 6.162 + output = epoint_out, 6.163 + receive = epoint_recv, 6.164 + send = epoint_send, 6.165 + alignment = double ); 6.166 + 6.167 +CREATE TYPE epoint_with_sample_count ( 6.168 + internallength = 20, 6.169 + input = epoint_with_sample_count_in, 6.170 + output = epoint_with_sample_count_out, 6.171 + alignment = double ); 6.172 + 6.173 +CREATE TYPE ebox ( 6.174 + internallength = 32, 6.175 + input = ebox_in, 6.176 + output = ebox_out, 6.177 + receive = ebox_recv, 6.178 + send = ebox_send, 6.179 + alignment = double ); 6.180 + 6.181 +CREATE TYPE ecircle ( 6.182 + internallength = 24, 6.183 + input = ecircle_in, 6.184 + output = ecircle_out, 6.185 + receive = ecircle_recv, 6.186 + send = ecircle_send, 6.187 + alignment = double ); 6.188 + 6.189 +CREATE TYPE ecluster ( 6.190 + internallength = VARIABLE, 6.191 + input = ecluster_in, 6.192 + output = ecluster_out, 6.193 + alignment = double, 6.194 + storage = external ); 6.195 + 6.196 + 6.197 +-------------------- 6.198 +-- B-tree support -- 6.199 +-------------------- 6.200 + 6.201 +-- begin of B-tree support for epoint 6.202 + 6.203 +CREATE FUNCTION epoint_btree_lt(epoint, epoint) 6.204 + RETURNS boolean 6.205 + LANGUAGE C IMMUTABLE STRICT 6.206 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 6.207 + 6.208 +CREATE FUNCTION epoint_btree_le(epoint, epoint) 6.209 + RETURNS boolean 6.210 + LANGUAGE C IMMUTABLE STRICT 6.211 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 6.212 + 6.213 +CREATE FUNCTION epoint_btree_eq(epoint, epoint) 6.214 + RETURNS boolean 6.215 + LANGUAGE C IMMUTABLE STRICT 6.216 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 6.217 + 6.218 +CREATE FUNCTION epoint_btree_ne(epoint, epoint) 6.219 + RETURNS boolean 6.220 + LANGUAGE C IMMUTABLE STRICT 6.221 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 6.222 + 6.223 +CREATE FUNCTION epoint_btree_ge(epoint, epoint) 6.224 + RETURNS boolean 6.225 + LANGUAGE C IMMUTABLE STRICT 6.226 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 6.227 + 6.228 +CREATE FUNCTION epoint_btree_gt(epoint, epoint) 6.229 + RETURNS boolean 6.230 + LANGUAGE C IMMUTABLE STRICT 6.231 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 6.232 + 6.233 +CREATE OPERATOR <<< ( 6.234 + leftarg = epoint, 6.235 + rightarg = epoint, 6.236 + procedure = epoint_btree_lt, 6.237 + commutator = >>>, 6.238 + negator = >>>=, 6.239 + restrict = scalarltsel, 6.240 + join = scalarltjoinsel 6.241 +); 6.242 + 6.243 +CREATE OPERATOR <<<= ( 6.244 + leftarg = epoint, 6.245 + rightarg = epoint, 6.246 + procedure = epoint_btree_le, 6.247 + commutator = >>>=, 6.248 + negator = >>>, 6.249 + restrict = scalarltsel, 6.250 + join = scalarltjoinsel 6.251 +); 6.252 + 6.253 +CREATE OPERATOR = ( 6.254 + leftarg = epoint, 6.255 + rightarg = epoint, 6.256 + procedure = epoint_btree_eq, 6.257 + commutator = =, 6.258 + negator = <>, 6.259 + restrict = eqsel, 6.260 + join = eqjoinsel, 6.261 + merges 6.262 +); 6.263 + 6.264 +CREATE OPERATOR <> ( 6.265 + leftarg = epoint, 6.266 + rightarg = epoint, 6.267 + procedure = epoint_btree_eq, 6.268 + commutator = <>, 6.269 + negator = =, 6.270 + restrict = neqsel, 6.271 + join = neqjoinsel 6.272 +); 6.273 + 6.274 +CREATE OPERATOR >>>= ( 6.275 + leftarg = epoint, 6.276 + rightarg = epoint, 6.277 + procedure = epoint_btree_ge, 6.278 + commutator = <<<=, 6.279 + negator = <<<, 6.280 + restrict = scalargtsel, 6.281 + join = scalargtjoinsel 6.282 +); 6.283 + 6.284 +CREATE OPERATOR >>> ( 6.285 + leftarg = epoint, 6.286 + rightarg = epoint, 6.287 + procedure = epoint_btree_gt, 6.288 + commutator = <<<, 6.289 + negator = <<<=, 6.290 + restrict = scalargtsel, 6.291 + join = scalargtjoinsel 6.292 +); 6.293 + 6.294 +CREATE FUNCTION epoint_btree_cmp(epoint, epoint) 6.295 + RETURNS int4 6.296 + LANGUAGE C IMMUTABLE STRICT 6.297 + AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 6.298 + 6.299 +CREATE OPERATOR CLASS epoint_btree_ops 6.300 + DEFAULT FOR TYPE epoint USING btree AS 6.301 + OPERATOR 1 <<< , 6.302 + OPERATOR 2 <<<= , 6.303 + OPERATOR 3 = , 6.304 + OPERATOR 4 >>>= , 6.305 + OPERATOR 5 >>> , 6.306 + FUNCTION 1 epoint_btree_cmp(epoint, epoint); 6.307 + 6.308 +-- end of B-tree support for epoint 6.309 + 6.310 +-- begin of B-tree support for ebox 6.311 + 6.312 +CREATE FUNCTION ebox_btree_lt(ebox, ebox) 6.313 + RETURNS boolean 6.314 + LANGUAGE C IMMUTABLE STRICT 6.315 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 6.316 + 6.317 +CREATE FUNCTION ebox_btree_le(ebox, ebox) 6.318 + RETURNS boolean 6.319 + LANGUAGE C IMMUTABLE STRICT 6.320 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 6.321 + 6.322 +CREATE FUNCTION ebox_btree_eq(ebox, ebox) 6.323 + RETURNS boolean 6.324 + LANGUAGE C IMMUTABLE STRICT 6.325 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 6.326 + 6.327 +CREATE FUNCTION ebox_btree_ne(ebox, ebox) 6.328 + RETURNS boolean 6.329 + LANGUAGE C IMMUTABLE STRICT 6.330 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 6.331 + 6.332 +CREATE FUNCTION ebox_btree_ge(ebox, ebox) 6.333 + RETURNS boolean 6.334 + LANGUAGE C IMMUTABLE STRICT 6.335 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 6.336 + 6.337 +CREATE FUNCTION ebox_btree_gt(ebox, ebox) 6.338 + RETURNS boolean 6.339 + LANGUAGE C IMMUTABLE STRICT 6.340 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 6.341 + 6.342 +CREATE OPERATOR <<< ( 6.343 + leftarg = ebox, 6.344 + rightarg = ebox, 6.345 + procedure = ebox_btree_lt, 6.346 + commutator = >>>, 6.347 + negator = >>>=, 6.348 + restrict = scalarltsel, 6.349 + join = scalarltjoinsel 6.350 +); 6.351 + 6.352 +CREATE OPERATOR <<<= ( 6.353 + leftarg = ebox, 6.354 + rightarg = ebox, 6.355 + procedure = ebox_btree_le, 6.356 + commutator = >>>=, 6.357 + negator = >>>, 6.358 + restrict = scalarltsel, 6.359 + join = scalarltjoinsel 6.360 +); 6.361 + 6.362 +CREATE OPERATOR = ( 6.363 + leftarg = ebox, 6.364 + rightarg = ebox, 6.365 + procedure = ebox_btree_eq, 6.366 + commutator = =, 6.367 + negator = <>, 6.368 + restrict = eqsel, 6.369 + join = eqjoinsel, 6.370 + merges 6.371 +); 6.372 + 6.373 +CREATE OPERATOR <> ( 6.374 + leftarg = ebox, 6.375 + rightarg = ebox, 6.376 + procedure = ebox_btree_eq, 6.377 + commutator = <>, 6.378 + negator = =, 6.379 + restrict = neqsel, 6.380 + join = neqjoinsel 6.381 +); 6.382 + 6.383 +CREATE OPERATOR >>>= ( 6.384 + leftarg = ebox, 6.385 + rightarg = ebox, 6.386 + procedure = ebox_btree_ge, 6.387 + commutator = <<<=, 6.388 + negator = <<<, 6.389 + restrict = scalargtsel, 6.390 + join = scalargtjoinsel 6.391 +); 6.392 + 6.393 +CREATE OPERATOR >>> ( 6.394 + leftarg = ebox, 6.395 + rightarg = ebox, 6.396 + procedure = ebox_btree_gt, 6.397 + commutator = <<<, 6.398 + negator = <<<=, 6.399 + restrict = scalargtsel, 6.400 + join = scalargtjoinsel 6.401 +); 6.402 + 6.403 +CREATE FUNCTION ebox_btree_cmp(ebox, ebox) 6.404 + RETURNS int4 6.405 + LANGUAGE C IMMUTABLE STRICT 6.406 + AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 6.407 + 6.408 +CREATE OPERATOR CLASS ebox_btree_ops 6.409 + DEFAULT FOR TYPE ebox USING btree AS 6.410 + OPERATOR 1 <<< , 6.411 + OPERATOR 2 <<<= , 6.412 + OPERATOR 3 = , 6.413 + OPERATOR 4 >>>= , 6.414 + OPERATOR 5 >>> , 6.415 + FUNCTION 1 ebox_btree_cmp(ebox, ebox); 6.416 + 6.417 +-- end of B-tree support for ebox 6.418 + 6.419 +-- begin of B-tree support for ecircle 6.420 + 6.421 +CREATE FUNCTION ecircle_btree_lt(ecircle, ecircle) 6.422 + RETURNS boolean 6.423 + LANGUAGE C IMMUTABLE STRICT 6.424 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 6.425 + 6.426 +CREATE FUNCTION ecircle_btree_le(ecircle, ecircle) 6.427 + RETURNS boolean 6.428 + LANGUAGE C IMMUTABLE STRICT 6.429 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 6.430 + 6.431 +CREATE FUNCTION ecircle_btree_eq(ecircle, ecircle) 6.432 + RETURNS boolean 6.433 + LANGUAGE C IMMUTABLE STRICT 6.434 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 6.435 + 6.436 +CREATE FUNCTION ecircle_btree_ne(ecircle, ecircle) 6.437 + RETURNS boolean 6.438 + LANGUAGE C IMMUTABLE STRICT 6.439 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 6.440 + 6.441 +CREATE FUNCTION ecircle_btree_ge(ecircle, ecircle) 6.442 + RETURNS boolean 6.443 + LANGUAGE C IMMUTABLE STRICT 6.444 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 6.445 + 6.446 +CREATE FUNCTION ecircle_btree_gt(ecircle, ecircle) 6.447 + RETURNS boolean 6.448 + LANGUAGE C IMMUTABLE STRICT 6.449 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 6.450 + 6.451 +CREATE OPERATOR <<< ( 6.452 + leftarg = ecircle, 6.453 + rightarg = ecircle, 6.454 + procedure = ecircle_btree_lt, 6.455 + commutator = >>>, 6.456 + negator = >>>=, 6.457 + restrict = scalarltsel, 6.458 + join = scalarltjoinsel 6.459 +); 6.460 + 6.461 +CREATE OPERATOR <<<= ( 6.462 + leftarg = ecircle, 6.463 + rightarg = ecircle, 6.464 + procedure = ecircle_btree_le, 6.465 + commutator = >>>=, 6.466 + negator = >>>, 6.467 + restrict = scalarltsel, 6.468 + join = scalarltjoinsel 6.469 +); 6.470 + 6.471 +CREATE OPERATOR = ( 6.472 + leftarg = ecircle, 6.473 + rightarg = ecircle, 6.474 + procedure = ecircle_btree_eq, 6.475 + commutator = =, 6.476 + negator = <>, 6.477 + restrict = eqsel, 6.478 + join = eqjoinsel, 6.479 + merges 6.480 +); 6.481 + 6.482 +CREATE OPERATOR <> ( 6.483 + leftarg = ecircle, 6.484 + rightarg = ecircle, 6.485 + procedure = ecircle_btree_eq, 6.486 + commutator = <>, 6.487 + negator = =, 6.488 + restrict = neqsel, 6.489 + join = neqjoinsel 6.490 +); 6.491 + 6.492 +CREATE OPERATOR >>>= ( 6.493 + leftarg = ecircle, 6.494 + rightarg = ecircle, 6.495 + procedure = ecircle_btree_ge, 6.496 + commutator = <<<=, 6.497 + negator = <<<, 6.498 + restrict = scalargtsel, 6.499 + join = scalargtjoinsel 6.500 +); 6.501 + 6.502 +CREATE OPERATOR >>> ( 6.503 + leftarg = ecircle, 6.504 + rightarg = ecircle, 6.505 + procedure = ecircle_btree_gt, 6.506 + commutator = <<<, 6.507 + negator = <<<=, 6.508 + restrict = scalargtsel, 6.509 + join = scalargtjoinsel 6.510 +); 6.511 + 6.512 +CREATE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 6.513 + RETURNS int4 6.514 + LANGUAGE C IMMUTABLE STRICT 6.515 + AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 6.516 + 6.517 +CREATE OPERATOR CLASS ecircle_btree_ops 6.518 + DEFAULT FOR TYPE ecircle USING btree AS 6.519 + OPERATOR 1 <<< , 6.520 + OPERATOR 2 <<<= , 6.521 + OPERATOR 3 = , 6.522 + OPERATOR 4 >>>= , 6.523 + OPERATOR 5 >>> , 6.524 + FUNCTION 1 ecircle_btree_cmp(ecircle, ecircle); 6.525 + 6.526 +-- end of B-tree support for ecircle 6.527 + 6.528 + 6.529 +---------------- 6.530 +-- type casts -- 6.531 +---------------- 6.532 + 6.533 +CREATE FUNCTION cast_epoint_to_ebox(epoint) 6.534 + RETURNS ebox 6.535 + LANGUAGE C IMMUTABLE STRICT 6.536 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 6.537 + 6.538 +CREATE CAST (epoint AS ebox) WITH FUNCTION cast_epoint_to_ebox(epoint); 6.539 + 6.540 +CREATE FUNCTION cast_epoint_to_ecircle(epoint) 6.541 + RETURNS ecircle 6.542 + LANGUAGE C IMMUTABLE STRICT 6.543 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 6.544 + 6.545 +CREATE CAST (epoint AS ecircle) WITH FUNCTION cast_epoint_to_ecircle(epoint); 6.546 + 6.547 +CREATE FUNCTION cast_epoint_to_ecluster(epoint) 6.548 + RETURNS ecluster 6.549 + LANGUAGE C IMMUTABLE STRICT 6.550 + AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 6.551 + 6.552 +CREATE CAST (epoint AS ecluster) WITH FUNCTION cast_epoint_to_ecluster(epoint); 6.553 + 6.554 +CREATE FUNCTION cast_ebox_to_ecluster(ebox) 6.555 + RETURNS ecluster 6.556 + LANGUAGE C IMMUTABLE STRICT 6.557 + AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 6.558 + 6.559 +CREATE CAST (ebox AS ecluster) WITH FUNCTION cast_ebox_to_ecluster(ebox); 6.560 + 6.561 + 6.562 +--------------------------- 6.563 +-- constructor functions -- 6.564 +--------------------------- 6.565 + 6.566 +CREATE FUNCTION epoint(float8, float8) 6.567 + RETURNS epoint 6.568 + LANGUAGE C IMMUTABLE STRICT 6.569 + AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 6.570 + 6.571 +CREATE FUNCTION epoint_latlon(float8, float8) 6.572 + RETURNS epoint 6.573 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 6.574 + SELECT epoint($1, $2) 6.575 + $$; 6.576 + 6.577 +CREATE FUNCTION epoint_lonlat(float8, float8) 6.578 + RETURNS epoint 6.579 + LANGUAGE SQL IMMUTABLE STRICT AS $$ 6.580 + SELECT epoint($2, $1) 6.581 + $$; 6.582 + 6.583 +CREATE FUNCTION epoint_with_sample_count(epoint, int4) 6.584 + RETURNS epoint_with_sample_count 6.585 + LANGUAGE C IMMUTABLE STRICT 6.586 + AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 6.587 + 6.588 +CREATE FUNCTION empty_ebox() 6.589 + RETURNS ebox 6.590 + LANGUAGE C IMMUTABLE STRICT 6.591 + AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 6.592 + 6.593 +CREATE FUNCTION ebox(float8, float8, float8, float8) 6.594 + RETURNS ebox 6.595 + LANGUAGE C IMMUTABLE STRICT 6.596 + AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 6.597 + 6.598 +CREATE FUNCTION ebox(epoint, epoint) 6.599 + RETURNS ebox 6.600 + LANGUAGE C IMMUTABLE STRICT 6.601 + AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 6.602 + 6.603 +CREATE FUNCTION ecircle(float8, float8, float8) 6.604 + RETURNS ecircle 6.605 + LANGUAGE C IMMUTABLE STRICT 6.606 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 6.607 + 6.608 +CREATE FUNCTION ecircle(epoint, float8) 6.609 + RETURNS ecircle 6.610 + LANGUAGE C IMMUTABLE STRICT 6.611 + AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 6.612 + 6.613 +CREATE FUNCTION ecluster_concat(ecluster[]) 6.614 + RETURNS ecluster 6.615 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.616 + SELECT array_to_string($1, ' ')::ecluster 6.617 + $$; 6.618 + 6.619 +CREATE FUNCTION ecluster_concat(ecluster, ecluster) 6.620 + RETURNS ecluster 6.621 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.622 + SELECT ($1::text || ' ' || $2::text)::ecluster 6.623 + $$; 6.624 + 6.625 +CREATE FUNCTION ecluster_create_multipoint(epoint[]) 6.626 + RETURNS ecluster 6.627 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.628 + SELECT 6.629 + array_to_string(array_agg('point (' || unnest || ')'), ' ')::ecluster 6.630 + FROM unnest($1) 6.631 + $$; 6.632 + 6.633 +CREATE FUNCTION ecluster_create_path(epoint[]) 6.634 + RETURNS ecluster 6.635 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.636 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 6.637 + ('path (' || array_to_string($1, ' ') || ')')::ecluster 6.638 + END 6.639 + FROM array_to_string($1, ' ') AS "str" 6.640 + $$; 6.641 + 6.642 +CREATE FUNCTION ecluster_create_outline(epoint[]) 6.643 + RETURNS ecluster 6.644 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.645 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 6.646 + ('outline (' || array_to_string($1, ' ') || ')')::ecluster 6.647 + END 6.648 + FROM array_to_string($1, ' ') AS "str" 6.649 + $$; 6.650 + 6.651 +CREATE FUNCTION ecluster_create_polygon(epoint[]) 6.652 + RETURNS ecluster 6.653 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.654 + SELECT CASE WHEN "str" = '' THEN 'empty'::ecluster ELSE 6.655 + ('polygon (' || array_to_string($1, ' ') || ')')::ecluster 6.656 + END 6.657 + FROM array_to_string($1, ' ') AS "str" 6.658 + $$; 6.659 + 6.660 + 6.661 +---------------------- 6.662 +-- getter functions -- 6.663 +---------------------- 6.664 + 6.665 +CREATE FUNCTION latitude(epoint) 6.666 + RETURNS float8 6.667 + LANGUAGE C IMMUTABLE STRICT 6.668 + AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 6.669 + 6.670 +CREATE FUNCTION longitude(epoint) 6.671 + RETURNS float8 6.672 + LANGUAGE C IMMUTABLE STRICT 6.673 + AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 6.674 + 6.675 +CREATE FUNCTION min_latitude(ebox) 6.676 + RETURNS float8 6.677 + LANGUAGE C IMMUTABLE STRICT 6.678 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 6.679 + 6.680 +CREATE FUNCTION max_latitude(ebox) 6.681 + RETURNS float8 6.682 + LANGUAGE C IMMUTABLE STRICT 6.683 + AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 6.684 + 6.685 +CREATE FUNCTION min_longitude(ebox) 6.686 + RETURNS float8 6.687 + LANGUAGE C IMMUTABLE STRICT 6.688 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 6.689 + 6.690 +CREATE FUNCTION max_longitude(ebox) 6.691 + RETURNS float8 6.692 + LANGUAGE C IMMUTABLE STRICT 6.693 + AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 6.694 + 6.695 +CREATE FUNCTION center(ecircle) 6.696 + RETURNS epoint 6.697 + LANGUAGE C IMMUTABLE STRICT 6.698 + AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 6.699 + 6.700 +CREATE FUNCTION radius(ecircle) 6.701 + RETURNS float8 6.702 + LANGUAGE C IMMUTABLE STRICT 6.703 + AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 6.704 + 6.705 +CREATE FUNCTION ecluster_extract_points(ecluster) 6.706 + RETURNS SETOF epoint 6.707 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.708 + SELECT "match"[2]::epoint 6.709 + FROM regexp_matches($1::text, e'(^| )point \\(([^)]+)\\)', 'g') AS "match" 6.710 + $$; 6.711 + 6.712 +CREATE FUNCTION ecluster_extract_paths(ecluster) 6.713 + RETURNS SETOF epoint[] 6.714 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.715 + SELECT ( 6.716 + SELECT array_agg("m2"[1]::epoint) 6.717 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.718 + ) 6.719 + FROM regexp_matches($1::text, e'(^| )path \\(([^)]+)\\)', 'g') AS "m1" 6.720 + $$; 6.721 + 6.722 +CREATE FUNCTION ecluster_extract_outlines(ecluster) 6.723 + RETURNS SETOF epoint[] 6.724 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.725 + SELECT ( 6.726 + SELECT array_agg("m2"[1]::epoint) 6.727 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.728 + ) 6.729 + FROM regexp_matches($1::text, e'(^| )outline \\(([^)]+)\\)', 'g') AS "m1" 6.730 + $$; 6.731 + 6.732 +CREATE FUNCTION ecluster_extract_polygons(ecluster) 6.733 + RETURNS SETOF epoint[] 6.734 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.735 + SELECT ( 6.736 + SELECT array_agg("m2"[1]::epoint) 6.737 + FROM regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" 6.738 + ) 6.739 + FROM regexp_matches($1::text, e'(^| )polygon \\(([^)]+)\\)', 'g') AS "m1" 6.740 + $$; 6.741 + 6.742 + 6.743 +--------------- 6.744 +-- operators -- 6.745 +--------------- 6.746 + 6.747 +CREATE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 6.748 + RETURNS boolean 6.749 + LANGUAGE C IMMUTABLE STRICT 6.750 + AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 6.751 + 6.752 +CREATE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 6.753 + RETURNS boolean 6.754 + LANGUAGE C IMMUTABLE STRICT 6.755 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 6.756 + 6.757 +CREATE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 6.758 + RETURNS boolean 6.759 + LANGUAGE C IMMUTABLE STRICT 6.760 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 6.761 + 6.762 +CREATE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 6.763 + RETURNS boolean 6.764 + LANGUAGE C IMMUTABLE STRICT 6.765 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 6.766 + 6.767 +CREATE FUNCTION ebox_overlap_proc(ebox, ebox) 6.768 + RETURNS boolean 6.769 + LANGUAGE C IMMUTABLE STRICT 6.770 + AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 6.771 + 6.772 +CREATE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 6.773 + RETURNS boolean 6.774 + LANGUAGE C IMMUTABLE STRICT 6.775 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 6.776 + 6.777 +CREATE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 6.778 + RETURNS boolean 6.779 + LANGUAGE C IMMUTABLE STRICT 6.780 + AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 6.781 + 6.782 +CREATE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 6.783 + RETURNS boolean 6.784 + LANGUAGE C IMMUTABLE STRICT 6.785 + AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 6.786 + 6.787 +CREATE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 6.788 + RETURNS boolean 6.789 + LANGUAGE C IMMUTABLE STRICT 6.790 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 6.791 + 6.792 +CREATE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 6.793 + RETURNS boolean 6.794 + LANGUAGE C IMMUTABLE STRICT 6.795 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 6.796 + 6.797 +CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 6.798 + RETURNS boolean 6.799 + LANGUAGE C IMMUTABLE STRICT 6.800 + AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 6.801 + 6.802 +CREATE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 6.803 + RETURNS boolean 6.804 + LANGUAGE C IMMUTABLE STRICT 6.805 + AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 6.806 + 6.807 +CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 6.808 + RETURNS boolean 6.809 + LANGUAGE C IMMUTABLE STRICT 6.810 + AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 6.811 + 6.812 +CREATE FUNCTION epoint_distance_proc(epoint, epoint) 6.813 + RETURNS float8 6.814 + LANGUAGE C IMMUTABLE STRICT 6.815 + AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 6.816 + 6.817 +CREATE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 6.818 + RETURNS float8 6.819 + LANGUAGE C IMMUTABLE STRICT 6.820 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 6.821 + 6.822 +CREATE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 6.823 + RETURNS float8 6.824 + LANGUAGE C IMMUTABLE STRICT 6.825 + AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 6.826 + 6.827 +CREATE FUNCTION ecircle_distance_proc(ecircle, ecircle) 6.828 + RETURNS float8 6.829 + LANGUAGE C IMMUTABLE STRICT 6.830 + AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 6.831 + 6.832 +CREATE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 6.833 + RETURNS float8 6.834 + LANGUAGE C IMMUTABLE STRICT 6.835 + AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 6.836 + 6.837 +CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 6.838 + RETURNS float8 6.839 + LANGUAGE C IMMUTABLE STRICT 6.840 + AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 6.841 + 6.842 +CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 6.843 + RETURNS float8 6.844 + LANGUAGE C IMMUTABLE STRICT 6.845 + AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 6.846 + 6.847 +CREATE OPERATOR && ( 6.848 + leftarg = epoint, 6.849 + rightarg = ebox, 6.850 + procedure = epoint_ebox_overlap_proc, 6.851 + commutator = &&, 6.852 + restrict = areasel, 6.853 + join = areajoinsel 6.854 +); 6.855 + 6.856 +CREATE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) 6.857 + RETURNS boolean 6.858 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 6.859 + 6.860 +CREATE OPERATOR && ( 6.861 + leftarg = ebox, 6.862 + rightarg = epoint, 6.863 + procedure = epoint_ebox_overlap_commutator, 6.864 + commutator = &&, 6.865 + restrict = areasel, 6.866 + join = areajoinsel 6.867 +); 6.868 + 6.869 +CREATE OPERATOR && ( 6.870 + leftarg = epoint, 6.871 + rightarg = ecircle, 6.872 + procedure = epoint_ecircle_overlap_proc, 6.873 + commutator = &&, 6.874 + restrict = areasel, 6.875 + join = areajoinsel 6.876 +); 6.877 + 6.878 +CREATE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) 6.879 + RETURNS boolean 6.880 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 6.881 + 6.882 +CREATE OPERATOR && ( 6.883 + leftarg = ecircle, 6.884 + rightarg = epoint, 6.885 + procedure = epoint_ecircle_overlap_commutator, 6.886 + commutator = &&, 6.887 + restrict = areasel, 6.888 + join = areajoinsel 6.889 +); 6.890 + 6.891 +CREATE OPERATOR && ( 6.892 + leftarg = epoint, 6.893 + rightarg = ecluster, 6.894 + procedure = epoint_ecluster_overlap_proc, 6.895 + commutator = &&, 6.896 + restrict = areasel, 6.897 + join = areajoinsel 6.898 +); 6.899 + 6.900 +CREATE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) 6.901 + RETURNS boolean 6.902 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 6.903 + 6.904 +CREATE OPERATOR && ( 6.905 + leftarg = ecluster, 6.906 + rightarg = epoint, 6.907 + procedure = epoint_ecluster_overlap_commutator, 6.908 + commutator = &&, 6.909 + restrict = areasel, 6.910 + join = areajoinsel 6.911 +); 6.912 + 6.913 +CREATE OPERATOR && ( 6.914 + leftarg = ebox, 6.915 + rightarg = ebox, 6.916 + procedure = ebox_overlap_proc, 6.917 + commutator = &&, 6.918 + restrict = areasel, 6.919 + join = areajoinsel 6.920 +); 6.921 + 6.922 +CREATE OPERATOR && ( 6.923 + leftarg = ecircle, 6.924 + rightarg = ecircle, 6.925 + procedure = ecircle_overlap_proc, 6.926 + commutator = &&, 6.927 + restrict = areasel, 6.928 + join = areajoinsel 6.929 +); 6.930 + 6.931 +CREATE OPERATOR && ( 6.932 + leftarg = ecircle, 6.933 + rightarg = ecluster, 6.934 + procedure = ecircle_ecluster_overlap_proc, 6.935 + commutator = &&, 6.936 + restrict = areasel, 6.937 + join = areajoinsel 6.938 +); 6.939 + 6.940 +CREATE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) 6.941 + RETURNS boolean 6.942 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 && $1'; 6.943 + 6.944 +CREATE OPERATOR && ( 6.945 + leftarg = ecluster, 6.946 + rightarg = ecircle, 6.947 + procedure = ecircle_ecluster_overlap_commutator, 6.948 + commutator = &&, 6.949 + restrict = areasel, 6.950 + join = areajoinsel 6.951 +); 6.952 + 6.953 +CREATE OPERATOR && ( 6.954 + leftarg = ecluster, 6.955 + rightarg = ecluster, 6.956 + procedure = ecluster_overlap_proc, 6.957 + commutator = &&, 6.958 + restrict = areasel, 6.959 + join = areajoinsel 6.960 +); 6.961 + 6.962 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 6.963 + RETURNS boolean 6.964 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 6.965 + 6.966 +CREATE OPERATOR && ( 6.967 + leftarg = ebox, 6.968 + rightarg = ecircle, 6.969 + procedure = ebox_ecircle_overlap_castwrap, 6.970 + commutator = &&, 6.971 + restrict = areasel, 6.972 + join = areajoinsel 6.973 +); 6.974 + 6.975 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 6.976 + RETURNS boolean 6.977 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 6.978 + 6.979 +CREATE OPERATOR && ( 6.980 + leftarg = ecircle, 6.981 + rightarg = ebox, 6.982 + procedure = ebox_ecircle_overlap_castwrap, 6.983 + commutator = &&, 6.984 + restrict = areasel, 6.985 + join = areajoinsel 6.986 +); 6.987 + 6.988 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 6.989 + RETURNS boolean 6.990 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 6.991 + 6.992 +CREATE OPERATOR && ( 6.993 + leftarg = ebox, 6.994 + rightarg = ecluster, 6.995 + procedure = ebox_ecluster_overlap_castwrap, 6.996 + commutator = &&, 6.997 + restrict = areasel, 6.998 + join = areajoinsel 6.999 +); 6.1000 + 6.1001 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 6.1002 + RETURNS boolean 6.1003 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 6.1004 + 6.1005 +CREATE OPERATOR && ( 6.1006 + leftarg = ecluster, 6.1007 + rightarg = ebox, 6.1008 + procedure = ebox_ecluster_overlap_castwrap, 6.1009 + commutator = &&, 6.1010 + restrict = areasel, 6.1011 + join = areajoinsel 6.1012 +); 6.1013 + 6.1014 +CREATE OPERATOR &&+ ( 6.1015 + leftarg = epoint, 6.1016 + rightarg = ecluster, 6.1017 + procedure = epoint_ecluster_may_overlap_proc, 6.1018 + commutator = &&+, 6.1019 + restrict = areasel, 6.1020 + join = areajoinsel 6.1021 +); 6.1022 + 6.1023 +CREATE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) 6.1024 + RETURNS boolean 6.1025 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 6.1026 + 6.1027 +CREATE OPERATOR &&+ ( 6.1028 + leftarg = ecluster, 6.1029 + rightarg = epoint, 6.1030 + procedure = epoint_ecluster_may_overlap_commutator, 6.1031 + commutator = &&+, 6.1032 + restrict = areasel, 6.1033 + join = areajoinsel 6.1034 +); 6.1035 + 6.1036 +CREATE OPERATOR &&+ ( 6.1037 + leftarg = ebox, 6.1038 + rightarg = ecircle, 6.1039 + procedure = ebox_ecircle_may_overlap_proc, 6.1040 + commutator = &&+, 6.1041 + restrict = areasel, 6.1042 + join = areajoinsel 6.1043 +); 6.1044 + 6.1045 +CREATE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) 6.1046 + RETURNS boolean 6.1047 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 6.1048 + 6.1049 +CREATE OPERATOR &&+ ( 6.1050 + leftarg = ecircle, 6.1051 + rightarg = ebox, 6.1052 + procedure = ebox_ecircle_may_overlap_commutator, 6.1053 + commutator = &&+, 6.1054 + restrict = areasel, 6.1055 + join = areajoinsel 6.1056 +); 6.1057 + 6.1058 +CREATE OPERATOR &&+ ( 6.1059 + leftarg = ebox, 6.1060 + rightarg = ecluster, 6.1061 + procedure = ebox_ecluster_may_overlap_proc, 6.1062 + commutator = &&+, 6.1063 + restrict = areasel, 6.1064 + join = areajoinsel 6.1065 +); 6.1066 + 6.1067 +CREATE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) 6.1068 + RETURNS boolean 6.1069 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 6.1070 + 6.1071 +CREATE OPERATOR &&+ ( 6.1072 + leftarg = ecluster, 6.1073 + rightarg = ebox, 6.1074 + procedure = ebox_ecluster_may_overlap_commutator, 6.1075 + commutator = &&+, 6.1076 + restrict = areasel, 6.1077 + join = areajoinsel 6.1078 +); 6.1079 + 6.1080 +CREATE OPERATOR &&+ ( 6.1081 + leftarg = ecircle, 6.1082 + rightarg = ecluster, 6.1083 + procedure = ecircle_ecluster_may_overlap_proc, 6.1084 + commutator = &&+, 6.1085 + restrict = areasel, 6.1086 + join = areajoinsel 6.1087 +); 6.1088 + 6.1089 +CREATE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) 6.1090 + RETURNS boolean 6.1091 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 &&+ $1'; 6.1092 + 6.1093 +CREATE OPERATOR &&+ ( 6.1094 + leftarg = ecluster, 6.1095 + rightarg = ecircle, 6.1096 + procedure = ecircle_ecluster_may_overlap_commutator, 6.1097 + commutator = &&+, 6.1098 + restrict = areasel, 6.1099 + join = areajoinsel 6.1100 +); 6.1101 + 6.1102 +CREATE OPERATOR &&+ ( 6.1103 + leftarg = ecluster, 6.1104 + rightarg = ecluster, 6.1105 + procedure = ecluster_may_overlap_proc, 6.1106 + commutator = &&+, 6.1107 + restrict = areasel, 6.1108 + join = areajoinsel 6.1109 +); 6.1110 + 6.1111 +CREATE OPERATOR @> ( 6.1112 + leftarg = ebox, 6.1113 + rightarg = epoint, 6.1114 + procedure = epoint_ebox_overlap_commutator, 6.1115 + commutator = <@, 6.1116 + restrict = areasel, 6.1117 + join = areajoinsel 6.1118 +); 6.1119 + 6.1120 +CREATE OPERATOR <@ ( 6.1121 + leftarg = epoint, 6.1122 + rightarg = ebox, 6.1123 + procedure = epoint_ebox_overlap_proc, 6.1124 + commutator = @>, 6.1125 + restrict = areasel, 6.1126 + join = areajoinsel 6.1127 +); 6.1128 + 6.1129 +CREATE OPERATOR @> ( 6.1130 + leftarg = ecluster, 6.1131 + rightarg = epoint, 6.1132 + procedure = epoint_ecluster_overlap_commutator, 6.1133 + commutator = <@, 6.1134 + restrict = areasel, 6.1135 + join = areajoinsel 6.1136 +); 6.1137 + 6.1138 +CREATE OPERATOR <@ ( 6.1139 + leftarg = epoint, 6.1140 + rightarg = ecluster, 6.1141 + procedure = epoint_ecluster_overlap_proc, 6.1142 + commutator = <@, 6.1143 + restrict = areasel, 6.1144 + join = areajoinsel 6.1145 +); 6.1146 + 6.1147 +CREATE OPERATOR @> ( 6.1148 + leftarg = ecluster, 6.1149 + rightarg = ecluster, 6.1150 + procedure = ecluster_contains_proc, 6.1151 + commutator = <@, 6.1152 + restrict = areasel, 6.1153 + join = areajoinsel 6.1154 +); 6.1155 + 6.1156 +CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 6.1157 + RETURNS boolean 6.1158 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1'; 6.1159 + 6.1160 +CREATE OPERATOR <@ ( 6.1161 + leftarg = ecluster, 6.1162 + rightarg = ecluster, 6.1163 + procedure = ecluster_contains_commutator, 6.1164 + commutator = @>, 6.1165 + restrict = areasel, 6.1166 + join = areajoinsel 6.1167 +); 6.1168 + 6.1169 +CREATE FUNCTION ebox_contains_castwrap(ebox, ebox) 6.1170 + RETURNS boolean 6.1171 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2::ecluster'; 6.1172 + 6.1173 +CREATE OPERATOR @> ( 6.1174 + leftarg = ebox, 6.1175 + rightarg = ebox, 6.1176 + procedure = ebox_contains_castwrap, 6.1177 + commutator = <@, 6.1178 + restrict = areasel, 6.1179 + join = areajoinsel 6.1180 +); 6.1181 + 6.1182 +CREATE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) 6.1183 + RETURNS boolean 6.1184 + LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1::ecluster'; 6.1185 + 6.1186 +CREATE OPERATOR <@ ( 6.1187 + leftarg = ebox, 6.1188 + rightarg = ebox, 6.1189 + procedure = ebox_contains_swapped_castwrap, 6.1190 + commutator = @>, 6.1191 + restrict = areasel, 6.1192 + join = areajoinsel 6.1193 +); 6.1194 + 6.1195 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 6.1196 + RETURNS boolean 6.1197 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2'; 6.1198 + 6.1199 +CREATE OPERATOR @> ( 6.1200 + leftarg = ebox, 6.1201 + rightarg = ecluster, 6.1202 + procedure = ebox_ecluster_contains_castwrap, 6.1203 + commutator = <@, 6.1204 + restrict = areasel, 6.1205 + join = areajoinsel 6.1206 +); 6.1207 + 6.1208 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 6.1209 + RETURNS boolean 6.1210 + LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1'; 6.1211 + 6.1212 +CREATE OPERATOR <@ ( 6.1213 + leftarg = ecluster, 6.1214 + rightarg = ebox, 6.1215 + procedure = ebox_ecluster_contains_castwrap, 6.1216 + commutator = @>, 6.1217 + restrict = areasel, 6.1218 + join = areajoinsel 6.1219 +); 6.1220 + 6.1221 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 6.1222 + RETURNS boolean 6.1223 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster'; 6.1224 + 6.1225 +CREATE OPERATOR @> ( 6.1226 + leftarg = ecluster, 6.1227 + rightarg = ebox, 6.1228 + procedure = ecluster_ebox_contains_castwrap, 6.1229 + commutator = <@, 6.1230 + restrict = areasel, 6.1231 + join = areajoinsel 6.1232 +); 6.1233 + 6.1234 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 6.1235 + RETURNS boolean 6.1236 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster'; 6.1237 + 6.1238 +CREATE OPERATOR <@ ( 6.1239 + leftarg = ebox, 6.1240 + rightarg = ecluster, 6.1241 + procedure = ecluster_ebox_contains_castwrap, 6.1242 + commutator = @>, 6.1243 + restrict = areasel, 6.1244 + join = areajoinsel 6.1245 +); 6.1246 + 6.1247 +CREATE OPERATOR <-> ( 6.1248 + leftarg = epoint, 6.1249 + rightarg = epoint, 6.1250 + procedure = epoint_distance_proc, 6.1251 + commutator = <-> 6.1252 +); 6.1253 + 6.1254 +CREATE OPERATOR <-> ( 6.1255 + leftarg = epoint, 6.1256 + rightarg = ecircle, 6.1257 + procedure = epoint_ecircle_distance_proc, 6.1258 + commutator = <-> 6.1259 +); 6.1260 + 6.1261 +CREATE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) 6.1262 + RETURNS float8 6.1263 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 6.1264 + 6.1265 +CREATE OPERATOR <-> ( 6.1266 + leftarg = ecircle, 6.1267 + rightarg = epoint, 6.1268 + procedure = epoint_ecircle_distance_commutator, 6.1269 + commutator = <-> 6.1270 +); 6.1271 + 6.1272 +CREATE OPERATOR <-> ( 6.1273 + leftarg = epoint, 6.1274 + rightarg = ecluster, 6.1275 + procedure = epoint_ecluster_distance_proc, 6.1276 + commutator = <-> 6.1277 +); 6.1278 + 6.1279 +CREATE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) 6.1280 + RETURNS float8 6.1281 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 6.1282 + 6.1283 +CREATE OPERATOR <-> ( 6.1284 + leftarg = ecluster, 6.1285 + rightarg = epoint, 6.1286 + procedure = epoint_ecluster_distance_commutator, 6.1287 + commutator = <-> 6.1288 +); 6.1289 + 6.1290 +CREATE OPERATOR <-> ( 6.1291 + leftarg = ecircle, 6.1292 + rightarg = ecircle, 6.1293 + procedure = ecircle_distance_proc, 6.1294 + commutator = <-> 6.1295 +); 6.1296 + 6.1297 +CREATE OPERATOR <-> ( 6.1298 + leftarg = ecircle, 6.1299 + rightarg = ecluster, 6.1300 + procedure = ecircle_ecluster_distance_proc, 6.1301 + commutator = <-> 6.1302 +); 6.1303 + 6.1304 +CREATE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) 6.1305 + RETURNS float8 6.1306 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 <-> $1'; 6.1307 + 6.1308 +CREATE OPERATOR <-> ( 6.1309 + leftarg = ecluster, 6.1310 + rightarg = ecircle, 6.1311 + procedure = ecircle_ecluster_distance_commutator, 6.1312 + commutator = <-> 6.1313 +); 6.1314 + 6.1315 +CREATE OPERATOR <-> ( 6.1316 + leftarg = ecluster, 6.1317 + rightarg = ecluster, 6.1318 + procedure = ecluster_distance_proc, 6.1319 + commutator = <-> 6.1320 +); 6.1321 + 6.1322 +CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 6.1323 + RETURNS float8 6.1324 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 6.1325 + 6.1326 +CREATE OPERATOR <-> ( 6.1327 + leftarg = epoint, 6.1328 + rightarg = ebox, 6.1329 + procedure = epoint_ebox_distance_castwrap, 6.1330 + commutator = <-> 6.1331 +); 6.1332 + 6.1333 +CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 6.1334 + RETURNS float8 6.1335 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 6.1336 + 6.1337 +CREATE OPERATOR <-> ( 6.1338 + leftarg = ebox, 6.1339 + rightarg = epoint, 6.1340 + procedure = epoint_ebox_distance_castwrap, 6.1341 + commutator = <-> 6.1342 +); 6.1343 + 6.1344 +CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 6.1345 + RETURNS float8 6.1346 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster'; 6.1347 + 6.1348 +CREATE OPERATOR <-> ( 6.1349 + leftarg = ebox, 6.1350 + rightarg = ebox, 6.1351 + procedure = ebox_distance_castwrap, 6.1352 + commutator = <-> 6.1353 +); 6.1354 + 6.1355 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 6.1356 + RETURNS float8 6.1357 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 6.1358 + 6.1359 +CREATE OPERATOR <-> ( 6.1360 + leftarg = ebox, 6.1361 + rightarg = ecircle, 6.1362 + procedure = ebox_ecircle_distance_castwrap, 6.1363 + commutator = <-> 6.1364 +); 6.1365 + 6.1366 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 6.1367 + RETURNS float8 6.1368 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 6.1369 + 6.1370 +CREATE OPERATOR <-> ( 6.1371 + leftarg = ecircle, 6.1372 + rightarg = ebox, 6.1373 + procedure = ebox_ecircle_distance_castwrap, 6.1374 + commutator = <-> 6.1375 +); 6.1376 + 6.1377 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 6.1378 + RETURNS float8 6.1379 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 6.1380 + 6.1381 +CREATE OPERATOR <-> ( 6.1382 + leftarg = ebox, 6.1383 + rightarg = ecluster, 6.1384 + procedure = ebox_ecluster_distance_castwrap, 6.1385 + commutator = <-> 6.1386 +); 6.1387 + 6.1388 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 6.1389 + RETURNS float8 6.1390 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 6.1391 + 6.1392 +CREATE OPERATOR <-> ( 6.1393 + leftarg = ecluster, 6.1394 + rightarg = ebox, 6.1395 + procedure = ebox_ecluster_distance_castwrap, 6.1396 + commutator = <-> 6.1397 +); 6.1398 + 6.1399 +CREATE OPERATOR <=> ( 6.1400 + leftarg = ecluster, 6.1401 + rightarg = epoint_with_sample_count, 6.1402 + procedure = fair_distance_operator_proc 6.1403 +); 6.1404 + 6.1405 + 6.1406 +---------------- 6.1407 +-- GiST index -- 6.1408 +---------------- 6.1409 + 6.1410 +CREATE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 6.1411 + RETURNS boolean 6.1412 + LANGUAGE C STRICT 6.1413 + AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 6.1414 + 6.1415 +CREATE FUNCTION pgl_gist_union(internal, internal) 6.1416 + RETURNS internal 6.1417 + LANGUAGE C STRICT 6.1418 + AS '$libdir/latlon-v0009', 'pgl_gist_union'; 6.1419 + 6.1420 +CREATE FUNCTION pgl_gist_compress_epoint(internal) 6.1421 + RETURNS internal 6.1422 + LANGUAGE C STRICT 6.1423 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 6.1424 + 6.1425 +CREATE FUNCTION pgl_gist_compress_ecircle(internal) 6.1426 + RETURNS internal 6.1427 + LANGUAGE C STRICT 6.1428 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 6.1429 + 6.1430 +CREATE FUNCTION pgl_gist_compress_ecluster(internal) 6.1431 + RETURNS internal 6.1432 + LANGUAGE C STRICT 6.1433 + AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 6.1434 + 6.1435 +CREATE FUNCTION pgl_gist_decompress(internal) 6.1436 + RETURNS internal 6.1437 + LANGUAGE C STRICT 6.1438 + AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 6.1439 + 6.1440 +CREATE FUNCTION pgl_gist_penalty(internal, internal, internal) 6.1441 + RETURNS internal 6.1442 + LANGUAGE C STRICT 6.1443 + AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 6.1444 + 6.1445 +CREATE FUNCTION pgl_gist_picksplit(internal, internal) 6.1446 + RETURNS internal 6.1447 + LANGUAGE C STRICT 6.1448 + AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 6.1449 + 6.1450 +CREATE FUNCTION pgl_gist_same(internal, internal, internal) 6.1451 + RETURNS internal 6.1452 + LANGUAGE C STRICT 6.1453 + AS '$libdir/latlon-v0009', 'pgl_gist_same'; 6.1454 + 6.1455 +CREATE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 6.1456 + RETURNS internal 6.1457 + LANGUAGE C STRICT 6.1458 + AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 6.1459 + 6.1460 +CREATE OPERATOR CLASS epoint_ops 6.1461 + DEFAULT FOR TYPE epoint USING gist AS 6.1462 + OPERATOR 11 = , 6.1463 + OPERATOR 22 && (epoint, ebox), 6.1464 + OPERATOR 222 <@ (epoint, ebox), 6.1465 + OPERATOR 23 && (epoint, ecircle), 6.1466 + OPERATOR 24 && (epoint, ecluster), 6.1467 + OPERATOR 124 &&+ (epoint, ecluster), 6.1468 + OPERATOR 224 <@ (epoint, ecluster), 6.1469 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 6.1470 + OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 6.1471 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 6.1472 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 6.1473 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1474 + FUNCTION 2 pgl_gist_union(internal, internal), 6.1475 + FUNCTION 3 pgl_gist_compress_epoint(internal), 6.1476 + FUNCTION 4 pgl_gist_decompress(internal), 6.1477 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1478 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1479 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1480 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1481 + STORAGE ekey_point; 6.1482 + 6.1483 +CREATE OPERATOR CLASS ecircle_ops 6.1484 + DEFAULT FOR TYPE ecircle USING gist AS 6.1485 + OPERATOR 13 = , 6.1486 + OPERATOR 21 && (ecircle, epoint), 6.1487 + OPERATOR 22 && (ecircle, ebox), 6.1488 + OPERATOR 122 &&+ (ecircle, ebox), 6.1489 + OPERATOR 23 && (ecircle, ecircle), 6.1490 + OPERATOR 24 && (ecircle, ecluster), 6.1491 + OPERATOR 124 &&+ (ecircle, ecluster), 6.1492 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 6.1493 + OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 6.1494 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 6.1495 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 6.1496 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1497 + FUNCTION 2 pgl_gist_union(internal, internal), 6.1498 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 6.1499 + FUNCTION 4 pgl_gist_decompress(internal), 6.1500 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1501 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1502 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1503 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1504 + STORAGE ekey_area; 6.1505 + 6.1506 +CREATE OPERATOR CLASS ecluster_ops 6.1507 + DEFAULT FOR TYPE ecluster USING gist AS 6.1508 + OPERATOR 21 && (ecluster, epoint), 6.1509 + OPERATOR 121 &&+ (ecluster, epoint), 6.1510 + OPERATOR 221 @> (ecluster, epoint), 6.1511 + OPERATOR 22 && (ecluster, ebox), 6.1512 + OPERATOR 122 &&+ (ecluster, ebox), 6.1513 + OPERATOR 222 @> (ecluster, ebox), 6.1514 + OPERATOR 322 <@ (ecluster, ebox), 6.1515 + OPERATOR 23 && (ecluster, ecircle), 6.1516 + OPERATOR 123 &&+ (ecluster, ecircle), 6.1517 + OPERATOR 24 && (ecluster, ecluster), 6.1518 + OPERATOR 124 &&+ (ecluster, ecluster), 6.1519 + OPERATOR 224 @> (ecluster, ecluster), 6.1520 + OPERATOR 324 <@ (ecluster, ecluster), 6.1521 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 6.1522 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 6.1523 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 6.1524 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 6.1525 + OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 6.1526 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 6.1527 + FUNCTION 2 pgl_gist_union(internal, internal), 6.1528 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 6.1529 + FUNCTION 4 pgl_gist_decompress(internal), 6.1530 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 6.1531 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 6.1532 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 6.1533 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 6.1534 + STORAGE ekey_area; 6.1535 + 6.1536 + 6.1537 +--------------------- 6.1538 +-- alias functions -- 6.1539 +--------------------- 6.1540 + 6.1541 +CREATE FUNCTION distance(epoint, epoint) 6.1542 + RETURNS float8 6.1543 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 6.1544 + 6.1545 +CREATE FUNCTION distance(ecluster, epoint) 6.1546 + RETURNS float8 6.1547 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2'; 6.1548 + 6.1549 +CREATE FUNCTION distance_within(epoint, epoint, float8) 6.1550 + RETURNS boolean 6.1551 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 6.1552 + 6.1553 +CREATE FUNCTION distance_within(ecluster, epoint, float8) 6.1554 + RETURNS boolean 6.1555 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && ecircle($2, $3)'; 6.1556 + 6.1557 +CREATE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 6.1558 + RETURNS float8 6.1559 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 6.1560 + 6.1561 + 6.1562 +-------------------------------- 6.1563 +-- other data storage formats -- 6.1564 +-------------------------------- 6.1565 + 6.1566 +CREATE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') 6.1567 + RETURNS epoint 6.1568 + LANGUAGE plpgsql IMMUTABLE STRICT AS $$ 6.1569 + DECLARE 6.1570 + "result" epoint; 6.1571 + BEGIN 6.1572 + IF $3 = 'epoint_lonlat' THEN 6.1573 + -- avoid dynamic command execution for better performance 6.1574 + RETURN epoint($2, $1); 6.1575 + END IF; 6.1576 + IF $3 = 'epoint' OR $3 = 'epoint_latlon' THEN 6.1577 + -- avoid dynamic command execution for better performance 6.1578 + RETURN epoint($1, $2); 6.1579 + END IF; 6.1580 + EXECUTE 'SELECT ' || $3 || '($1, $2)' INTO STRICT "result" USING $1, $2; 6.1581 + RETURN "result"; 6.1582 + END; 6.1583 + $$; 6.1584 + 6.1585 +CREATE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') 6.1586 + RETURNS SETOF jsonb 6.1587 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.1588 + SELECT "result" FROM 6.1589 + ( SELECT jsonb_array_length($1) - 1 ) AS "lastindex_row" ("lastindex") 6.1590 + CROSS JOIN LATERAL jsonb_array_elements( 6.1591 + CASE WHEN 6.1592 + coords_to_epoint( 6.1593 + ($1->0->>0)::float8, 6.1594 + ($1->0->>1)::float8, 6.1595 + $2 6.1596 + ) = coords_to_epoint( 6.1597 + ($1->"lastindex"->>0)::float8, 6.1598 + ($1->"lastindex"->>1)::float8, 6.1599 + $2 6.1600 + ) 6.1601 + THEN 6.1602 + $1 - "lastindex" 6.1603 + ELSE 6.1604 + $1 6.1605 + END 6.1606 + ) AS "result_row" ("result") 6.1607 + $$; 6.1608 + 6.1609 +CREATE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') 6.1610 + RETURNS epoint 6.1611 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.1612 + SELECT CASE 6.1613 + WHEN $1->>'type' = 'Point' THEN 6.1614 + coords_to_epoint( 6.1615 + ($1->'coordinates'->>0)::float8, 6.1616 + ($1->'coordinates'->>1)::float8, 6.1617 + $2 6.1618 + ) 6.1619 + WHEN $1->>'type' = 'Feature' THEN 6.1620 + GeoJSON_to_epoint($1->'geometry', $2) 6.1621 + ELSE 6.1622 + NULL 6.1623 + END 6.1624 + $$; 6.1625 + 6.1626 +CREATE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') 6.1627 + RETURNS ecluster 6.1628 + LANGUAGE sql IMMUTABLE STRICT AS $$ 6.1629 + SELECT CASE $1->>'type' 6.1630 + WHEN 'Point' THEN 6.1631 + coords_to_epoint( 6.1632 + ($1->'coordinates'->>0)::float8, 6.1633 + ($1->'coordinates'->>1)::float8, 6.1634 + $2 6.1635 + )::ecluster 6.1636 + WHEN 'MultiPoint' THEN 6.1637 + ( SELECT ecluster_create_multipoint(array_agg( 6.1638 + coords_to_epoint( 6.1639 + ("coord"->>0)::float8, 6.1640 + ("coord"->>1)::float8, 6.1641 + $2 6.1642 + ) 6.1643 + )) 6.1644 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 6.1645 + ) 6.1646 + WHEN 'LineString' THEN 6.1647 + ( SELECT ecluster_create_path(array_agg( 6.1648 + coords_to_epoint( 6.1649 + ("coord"->>0)::float8, 6.1650 + ("coord"->>1)::float8, 6.1651 + $2 6.1652 + ) 6.1653 + )) 6.1654 + FROM jsonb_array_elements($1->'coordinates') AS "coord" 6.1655 + ) 6.1656 + WHEN 'MultiLineString' THEN 6.1657 + ( SELECT ecluster_concat(array_agg( 6.1658 + ( SELECT ecluster_create_path(array_agg( 6.1659 + coords_to_epoint( 6.1660 + ("coord"->>0)::float8, 6.1661 + ("coord"->>1)::float8, 6.1662 + $2 6.1663 + ) 6.1664 + )) 6.1665 + FROM jsonb_array_elements("coord_array") AS "coord" 6.1666 + ) 6.1667 + )) 6.1668 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 6.1669 + ) 6.1670 + WHEN 'Polygon' THEN 6.1671 + ( SELECT ecluster_concat(array_agg( 6.1672 + ( SELECT ecluster_create_polygon(array_agg( 6.1673 + coords_to_epoint( 6.1674 + ("coord"->>0)::float8, 6.1675 + ("coord"->>1)::float8, 6.1676 + $2 6.1677 + ) 6.1678 + )) 6.1679 + FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 6.1680 + ) 6.1681 + )) 6.1682 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array" 6.1683 + ) 6.1684 + WHEN 'MultiPolygon' THEN 6.1685 + ( SELECT ecluster_concat(array_agg( 6.1686 + ( SELECT ecluster_concat(array_agg( 6.1687 + ( SELECT ecluster_create_polygon(array_agg( 6.1688 + coords_to_epoint( 6.1689 + ("coord"->>0)::float8, 6.1690 + ("coord"->>1)::float8, 6.1691 + $2 6.1692 + ) 6.1693 + )) 6.1694 + FROM GeoJSON_LinearRing_vertices("coord_array", $2) AS "coord" 6.1695 + ) 6.1696 + )) 6.1697 + FROM jsonb_array_elements("coord_array_array") AS "coord_array" 6.1698 + ) 6.1699 + )) 6.1700 + FROM jsonb_array_elements($1->'coordinates') AS "coord_array_array" 6.1701 + ) 6.1702 + WHEN 'GeometryCollection' THEN 6.1703 + ( SELECT ecluster_concat(array_agg( 6.1704 + GeoJSON_to_ecluster("geometry", $2) 6.1705 + )) 6.1706 + FROM jsonb_array_elements($1->'geometries') AS "geometry" 6.1707 + ) 6.1708 + WHEN 'Feature' THEN 6.1709 + GeoJSON_to_ecluster($1->'geometry', $2) 6.1710 + WHEN 'FeatureCollection' THEN 6.1711 + ( SELECT ecluster_concat(array_agg( 6.1712 + GeoJSON_to_ecluster("feature", $2) 6.1713 + )) 6.1714 + FROM jsonb_array_elements($1->'features') AS "feature" 6.1715 + ) 6.1716 + ELSE 6.1717 + NULL 6.1718 + END 6.1719 + $$; 6.1720 +
7.1 --- a/latlon--0.9--0.10.sql Thu Sep 28 02:17:53 2017 +0200 7.2 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 7.3 @@ -1,504 +0,0 @@ 7.4 - 7.5 -CREATE TYPE epoint_with_sample_count; 7.6 - 7.7 -CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) 7.8 - RETURNS ekey_point 7.9 - LANGUAGE C IMMUTABLE STRICT 7.10 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.11 - 7.12 -CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) 7.13 - RETURNS cstring 7.14 - LANGUAGE C IMMUTABLE STRICT 7.15 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.16 - 7.17 -CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) 7.18 - RETURNS ekey_area 7.19 - LANGUAGE C IMMUTABLE STRICT 7.20 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.21 - 7.22 -CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) 7.23 - RETURNS cstring 7.24 - LANGUAGE C IMMUTABLE STRICT 7.25 - AS '$libdir/latlon-v0009', 'pgl_notimpl'; 7.26 - 7.27 -CREATE OR REPLACE FUNCTION epoint_in(cstring) 7.28 - RETURNS epoint 7.29 - LANGUAGE C IMMUTABLE STRICT 7.30 - AS '$libdir/latlon-v0009', 'pgl_epoint_in'; 7.31 - 7.32 -CREATE FUNCTION epoint_with_sample_count_in(cstring) 7.33 - RETURNS epoint_with_sample_count 7.34 - LANGUAGE C IMMUTABLE STRICT 7.35 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_in'; 7.36 - 7.37 -CREATE OR REPLACE FUNCTION ebox_in(cstring) 7.38 - RETURNS ebox 7.39 - LANGUAGE C IMMUTABLE STRICT 7.40 - AS '$libdir/latlon-v0009', 'pgl_ebox_in'; 7.41 - 7.42 -CREATE OR REPLACE FUNCTION ecircle_in(cstring) 7.43 - RETURNS ecircle 7.44 - LANGUAGE C IMMUTABLE STRICT 7.45 - AS '$libdir/latlon-v0009', 'pgl_ecircle_in'; 7.46 - 7.47 -CREATE OR REPLACE FUNCTION ecluster_in(cstring) 7.48 - RETURNS ecluster 7.49 - LANGUAGE C IMMUTABLE STRICT 7.50 - AS '$libdir/latlon-v0009', 'pgl_ecluster_in'; 7.51 - 7.52 -CREATE OR REPLACE FUNCTION epoint_out(epoint) 7.53 - RETURNS cstring 7.54 - LANGUAGE C IMMUTABLE STRICT 7.55 - AS '$libdir/latlon-v0009', 'pgl_epoint_out'; 7.56 - 7.57 -CREATE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) 7.58 - RETURNS cstring 7.59 - LANGUAGE C IMMUTABLE STRICT 7.60 - AS '$libdir/latlon-v0009', 'pgl_epoint_with_sample_count_out'; 7.61 - 7.62 -CREATE OR REPLACE FUNCTION ebox_out(ebox) 7.63 - RETURNS cstring 7.64 - LANGUAGE C IMMUTABLE STRICT 7.65 - AS '$libdir/latlon-v0009', 'pgl_ebox_out'; 7.66 - 7.67 -CREATE OR REPLACE FUNCTION ecircle_out(ecircle) 7.68 - RETURNS cstring 7.69 - LANGUAGE C IMMUTABLE STRICT 7.70 - AS '$libdir/latlon-v0009', 'pgl_ecircle_out'; 7.71 - 7.72 -CREATE OR REPLACE FUNCTION ecluster_out(ecluster) 7.73 - RETURNS cstring 7.74 - LANGUAGE C IMMUTABLE STRICT 7.75 - AS '$libdir/latlon-v0009', 'pgl_ecluster_out'; 7.76 - 7.77 -CREATE OR REPLACE FUNCTION epoint_recv(internal) 7.78 - RETURNS epoint 7.79 - LANGUAGE C IMMUTABLE STRICT 7.80 - AS '$libdir/latlon-v0009', 'pgl_epoint_recv'; 7.81 - 7.82 -CREATE OR REPLACE FUNCTION ebox_recv(internal) 7.83 - RETURNS ebox 7.84 - LANGUAGE C IMMUTABLE STRICT 7.85 - AS '$libdir/latlon-v0009', 'pgl_ebox_recv'; 7.86 - 7.87 -CREATE OR REPLACE FUNCTION ecircle_recv(internal) 7.88 - RETURNS ecircle 7.89 - LANGUAGE C IMMUTABLE STRICT 7.90 - AS '$libdir/latlon-v0009', 'pgl_ecircle_recv'; 7.91 - 7.92 -CREATE OR REPLACE FUNCTION epoint_send(epoint) 7.93 - RETURNS bytea 7.94 - LANGUAGE C IMMUTABLE STRICT 7.95 - AS '$libdir/latlon-v0009', 'pgl_epoint_send'; 7.96 - 7.97 -CREATE OR REPLACE FUNCTION ebox_send(ebox) 7.98 - RETURNS bytea 7.99 - LANGUAGE C IMMUTABLE STRICT 7.100 - AS '$libdir/latlon-v0009', 'pgl_ebox_send'; 7.101 - 7.102 -CREATE OR REPLACE FUNCTION ecircle_send(ecircle) 7.103 - RETURNS bytea 7.104 - LANGUAGE C IMMUTABLE STRICT 7.105 - AS '$libdir/latlon-v0009', 'pgl_ecircle_send'; 7.106 - 7.107 -CREATE TYPE epoint_with_sample_count ( 7.108 - internallength = 20, 7.109 - input = epoint_with_sample_count_in, 7.110 - output = epoint_with_sample_count_out, 7.111 - alignment = double ); 7.112 - 7.113 -CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) 7.114 - RETURNS boolean 7.115 - LANGUAGE C IMMUTABLE STRICT 7.116 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_lt'; 7.117 - 7.118 -CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) 7.119 - RETURNS boolean 7.120 - LANGUAGE C IMMUTABLE STRICT 7.121 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_le'; 7.122 - 7.123 -CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) 7.124 - RETURNS boolean 7.125 - LANGUAGE C IMMUTABLE STRICT 7.126 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_eq'; 7.127 - 7.128 -CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) 7.129 - RETURNS boolean 7.130 - LANGUAGE C IMMUTABLE STRICT 7.131 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ne'; 7.132 - 7.133 -CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) 7.134 - RETURNS boolean 7.135 - LANGUAGE C IMMUTABLE STRICT 7.136 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_ge'; 7.137 - 7.138 -CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) 7.139 - RETURNS boolean 7.140 - LANGUAGE C IMMUTABLE STRICT 7.141 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_gt'; 7.142 - 7.143 -CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) 7.144 - RETURNS int4 7.145 - LANGUAGE C IMMUTABLE STRICT 7.146 - AS '$libdir/latlon-v0009', 'pgl_btree_epoint_cmp'; 7.147 - 7.148 -CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) 7.149 - RETURNS boolean 7.150 - LANGUAGE C IMMUTABLE STRICT 7.151 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_lt'; 7.152 - 7.153 -CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) 7.154 - RETURNS boolean 7.155 - LANGUAGE C IMMUTABLE STRICT 7.156 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_le'; 7.157 - 7.158 -CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) 7.159 - RETURNS boolean 7.160 - LANGUAGE C IMMUTABLE STRICT 7.161 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_eq'; 7.162 - 7.163 -CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) 7.164 - RETURNS boolean 7.165 - LANGUAGE C IMMUTABLE STRICT 7.166 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ne'; 7.167 - 7.168 -CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) 7.169 - RETURNS boolean 7.170 - LANGUAGE C IMMUTABLE STRICT 7.171 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_ge'; 7.172 - 7.173 -CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) 7.174 - RETURNS boolean 7.175 - LANGUAGE C IMMUTABLE STRICT 7.176 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_gt'; 7.177 - 7.178 -CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) 7.179 - RETURNS int4 7.180 - LANGUAGE C IMMUTABLE STRICT 7.181 - AS '$libdir/latlon-v0009', 'pgl_btree_ebox_cmp'; 7.182 - 7.183 -CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) 7.184 - RETURNS boolean 7.185 - LANGUAGE C IMMUTABLE STRICT 7.186 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_lt'; 7.187 - 7.188 -CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) 7.189 - RETURNS boolean 7.190 - LANGUAGE C IMMUTABLE STRICT 7.191 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_le'; 7.192 - 7.193 -CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) 7.194 - RETURNS boolean 7.195 - LANGUAGE C IMMUTABLE STRICT 7.196 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_eq'; 7.197 - 7.198 -CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) 7.199 - RETURNS boolean 7.200 - LANGUAGE C IMMUTABLE STRICT 7.201 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ne'; 7.202 - 7.203 -CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) 7.204 - RETURNS boolean 7.205 - LANGUAGE C IMMUTABLE STRICT 7.206 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_ge'; 7.207 - 7.208 -CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) 7.209 - RETURNS boolean 7.210 - LANGUAGE C IMMUTABLE STRICT 7.211 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_gt'; 7.212 - 7.213 -CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 7.214 - RETURNS int4 7.215 - LANGUAGE C IMMUTABLE STRICT 7.216 - AS '$libdir/latlon-v0009', 'pgl_btree_ecircle_cmp'; 7.217 - 7.218 -CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) 7.219 - RETURNS ebox 7.220 - LANGUAGE C IMMUTABLE STRICT 7.221 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ebox'; 7.222 - 7.223 -CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) 7.224 - RETURNS ecircle 7.225 - LANGUAGE C IMMUTABLE STRICT 7.226 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecircle'; 7.227 - 7.228 -CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) 7.229 - RETURNS ecluster 7.230 - LANGUAGE C IMMUTABLE STRICT 7.231 - AS '$libdir/latlon-v0009', 'pgl_epoint_to_ecluster'; 7.232 - 7.233 -CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) 7.234 - RETURNS ecluster 7.235 - LANGUAGE C IMMUTABLE STRICT 7.236 - AS '$libdir/latlon-v0009', 'pgl_ebox_to_ecluster'; 7.237 - 7.238 -CREATE OR REPLACE FUNCTION epoint(float8, float8) 7.239 - RETURNS epoint 7.240 - LANGUAGE C IMMUTABLE STRICT 7.241 - AS '$libdir/latlon-v0009', 'pgl_create_epoint'; 7.242 - 7.243 -CREATE FUNCTION epoint_with_sample_count(epoint, int4) 7.244 - RETURNS epoint_with_sample_count 7.245 - LANGUAGE C IMMUTABLE STRICT 7.246 - AS '$libdir/latlon-v0009', 'pgl_create_epoint_with_sample_count'; 7.247 - 7.248 -CREATE OR REPLACE FUNCTION empty_ebox() 7.249 - RETURNS ebox 7.250 - LANGUAGE C IMMUTABLE STRICT 7.251 - AS '$libdir/latlon-v0009', 'pgl_create_empty_ebox'; 7.252 - 7.253 -CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) 7.254 - RETURNS ebox 7.255 - LANGUAGE C IMMUTABLE STRICT 7.256 - AS '$libdir/latlon-v0009', 'pgl_create_ebox'; 7.257 - 7.258 -CREATE OR REPLACE FUNCTION ebox(epoint, epoint) 7.259 - RETURNS ebox 7.260 - LANGUAGE C IMMUTABLE STRICT 7.261 - AS '$libdir/latlon-v0009', 'pgl_create_ebox_from_epoints'; 7.262 - 7.263 -CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) 7.264 - RETURNS ecircle 7.265 - LANGUAGE C IMMUTABLE STRICT 7.266 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle'; 7.267 - 7.268 -CREATE OR REPLACE FUNCTION ecircle(epoint, float8) 7.269 - RETURNS ecircle 7.270 - LANGUAGE C IMMUTABLE STRICT 7.271 - AS '$libdir/latlon-v0009', 'pgl_create_ecircle_from_epoint'; 7.272 - 7.273 -CREATE OR REPLACE FUNCTION latitude(epoint) 7.274 - RETURNS float8 7.275 - LANGUAGE C IMMUTABLE STRICT 7.276 - AS '$libdir/latlon-v0009', 'pgl_epoint_lat'; 7.277 - 7.278 -CREATE OR REPLACE FUNCTION longitude(epoint) 7.279 - RETURNS float8 7.280 - LANGUAGE C IMMUTABLE STRICT 7.281 - AS '$libdir/latlon-v0009', 'pgl_epoint_lon'; 7.282 - 7.283 -CREATE OR REPLACE FUNCTION min_latitude(ebox) 7.284 - RETURNS float8 7.285 - LANGUAGE C IMMUTABLE STRICT 7.286 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_min'; 7.287 - 7.288 -CREATE OR REPLACE FUNCTION max_latitude(ebox) 7.289 - RETURNS float8 7.290 - LANGUAGE C IMMUTABLE STRICT 7.291 - AS '$libdir/latlon-v0009', 'pgl_ebox_lat_max'; 7.292 - 7.293 -CREATE OR REPLACE FUNCTION min_longitude(ebox) 7.294 - RETURNS float8 7.295 - LANGUAGE C IMMUTABLE STRICT 7.296 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_min'; 7.297 - 7.298 -CREATE OR REPLACE FUNCTION max_longitude(ebox) 7.299 - RETURNS float8 7.300 - LANGUAGE C IMMUTABLE STRICT 7.301 - AS '$libdir/latlon-v0009', 'pgl_ebox_lon_max'; 7.302 - 7.303 -CREATE OR REPLACE FUNCTION center(ecircle) 7.304 - RETURNS epoint 7.305 - LANGUAGE C IMMUTABLE STRICT 7.306 - AS '$libdir/latlon-v0009', 'pgl_ecircle_center'; 7.307 - 7.308 -CREATE OR REPLACE FUNCTION radius(ecircle) 7.309 - RETURNS float8 7.310 - LANGUAGE C IMMUTABLE STRICT 7.311 - AS '$libdir/latlon-v0009', 'pgl_ecircle_radius'; 7.312 - 7.313 -CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 7.314 - RETURNS boolean 7.315 - LANGUAGE C IMMUTABLE STRICT 7.316 - AS '$libdir/latlon-v0009', 'pgl_epoint_ebox_overlap'; 7.317 - 7.318 -CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 7.319 - RETURNS boolean 7.320 - LANGUAGE C IMMUTABLE STRICT 7.321 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_overlap'; 7.322 - 7.323 -CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 7.324 - RETURNS boolean 7.325 - LANGUAGE C IMMUTABLE STRICT 7.326 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_overlap'; 7.327 - 7.328 -CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 7.329 - RETURNS boolean 7.330 - LANGUAGE C IMMUTABLE STRICT 7.331 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_may_overlap'; 7.332 - 7.333 -CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) 7.334 - RETURNS boolean 7.335 - LANGUAGE C IMMUTABLE STRICT 7.336 - AS '$libdir/latlon-v0009', 'pgl_ebox_overlap'; 7.337 - 7.338 -CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 7.339 - RETURNS boolean 7.340 - LANGUAGE C IMMUTABLE STRICT 7.341 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecircle_may_overlap'; 7.342 - 7.343 -CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 7.344 - RETURNS boolean 7.345 - LANGUAGE C IMMUTABLE STRICT 7.346 - AS '$libdir/latlon-v0009', 'pgl_ebox_ecluster_may_overlap'; 7.347 - 7.348 -CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 7.349 - RETURNS boolean 7.350 - LANGUAGE C IMMUTABLE STRICT 7.351 - AS '$libdir/latlon-v0009', 'pgl_ecircle_overlap'; 7.352 - 7.353 -CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 7.354 - RETURNS boolean 7.355 - LANGUAGE C IMMUTABLE STRICT 7.356 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_overlap'; 7.357 - 7.358 -CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 7.359 - RETURNS boolean 7.360 - LANGUAGE C IMMUTABLE STRICT 7.361 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_may_overlap'; 7.362 - 7.363 -CREATE OR REPLACE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 7.364 - RETURNS boolean 7.365 - LANGUAGE C IMMUTABLE STRICT 7.366 - AS '$libdir/latlon-v0009', 'pgl_ecluster_overlap'; 7.367 - 7.368 -CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 7.369 - RETURNS boolean 7.370 - LANGUAGE C IMMUTABLE STRICT 7.371 - AS '$libdir/latlon-v0009', 'pgl_ecluster_may_overlap'; 7.372 - 7.373 -CREATE OR REPLACE FUNCTION ecluster_contains_proc(ecluster, ecluster) 7.374 - RETURNS boolean 7.375 - LANGUAGE C IMMUTABLE STRICT 7.376 - AS '$libdir/latlon-v0009', 'pgl_ecluster_contains'; 7.377 - 7.378 -CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) 7.379 - RETURNS float8 7.380 - LANGUAGE C IMMUTABLE STRICT 7.381 - AS '$libdir/latlon-v0009', 'pgl_epoint_distance'; 7.382 - 7.383 -CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 7.384 - RETURNS float8 7.385 - LANGUAGE C IMMUTABLE STRICT 7.386 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecircle_distance'; 7.387 - 7.388 -CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 7.389 - RETURNS float8 7.390 - LANGUAGE C IMMUTABLE STRICT 7.391 - AS '$libdir/latlon-v0009', 'pgl_epoint_ecluster_distance'; 7.392 - 7.393 -CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) 7.394 - RETURNS float8 7.395 - LANGUAGE C IMMUTABLE STRICT 7.396 - AS '$libdir/latlon-v0009', 'pgl_ecircle_distance'; 7.397 - 7.398 -CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 7.399 - RETURNS float8 7.400 - LANGUAGE C IMMUTABLE STRICT 7.401 - AS '$libdir/latlon-v0009', 'pgl_ecircle_ecluster_distance'; 7.402 - 7.403 -CREATE OR REPLACE FUNCTION ecluster_distance_proc(ecluster, ecluster) 7.404 - RETURNS float8 7.405 - LANGUAGE C IMMUTABLE STRICT 7.406 - AS '$libdir/latlon-v0009', 'pgl_ecluster_distance'; 7.407 - 7.408 -DROP FUNCTION monte_carlo_area(ecluster, int4); 7.409 - 7.410 -CREATE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) 7.411 - RETURNS float8 7.412 - LANGUAGE C IMMUTABLE STRICT 7.413 - AS '$libdir/latlon-v0009', 'pgl_ecluster_epoint_sc_fair_distance'; 7.414 - 7.415 -CREATE OPERATOR <=> ( 7.416 - leftarg = ecluster, 7.417 - rightarg = epoint_with_sample_count, 7.418 - procedure = fair_distance_operator_proc 7.419 -); 7.420 - 7.421 -CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 7.422 - RETURNS boolean 7.423 - LANGUAGE C STRICT 7.424 - AS '$libdir/latlon-v0009', 'pgl_gist_consistent'; 7.425 - 7.426 -CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) 7.427 - RETURNS internal 7.428 - LANGUAGE C STRICT 7.429 - AS '$libdir/latlon-v0009', 'pgl_gist_union'; 7.430 - 7.431 -CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) 7.432 - RETURNS internal 7.433 - LANGUAGE C STRICT 7.434 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_epoint'; 7.435 - 7.436 -CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) 7.437 - RETURNS internal 7.438 - LANGUAGE C STRICT 7.439 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecircle'; 7.440 - 7.441 -CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) 7.442 - RETURNS internal 7.443 - LANGUAGE C STRICT 7.444 - AS '$libdir/latlon-v0009', 'pgl_gist_compress_ecluster'; 7.445 - 7.446 -CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) 7.447 - RETURNS internal 7.448 - LANGUAGE C STRICT 7.449 - AS '$libdir/latlon-v0009', 'pgl_gist_decompress'; 7.450 - 7.451 -CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) 7.452 - RETURNS internal 7.453 - LANGUAGE C STRICT 7.454 - AS '$libdir/latlon-v0009', 'pgl_gist_penalty'; 7.455 - 7.456 -CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) 7.457 - RETURNS internal 7.458 - LANGUAGE C STRICT 7.459 - AS '$libdir/latlon-v0009', 'pgl_gist_picksplit'; 7.460 - 7.461 -CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) 7.462 - RETURNS internal 7.463 - LANGUAGE C STRICT 7.464 - AS '$libdir/latlon-v0009', 'pgl_gist_same'; 7.465 - 7.466 -CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 7.467 - RETURNS internal 7.468 - LANGUAGE C STRICT 7.469 - AS '$libdir/latlon-v0009', 'pgl_gist_distance'; 7.470 - 7.471 -DROP OPERATOR CLASS ecluster_ops USING gist; 7.472 - 7.473 -CREATE OPERATOR CLASS ecluster_ops 7.474 - DEFAULT FOR TYPE ecluster USING gist AS 7.475 - OPERATOR 21 && (ecluster, epoint), 7.476 - OPERATOR 121 &&+ (ecluster, epoint), 7.477 - OPERATOR 221 @> (ecluster, epoint), 7.478 - OPERATOR 22 && (ecluster, ebox), 7.479 - OPERATOR 122 &&+ (ecluster, ebox), 7.480 - OPERATOR 222 @> (ecluster, ebox), 7.481 - OPERATOR 322 <@ (ecluster, ebox), 7.482 - OPERATOR 23 && (ecluster, ecircle), 7.483 - OPERATOR 123 &&+ (ecluster, ecircle), 7.484 - OPERATOR 24 && (ecluster, ecluster), 7.485 - OPERATOR 124 &&+ (ecluster, ecluster), 7.486 - OPERATOR 224 @> (ecluster, ecluster), 7.487 - OPERATOR 324 <@ (ecluster, ecluster), 7.488 - OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 7.489 - OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 7.490 - OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 7.491 - OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 7.492 - OPERATOR 131 <=> (ecluster, epoint_with_sample_count) FOR ORDER BY float_ops, 7.493 - FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 7.494 - FUNCTION 2 pgl_gist_union(internal, internal), 7.495 - FUNCTION 3 pgl_gist_compress_ecluster(internal), 7.496 - FUNCTION 4 pgl_gist_decompress(internal), 7.497 - FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 7.498 - FUNCTION 6 pgl_gist_picksplit(internal, internal), 7.499 - FUNCTION 7 pgl_gist_same(internal, internal, internal), 7.500 - FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 7.501 - STORAGE ekey_area; 7.502 - 7.503 -CREATE OR REPLACE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) 7.504 - RETURNS float8 7.505 - LANGUAGE sql IMMUTABLE AS 'SELECT $1 <=> epoint_with_sample_count($2, $3)'; 7.506 - 7.507 -
8.1 --- a/latlon-v0009.c Thu Sep 28 02:17:53 2017 +0200 8.2 +++ b/latlon-v0009.c Thu Nov 09 23:28:32 2017 +0100 8.3 @@ -9,6 +9,7 @@ 8.4 #include "access/gist.h" 8.5 #include "access/stratnum.h" 8.6 #include "utils/array.h" 8.7 +#include <limits.h> 8.8 #include <math.h> 8.9 8.10 #ifdef PG_MODULE_MAGIC