pgLatLon
diff latlon--0.3--0.4.sql @ 16:e319679cefbd
Added more operators for clusters (including polygons); Bugfix regarding missing entries in ecluster_ops operator class (index was not used for nearest-neighbor searches)
author | jbe |
---|---|
date | Fri Sep 09 19:22:30 2016 +0200 (2016-09-09) |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/latlon--0.3--0.4.sql Fri Sep 09 19:22:30 2016 +0200 1.3 @@ -0,0 +1,767 @@ 1.4 + 1.5 +CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) 1.6 + RETURNS ekey_point 1.7 + LANGUAGE C IMMUTABLE STRICT 1.8 + AS '$libdir/latlon-v0004', 'pgl_notimpl'; 1.9 + 1.10 +CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) 1.11 + RETURNS cstring 1.12 + LANGUAGE C IMMUTABLE STRICT 1.13 + AS '$libdir/latlon-v0004', 'pgl_notimpl'; 1.14 + 1.15 +CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) 1.16 + RETURNS ekey_area 1.17 + LANGUAGE C IMMUTABLE STRICT 1.18 + AS '$libdir/latlon-v0004', 'pgl_notimpl'; 1.19 + 1.20 +CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) 1.21 + RETURNS cstring 1.22 + LANGUAGE C IMMUTABLE STRICT 1.23 + AS '$libdir/latlon-v0004', 'pgl_notimpl'; 1.24 + 1.25 +CREATE OR REPLACE FUNCTION epoint_in(cstring) 1.26 + RETURNS epoint 1.27 + LANGUAGE C IMMUTABLE STRICT 1.28 + AS '$libdir/latlon-v0004', 'pgl_epoint_in'; 1.29 + 1.30 +CREATE OR REPLACE FUNCTION ebox_in(cstring) 1.31 + RETURNS ebox 1.32 + LANGUAGE C IMMUTABLE STRICT 1.33 + AS '$libdir/latlon-v0004', 'pgl_ebox_in'; 1.34 + 1.35 +CREATE OR REPLACE FUNCTION ecircle_in(cstring) 1.36 + RETURNS ecircle 1.37 + LANGUAGE C IMMUTABLE STRICT 1.38 + AS '$libdir/latlon-v0004', 'pgl_ecircle_in'; 1.39 + 1.40 +CREATE OR REPLACE FUNCTION ecluster_in(cstring) 1.41 + RETURNS ecluster 1.42 + LANGUAGE C IMMUTABLE STRICT 1.43 + AS '$libdir/latlon-v0004', 'pgl_ecluster_in'; 1.44 + 1.45 +CREATE OR REPLACE FUNCTION epoint_out(epoint) 1.46 + RETURNS cstring 1.47 + LANGUAGE C IMMUTABLE STRICT 1.48 + AS '$libdir/latlon-v0004', 'pgl_epoint_out'; 1.49 + 1.50 +CREATE OR REPLACE FUNCTION ebox_out(ebox) 1.51 + RETURNS cstring 1.52 + LANGUAGE C IMMUTABLE STRICT 1.53 + AS '$libdir/latlon-v0004', 'pgl_ebox_out'; 1.54 + 1.55 +CREATE OR REPLACE FUNCTION ecircle_out(ecircle) 1.56 + RETURNS cstring 1.57 + LANGUAGE C IMMUTABLE STRICT 1.58 + AS '$libdir/latlon-v0004', 'pgl_ecircle_out'; 1.59 + 1.60 +CREATE OR REPLACE FUNCTION ecluster_out(ecluster) 1.61 + RETURNS cstring 1.62 + LANGUAGE C IMMUTABLE STRICT 1.63 + AS '$libdir/latlon-v0004', 'pgl_ecluster_out'; 1.64 + 1.65 +CREATE OR REPLACE FUNCTION epoint_recv(internal) 1.66 + RETURNS epoint 1.67 + LANGUAGE C IMMUTABLE STRICT 1.68 + AS '$libdir/latlon-v0004', 'pgl_epoint_recv'; 1.69 + 1.70 +CREATE OR REPLACE FUNCTION ebox_recv(internal) 1.71 + RETURNS ebox 1.72 + LANGUAGE C IMMUTABLE STRICT 1.73 + AS '$libdir/latlon-v0004', 'pgl_ebox_recv'; 1.74 + 1.75 +CREATE OR REPLACE FUNCTION ecircle_recv(internal) 1.76 + RETURNS ecircle 1.77 + LANGUAGE C IMMUTABLE STRICT 1.78 + AS '$libdir/latlon-v0004', 'pgl_ecircle_recv'; 1.79 + 1.80 +CREATE OR REPLACE FUNCTION epoint_send(epoint) 1.81 + RETURNS bytea 1.82 + LANGUAGE C IMMUTABLE STRICT 1.83 + AS '$libdir/latlon-v0004', 'pgl_epoint_send'; 1.84 + 1.85 +CREATE OR REPLACE FUNCTION ebox_send(ebox) 1.86 + RETURNS bytea 1.87 + LANGUAGE C IMMUTABLE STRICT 1.88 + AS '$libdir/latlon-v0004', 'pgl_ebox_send'; 1.89 + 1.90 +CREATE OR REPLACE FUNCTION ecircle_send(ecircle) 1.91 + RETURNS bytea 1.92 + LANGUAGE C IMMUTABLE STRICT 1.93 + AS '$libdir/latlon-v0004', 'pgl_ecircle_send'; 1.94 + 1.95 +CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) 1.96 + RETURNS boolean 1.97 + LANGUAGE C IMMUTABLE STRICT 1.98 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_lt'; 1.99 + 1.100 +CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) 1.101 + RETURNS boolean 1.102 + LANGUAGE C IMMUTABLE STRICT 1.103 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_le'; 1.104 + 1.105 +CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) 1.106 + RETURNS boolean 1.107 + LANGUAGE C IMMUTABLE STRICT 1.108 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_eq'; 1.109 + 1.110 +CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) 1.111 + RETURNS boolean 1.112 + LANGUAGE C IMMUTABLE STRICT 1.113 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_ne'; 1.114 + 1.115 +CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) 1.116 + RETURNS boolean 1.117 + LANGUAGE C IMMUTABLE STRICT 1.118 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_ge'; 1.119 + 1.120 +CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) 1.121 + RETURNS boolean 1.122 + LANGUAGE C IMMUTABLE STRICT 1.123 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_gt'; 1.124 + 1.125 +CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) 1.126 + RETURNS int4 1.127 + LANGUAGE C IMMUTABLE STRICT 1.128 + AS '$libdir/latlon-v0004', 'pgl_btree_epoint_cmp'; 1.129 + 1.130 +CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) 1.131 + RETURNS boolean 1.132 + LANGUAGE C IMMUTABLE STRICT 1.133 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_lt'; 1.134 + 1.135 +CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) 1.136 + RETURNS boolean 1.137 + LANGUAGE C IMMUTABLE STRICT 1.138 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_le'; 1.139 + 1.140 +CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) 1.141 + RETURNS boolean 1.142 + LANGUAGE C IMMUTABLE STRICT 1.143 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_eq'; 1.144 + 1.145 +CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) 1.146 + RETURNS boolean 1.147 + LANGUAGE C IMMUTABLE STRICT 1.148 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_ne'; 1.149 + 1.150 +CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) 1.151 + RETURNS boolean 1.152 + LANGUAGE C IMMUTABLE STRICT 1.153 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_ge'; 1.154 + 1.155 +CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) 1.156 + RETURNS boolean 1.157 + LANGUAGE C IMMUTABLE STRICT 1.158 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_gt'; 1.159 + 1.160 +CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) 1.161 + RETURNS int4 1.162 + LANGUAGE C IMMUTABLE STRICT 1.163 + AS '$libdir/latlon-v0004', 'pgl_btree_ebox_cmp'; 1.164 + 1.165 +CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) 1.166 + RETURNS boolean 1.167 + LANGUAGE C IMMUTABLE STRICT 1.168 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_lt'; 1.169 + 1.170 +CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) 1.171 + RETURNS boolean 1.172 + LANGUAGE C IMMUTABLE STRICT 1.173 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_le'; 1.174 + 1.175 +CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) 1.176 + RETURNS boolean 1.177 + LANGUAGE C IMMUTABLE STRICT 1.178 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_eq'; 1.179 + 1.180 +CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) 1.181 + RETURNS boolean 1.182 + LANGUAGE C IMMUTABLE STRICT 1.183 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_ne'; 1.184 + 1.185 +CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) 1.186 + RETURNS boolean 1.187 + LANGUAGE C IMMUTABLE STRICT 1.188 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_ge'; 1.189 + 1.190 +CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) 1.191 + RETURNS boolean 1.192 + LANGUAGE C IMMUTABLE STRICT 1.193 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_gt'; 1.194 + 1.195 +CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) 1.196 + RETURNS int4 1.197 + LANGUAGE C IMMUTABLE STRICT 1.198 + AS '$libdir/latlon-v0004', 'pgl_btree_ecircle_cmp'; 1.199 + 1.200 +CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) 1.201 + RETURNS ebox 1.202 + LANGUAGE C IMMUTABLE STRICT 1.203 + AS '$libdir/latlon-v0004', 'pgl_epoint_to_ebox'; 1.204 + 1.205 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) 1.206 + RETURNS ecircle 1.207 + LANGUAGE C IMMUTABLE STRICT 1.208 + AS '$libdir/latlon-v0004', 'pgl_epoint_to_ecircle'; 1.209 + 1.210 +CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) 1.211 + RETURNS ecluster 1.212 + LANGUAGE C IMMUTABLE STRICT 1.213 + AS '$libdir/latlon-v0004', 'pgl_epoint_to_ecluster'; 1.214 + 1.215 +CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) 1.216 + RETURNS ecluster 1.217 + LANGUAGE C IMMUTABLE STRICT 1.218 + AS '$libdir/latlon-v0004', 'pgl_ebox_to_ecluster'; 1.219 + 1.220 +CREATE OR REPLACE FUNCTION epoint(float8, float8) 1.221 + RETURNS epoint 1.222 + LANGUAGE C IMMUTABLE STRICT 1.223 + AS '$libdir/latlon-v0004', 'pgl_create_epoint'; 1.224 + 1.225 +CREATE OR REPLACE FUNCTION empty_ebox() 1.226 + RETURNS ebox 1.227 + LANGUAGE C IMMUTABLE STRICT 1.228 + AS '$libdir/latlon-v0004', 'pgl_create_empty_ebox'; 1.229 + 1.230 +CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) 1.231 + RETURNS ebox 1.232 + LANGUAGE C IMMUTABLE STRICT 1.233 + AS '$libdir/latlon-v0004', 'pgl_create_ebox'; 1.234 + 1.235 +CREATE OR REPLACE FUNCTION ebox(epoint, epoint) 1.236 + RETURNS ebox 1.237 + LANGUAGE C IMMUTABLE STRICT 1.238 + AS '$libdir/latlon-v0004', 'pgl_create_ebox_from_epoints'; 1.239 + 1.240 +CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) 1.241 + RETURNS ecircle 1.242 + LANGUAGE C IMMUTABLE STRICT 1.243 + AS '$libdir/latlon-v0004', 'pgl_create_ecircle'; 1.244 + 1.245 +CREATE OR REPLACE FUNCTION ecircle(epoint, float8) 1.246 + RETURNS ecircle 1.247 + LANGUAGE C IMMUTABLE STRICT 1.248 + AS '$libdir/latlon-v0004', 'pgl_create_ecircle_from_epoint'; 1.249 + 1.250 +CREATE OR REPLACE FUNCTION latitude(epoint) 1.251 + RETURNS float8 1.252 + LANGUAGE C IMMUTABLE STRICT 1.253 + AS '$libdir/latlon-v0004', 'pgl_epoint_lat'; 1.254 + 1.255 +CREATE OR REPLACE FUNCTION longitude(epoint) 1.256 + RETURNS float8 1.257 + LANGUAGE C IMMUTABLE STRICT 1.258 + AS '$libdir/latlon-v0004', 'pgl_epoint_lon'; 1.259 + 1.260 +CREATE OR REPLACE FUNCTION min_latitude(ebox) 1.261 + RETURNS float8 1.262 + LANGUAGE C IMMUTABLE STRICT 1.263 + AS '$libdir/latlon-v0004', 'pgl_ebox_lat_min'; 1.264 + 1.265 +CREATE OR REPLACE FUNCTION max_latitude(ebox) 1.266 + RETURNS float8 1.267 + LANGUAGE C IMMUTABLE STRICT 1.268 + AS '$libdir/latlon-v0004', 'pgl_ebox_lat_max'; 1.269 + 1.270 +CREATE OR REPLACE FUNCTION min_longitude(ebox) 1.271 + RETURNS float8 1.272 + LANGUAGE C IMMUTABLE STRICT 1.273 + AS '$libdir/latlon-v0004', 'pgl_ebox_lon_min'; 1.274 + 1.275 +CREATE OR REPLACE FUNCTION max_longitude(ebox) 1.276 + RETURNS float8 1.277 + LANGUAGE C IMMUTABLE STRICT 1.278 + AS '$libdir/latlon-v0004', 'pgl_ebox_lon_max'; 1.279 + 1.280 +CREATE OR REPLACE FUNCTION center(ecircle) 1.281 + RETURNS epoint 1.282 + LANGUAGE C IMMUTABLE STRICT 1.283 + AS '$libdir/latlon-v0004', 'pgl_ecircle_center'; 1.284 + 1.285 +CREATE OR REPLACE FUNCTION radius(ecircle) 1.286 + RETURNS float8 1.287 + LANGUAGE C IMMUTABLE STRICT 1.288 + AS '$libdir/latlon-v0004', 'pgl_ecircle_radius'; 1.289 + 1.290 +CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) 1.291 + RETURNS boolean 1.292 + LANGUAGE C IMMUTABLE STRICT 1.293 + AS '$libdir/latlon-v0004', 'pgl_epoint_ebox_overlap'; 1.294 + 1.295 +CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) 1.296 + RETURNS boolean 1.297 + LANGUAGE C IMMUTABLE STRICT 1.298 + AS '$libdir/latlon-v0004', 'pgl_epoint_ecircle_overlap'; 1.299 + 1.300 +CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) 1.301 + RETURNS boolean 1.302 + LANGUAGE C IMMUTABLE STRICT 1.303 + AS '$libdir/latlon-v0004', 'pgl_epoint_ecluster_overlap'; 1.304 + 1.305 +CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) 1.306 + RETURNS boolean 1.307 + LANGUAGE C IMMUTABLE STRICT 1.308 + AS '$libdir/latlon-v0004', 'pgl_epoint_ecluster_may_overlap'; 1.309 + 1.310 +CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) 1.311 + RETURNS boolean 1.312 + LANGUAGE C IMMUTABLE STRICT 1.313 + AS '$libdir/latlon-v0004', 'pgl_ebox_overlap'; 1.314 + 1.315 +CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) 1.316 + RETURNS boolean 1.317 + LANGUAGE C IMMUTABLE STRICT 1.318 + AS '$libdir/latlon-v0004', 'pgl_ebox_ecircle_may_overlap'; 1.319 + 1.320 +CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) 1.321 + RETURNS boolean 1.322 + LANGUAGE C IMMUTABLE STRICT 1.323 + AS '$libdir/latlon-v0004', 'pgl_ebox_ecluster_may_overlap'; 1.324 + 1.325 +CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) 1.326 + RETURNS boolean 1.327 + LANGUAGE C IMMUTABLE STRICT 1.328 + AS '$libdir/latlon-v0004', 'pgl_ecircle_overlap'; 1.329 + 1.330 +CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) 1.331 + RETURNS boolean 1.332 + LANGUAGE C IMMUTABLE STRICT 1.333 + AS '$libdir/latlon-v0004', 'pgl_ecircle_ecluster_overlap'; 1.334 + 1.335 +CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) 1.336 + RETURNS boolean 1.337 + LANGUAGE C IMMUTABLE STRICT 1.338 + AS '$libdir/latlon-v0004', 'pgl_ecircle_ecluster_may_overlap'; 1.339 + 1.340 +CREATE FUNCTION ecluster_overlap_proc(ecluster, ecluster) 1.341 + RETURNS boolean 1.342 + LANGUAGE C IMMUTABLE STRICT 1.343 + AS '$libdir/latlon-v0004', 'pgl_ecluster_overlap'; 1.344 + 1.345 +CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) 1.346 + RETURNS boolean 1.347 + LANGUAGE C IMMUTABLE STRICT 1.348 + AS '$libdir/latlon-v0004', 'pgl_ecluster_may_overlap'; 1.349 + 1.350 +CREATE FUNCTION ecluster_contains_proc(ecluster, ecluster) 1.351 + RETURNS boolean 1.352 + LANGUAGE C IMMUTABLE STRICT 1.353 + AS '$libdir/latlon-v0004', 'pgl_ecluster_contains'; 1.354 + 1.355 +CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) 1.356 + RETURNS float8 1.357 + LANGUAGE C IMMUTABLE STRICT 1.358 + AS '$libdir/latlon-v0004', 'pgl_epoint_distance'; 1.359 + 1.360 +CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) 1.361 + RETURNS float8 1.362 + LANGUAGE C IMMUTABLE STRICT 1.363 + AS '$libdir/latlon-v0004', 'pgl_epoint_ecircle_distance'; 1.364 + 1.365 +CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) 1.366 + RETURNS float8 1.367 + LANGUAGE C IMMUTABLE STRICT 1.368 + AS '$libdir/latlon-v0004', 'pgl_epoint_ecluster_distance'; 1.369 + 1.370 +CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) 1.371 + RETURNS float8 1.372 + LANGUAGE C IMMUTABLE STRICT 1.373 + AS '$libdir/latlon-v0004', 'pgl_ecircle_distance'; 1.374 + 1.375 +CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) 1.376 + RETURNS float8 1.377 + LANGUAGE C IMMUTABLE STRICT 1.378 + AS '$libdir/latlon-v0004', 'pgl_ecircle_ecluster_distance'; 1.379 + 1.380 +CREATE FUNCTION ecluster_distance_proc(ecluster, ecluster) 1.381 + RETURNS float8 1.382 + LANGUAGE C IMMUTABLE STRICT 1.383 + AS '$libdir/latlon-v0004', 'pgl_ecluster_distance'; 1.384 + 1.385 +CREATE OPERATOR && ( 1.386 + leftarg = ecluster, 1.387 + rightarg = ecluster, 1.388 + procedure = ecluster_overlap_proc, 1.389 + commutator = &&, 1.390 + restrict = areasel, 1.391 + join = areajoinsel 1.392 +); 1.393 + 1.394 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) 1.395 + RETURNS boolean 1.396 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 1.397 + 1.398 +CREATE OPERATOR && ( 1.399 + leftarg = ebox, 1.400 + rightarg = ecircle, 1.401 + procedure = ebox_ecircle_overlap_castwrap, 1.402 + commutator = &&, 1.403 + restrict = areasel, 1.404 + join = areajoinsel 1.405 +); 1.406 + 1.407 +CREATE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) 1.408 + RETURNS boolean 1.409 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 1.410 + 1.411 +CREATE OPERATOR && ( 1.412 + leftarg = ecircle, 1.413 + rightarg = ebox, 1.414 + procedure = ebox_ecircle_overlap_castwrap, 1.415 + commutator = &&, 1.416 + restrict = areasel, 1.417 + join = areajoinsel 1.418 +); 1.419 + 1.420 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) 1.421 + RETURNS boolean 1.422 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster && $2'; 1.423 + 1.424 +CREATE OPERATOR && ( 1.425 + leftarg = ebox, 1.426 + rightarg = ecluster, 1.427 + procedure = ebox_ecluster_overlap_castwrap, 1.428 + commutator = &&, 1.429 + restrict = areasel, 1.430 + join = areajoinsel 1.431 +); 1.432 + 1.433 +CREATE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) 1.434 + RETURNS boolean 1.435 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 && $2::ecluster'; 1.436 + 1.437 +CREATE OPERATOR && ( 1.438 + leftarg = ecluster, 1.439 + rightarg = ebox, 1.440 + procedure = ebox_ecluster_overlap_castwrap, 1.441 + commutator = &&, 1.442 + restrict = areasel, 1.443 + join = areajoinsel 1.444 +); 1.445 + 1.446 + 1.447 +CREATE OPERATOR @> ( 1.448 + leftarg = ebox, 1.449 + rightarg = epoint, 1.450 + procedure = epoint_ebox_overlap_commutator, 1.451 + commutator = <@, 1.452 + restrict = areasel, 1.453 + join = areajoinsel 1.454 +); 1.455 + 1.456 +CREATE OPERATOR <@ ( 1.457 + leftarg = epoint, 1.458 + rightarg = ebox, 1.459 + procedure = epoint_ebox_overlap_proc, 1.460 + commutator = @>, 1.461 + restrict = areasel, 1.462 + join = areajoinsel 1.463 +); 1.464 + 1.465 +CREATE OPERATOR @> ( 1.466 + leftarg = ecluster, 1.467 + rightarg = epoint, 1.468 + procedure = epoint_ecluster_overlap_commutator, 1.469 + commutator = <@, 1.470 + restrict = areasel, 1.471 + join = areajoinsel 1.472 +); 1.473 + 1.474 +CREATE OPERATOR <@ ( 1.475 + leftarg = epoint, 1.476 + rightarg = ecluster, 1.477 + procedure = epoint_ecluster_overlap_proc, 1.478 + commutator = <@, 1.479 + restrict = areasel, 1.480 + join = areajoinsel 1.481 +); 1.482 + 1.483 +CREATE OPERATOR @> ( 1.484 + leftarg = ecluster, 1.485 + rightarg = ecluster, 1.486 + procedure = ecluster_contains_proc, 1.487 + commutator = <@, 1.488 + restrict = areasel, 1.489 + join = areajoinsel 1.490 +); 1.491 + 1.492 +CREATE FUNCTION ecluster_contains_commutator(ecluster, ecluster) 1.493 + RETURNS boolean 1.494 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1'; 1.495 + 1.496 +CREATE OPERATOR <@ ( 1.497 + leftarg = ecluster, 1.498 + rightarg = ecluster, 1.499 + procedure = ecluster_contains_commutator, 1.500 + commutator = @>, 1.501 + restrict = areasel, 1.502 + join = areajoinsel 1.503 +); 1.504 + 1.505 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) 1.506 + RETURNS boolean 1.507 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster @> $2'; 1.508 + 1.509 +CREATE OPERATOR @> ( 1.510 + leftarg = ebox, 1.511 + rightarg = ecluster, 1.512 + procedure = ebox_ecluster_contains_castwrap, 1.513 + commutator = <@, 1.514 + restrict = areasel, 1.515 + join = areajoinsel 1.516 +); 1.517 + 1.518 +CREATE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) 1.519 + RETURNS boolean 1.520 + LANGUAGE sql IMMUTABLE AS 'SELECT $2::ecluster @> $1'; 1.521 + 1.522 +CREATE OPERATOR <@ ( 1.523 + leftarg = ecluster, 1.524 + rightarg = ebox, 1.525 + procedure = ebox_ecluster_contains_castwrap, 1.526 + commutator = @>, 1.527 + restrict = areasel, 1.528 + join = areajoinsel 1.529 +); 1.530 + 1.531 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) 1.532 + RETURNS boolean 1.533 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 @> $2::ecluster'; 1.534 + 1.535 +CREATE OPERATOR @> ( 1.536 + leftarg = ecluster, 1.537 + rightarg = ebox, 1.538 + procedure = ecluster_ebox_contains_castwrap, 1.539 + commutator = <@, 1.540 + restrict = areasel, 1.541 + join = areajoinsel 1.542 +); 1.543 + 1.544 +CREATE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) 1.545 + RETURNS boolean 1.546 + LANGUAGE sql IMMUTABLE AS 'SELECT $2 @> $1::ecluster'; 1.547 + 1.548 +CREATE OPERATOR <@ ( 1.549 + leftarg = ebox, 1.550 + rightarg = ecluster, 1.551 + procedure = ecluster_ebox_contains_castwrap, 1.552 + commutator = @>, 1.553 + restrict = areasel, 1.554 + join = areajoinsel 1.555 +); 1.556 + 1.557 + 1.558 +CREATE OPERATOR <-> ( 1.559 + leftarg = ecluster, 1.560 + rightarg = ecluster, 1.561 + procedure = ecluster_distance_proc, 1.562 + commutator = <-> 1.563 +); 1.564 + 1.565 +CREATE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) 1.566 + RETURNS float8 1.567 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 1.568 + 1.569 +CREATE OPERATOR <-> ( 1.570 + leftarg = epoint, 1.571 + rightarg = ebox, 1.572 + procedure = epoint_ebox_distance_castwrap, 1.573 + commutator = <-> 1.574 +); 1.575 + 1.576 +CREATE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) 1.577 + RETURNS float8 1.578 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 1.579 + 1.580 +CREATE OPERATOR <-> ( 1.581 + leftarg = ebox, 1.582 + rightarg = epoint, 1.583 + procedure = epoint_ebox_distance_castwrap, 1.584 + commutator = <-> 1.585 +); 1.586 + 1.587 +CREATE FUNCTION ebox_distance_castwrap(ebox, ebox) 1.588 + RETURNS float8 1.589 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2::ecluster'; 1.590 + 1.591 +CREATE OPERATOR <-> ( 1.592 + leftarg = ebox, 1.593 + rightarg = ebox, 1.594 + procedure = ebox_distance_castwrap, 1.595 + commutator = <-> 1.596 +); 1.597 + 1.598 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) 1.599 + RETURNS float8 1.600 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 1.601 + 1.602 +CREATE OPERATOR <-> ( 1.603 + leftarg = ebox, 1.604 + rightarg = ecircle, 1.605 + procedure = ebox_ecircle_distance_castwrap, 1.606 + commutator = <-> 1.607 +); 1.608 + 1.609 +CREATE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) 1.610 + RETURNS float8 1.611 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 1.612 + 1.613 +CREATE OPERATOR <-> ( 1.614 + leftarg = ecircle, 1.615 + rightarg = ebox, 1.616 + procedure = ebox_ecircle_distance_castwrap, 1.617 + commutator = <-> 1.618 +); 1.619 + 1.620 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) 1.621 + RETURNS float8 1.622 + LANGUAGE sql IMMUTABLE AS 'SELECT $1::ecluster <-> $2'; 1.623 + 1.624 +CREATE OPERATOR <-> ( 1.625 + leftarg = ebox, 1.626 + rightarg = ecluster, 1.627 + procedure = ebox_ecluster_distance_castwrap, 1.628 + commutator = <-> 1.629 +); 1.630 + 1.631 +CREATE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) 1.632 + RETURNS float8 1.633 + LANGUAGE sql IMMUTABLE AS 'SELECT $1 <-> $2::ecluster'; 1.634 + 1.635 +CREATE OPERATOR <-> ( 1.636 + leftarg = ecluster, 1.637 + rightarg = ebox, 1.638 + procedure = ebox_ecluster_distance_castwrap, 1.639 + commutator = <-> 1.640 +); 1.641 + 1.642 +DROP OPERATOR CLASS epoint_ops USING gist; 1.643 +DROP OPERATOR CLASS ecircle_ops USING gist; 1.644 +DROP OPERATOR CLASS ecluster_ops USING gist; 1.645 + 1.646 +CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) 1.647 + RETURNS boolean 1.648 + LANGUAGE C STRICT 1.649 + AS '$libdir/latlon-v0004', 'pgl_gist_consistent'; 1.650 + 1.651 +CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) 1.652 + RETURNS internal 1.653 + LANGUAGE C STRICT 1.654 + AS '$libdir/latlon-v0004', 'pgl_gist_union'; 1.655 + 1.656 +CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) 1.657 + RETURNS internal 1.658 + LANGUAGE C STRICT 1.659 + AS '$libdir/latlon-v0004', 'pgl_gist_compress_epoint'; 1.660 + 1.661 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) 1.662 + RETURNS internal 1.663 + LANGUAGE C STRICT 1.664 + AS '$libdir/latlon-v0004', 'pgl_gist_compress_ecircle'; 1.665 + 1.666 +CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) 1.667 + RETURNS internal 1.668 + LANGUAGE C STRICT 1.669 + AS '$libdir/latlon-v0004', 'pgl_gist_compress_ecluster'; 1.670 + 1.671 +CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) 1.672 + RETURNS internal 1.673 + LANGUAGE C STRICT 1.674 + AS '$libdir/latlon-v0004', 'pgl_gist_decompress'; 1.675 + 1.676 +CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) 1.677 + RETURNS internal 1.678 + LANGUAGE C STRICT 1.679 + AS '$libdir/latlon-v0004', 'pgl_gist_penalty'; 1.680 + 1.681 +CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) 1.682 + RETURNS internal 1.683 + LANGUAGE C STRICT 1.684 + AS '$libdir/latlon-v0004', 'pgl_gist_picksplit'; 1.685 + 1.686 +CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) 1.687 + RETURNS internal 1.688 + LANGUAGE C STRICT 1.689 + AS '$libdir/latlon-v0004', 'pgl_gist_same'; 1.690 + 1.691 +CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) 1.692 + RETURNS internal 1.693 + LANGUAGE C STRICT 1.694 + AS '$libdir/latlon-v0004', 'pgl_gist_distance'; 1.695 + 1.696 +CREATE OPERATOR CLASS epoint_ops 1.697 + DEFAULT FOR TYPE epoint USING gist AS 1.698 + OPERATOR 11 = , 1.699 + OPERATOR 22 && (epoint, ebox), 1.700 + OPERATOR 222 <@ (epoint, ebox), 1.701 + OPERATOR 23 && (epoint, ecircle), 1.702 + OPERATOR 24 && (epoint, ecluster), 1.703 + OPERATOR 124 &&+ (epoint, ecluster), 1.704 + OPERATOR 224 <@ (epoint, ecluster), 1.705 + OPERATOR 31 <-> (epoint, epoint) FOR ORDER BY float_ops, 1.706 + OPERATOR 32 <-> (epoint, ebox) FOR ORDER BY float_ops, 1.707 + OPERATOR 33 <-> (epoint, ecircle) FOR ORDER BY float_ops, 1.708 + OPERATOR 34 <-> (epoint, ecluster) FOR ORDER BY float_ops, 1.709 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.710 + FUNCTION 2 pgl_gist_union(internal, internal), 1.711 + FUNCTION 3 pgl_gist_compress_epoint(internal), 1.712 + FUNCTION 4 pgl_gist_decompress(internal), 1.713 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.714 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.715 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.716 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.717 + STORAGE ekey_point; 1.718 + 1.719 +CREATE OPERATOR CLASS ecircle_ops 1.720 + DEFAULT FOR TYPE ecircle USING gist AS 1.721 + OPERATOR 13 = , 1.722 + OPERATOR 21 && (ecircle, epoint), 1.723 + OPERATOR 22 && (ecircle, ebox), 1.724 + OPERATOR 122 &&+ (ecircle, ebox), 1.725 + OPERATOR 23 && (ecircle, ecircle), 1.726 + OPERATOR 24 && (ecircle, ecluster), 1.727 + OPERATOR 124 &&+ (ecircle, ecluster), 1.728 + OPERATOR 31 <-> (ecircle, epoint) FOR ORDER BY float_ops, 1.729 + OPERATOR 32 <-> (ecircle, ebox) FOR ORDER BY float_ops, 1.730 + OPERATOR 33 <-> (ecircle, ecircle) FOR ORDER BY float_ops, 1.731 + OPERATOR 34 <-> (ecircle, ecluster) FOR ORDER BY float_ops, 1.732 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.733 + FUNCTION 2 pgl_gist_union(internal, internal), 1.734 + FUNCTION 3 pgl_gist_compress_ecircle(internal), 1.735 + FUNCTION 4 pgl_gist_decompress(internal), 1.736 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.737 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.738 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.739 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.740 + STORAGE ekey_area; 1.741 + 1.742 +CREATE OPERATOR CLASS ecluster_ops 1.743 + DEFAULT FOR TYPE ecluster USING gist AS 1.744 + OPERATOR 21 && (ecluster, epoint), 1.745 + OPERATOR 121 &&+ (ecluster, epoint), 1.746 + OPERATOR 221 @> (ecluster, epoint), 1.747 + OPERATOR 22 && (ecluster, ebox), 1.748 + OPERATOR 122 &&+ (ecluster, ebox), 1.749 + OPERATOR 222 @> (ecluster, ebox), 1.750 + OPERATOR 322 <@ (ecluster, ebox), 1.751 + OPERATOR 23 && (ecluster, ecircle), 1.752 + OPERATOR 123 &&+ (ecluster, ecircle), 1.753 + OPERATOR 24 && (ecluster, ecluster), 1.754 + OPERATOR 124 &&+ (ecluster, ecluster), 1.755 + OPERATOR 224 @> (ecluster, ecluster), 1.756 + OPERATOR 324 <@ (ecluster, ecluster), 1.757 + OPERATOR 31 <-> (ecluster, epoint) FOR ORDER BY float_ops, 1.758 + OPERATOR 32 <-> (ecluster, ebox) FOR ORDER BY float_ops, 1.759 + OPERATOR 33 <-> (ecluster, ecircle) FOR ORDER BY float_ops, 1.760 + OPERATOR 34 <-> (ecluster, ecluster) FOR ORDER BY float_ops, 1.761 + FUNCTION 1 pgl_gist_consistent(internal, internal, smallint, oid, internal), 1.762 + FUNCTION 2 pgl_gist_union(internal, internal), 1.763 + FUNCTION 3 pgl_gist_compress_ecluster(internal), 1.764 + FUNCTION 4 pgl_gist_decompress(internal), 1.765 + FUNCTION 5 pgl_gist_penalty(internal, internal, internal), 1.766 + FUNCTION 6 pgl_gist_picksplit(internal, internal), 1.767 + FUNCTION 7 pgl_gist_same(internal, internal, internal), 1.768 + FUNCTION 8 pgl_gist_distance(internal, internal, smallint, oid), 1.769 + STORAGE ekey_area; 1.770 +