pgLatLon
annotate latlon--0.14--0.15.sql @ 79:16787a19a325
Do not return CSTRING to static memory
Avoids wrong pfree under certain circumstances
(e.g. array_agg on empty EBOX or ECLUSTER).
Avoids wrong pfree under certain circumstances
(e.g. array_agg on empty EBOX or ECLUSTER).
| author | jbe |
|---|---|
| date | Thu Oct 23 10:16:01 2025 +0200 (10 days ago) |
| parents | 4f11ccf36fb6 |
| children |
| rev | line source |
|---|---|
| jbe@73 | 1 SET LOCAL search_path TO @extschema@; |
| jbe@73 | 2 |
| jbe@0 | 3 |
| jbe@0 | 4 ------------------------------------------------------------ |
| jbe@0 | 5 -- dummy input/output functions for dummy index key types -- |
| jbe@0 | 6 ------------------------------------------------------------ |
| jbe@0 | 7 |
| jbe@69 | 8 CREATE OR REPLACE FUNCTION ekey_point_in_dummy(cstring) |
| jbe@0 | 9 RETURNS ekey_point |
| jbe@0 | 10 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 11 AS '$libdir/latlon-v0010', 'pgl_notimpl'; |
| jbe@0 | 12 |
| jbe@69 | 13 CREATE OR REPLACE FUNCTION ekey_point_out_dummy(ekey_point) |
| jbe@0 | 14 RETURNS cstring |
| jbe@0 | 15 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 16 AS '$libdir/latlon-v0010', 'pgl_notimpl'; |
| jbe@0 | 17 |
| jbe@69 | 18 CREATE OR REPLACE FUNCTION ekey_area_in_dummy(cstring) |
| jbe@0 | 19 RETURNS ekey_area |
| jbe@0 | 20 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 21 AS '$libdir/latlon-v0010', 'pgl_notimpl'; |
| jbe@0 | 22 |
| jbe@69 | 23 CREATE OR REPLACE FUNCTION ekey_area_out_dummy(ekey_area) |
| jbe@0 | 24 RETURNS cstring |
| jbe@0 | 25 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 26 AS '$libdir/latlon-v0010', 'pgl_notimpl'; |
| jbe@0 | 27 |
| jbe@0 | 28 |
| jbe@0 | 29 -------------------------- |
| jbe@0 | 30 -- text input functions -- |
| jbe@0 | 31 -------------------------- |
| jbe@0 | 32 |
| jbe@69 | 33 CREATE OR REPLACE FUNCTION epoint_in(cstring) |
| jbe@0 | 34 RETURNS epoint |
| jbe@0 | 35 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 36 AS '$libdir/latlon-v0010', 'pgl_epoint_in'; |
| jbe@46 | 37 |
| jbe@69 | 38 CREATE OR REPLACE FUNCTION epoint_with_sample_count_in(cstring) |
| jbe@46 | 39 RETURNS epoint_with_sample_count |
| jbe@46 | 40 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 41 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_in'; |
| jbe@0 | 42 |
| jbe@69 | 43 CREATE OR REPLACE FUNCTION ebox_in(cstring) |
| jbe@0 | 44 RETURNS ebox |
| jbe@0 | 45 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 46 AS '$libdir/latlon-v0010', 'pgl_ebox_in'; |
| jbe@0 | 47 |
| jbe@69 | 48 CREATE OR REPLACE FUNCTION ecircle_in(cstring) |
| jbe@0 | 49 RETURNS ecircle |
| jbe@0 | 50 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 51 AS '$libdir/latlon-v0010', 'pgl_ecircle_in'; |
| jbe@0 | 52 |
| jbe@69 | 53 CREATE OR REPLACE FUNCTION ecluster_in(cstring) |
| jbe@0 | 54 RETURNS ecluster |
| jbe@0 | 55 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 56 AS '$libdir/latlon-v0010', 'pgl_ecluster_in'; |
| jbe@0 | 57 |
| jbe@0 | 58 |
| jbe@0 | 59 --------------------------- |
| jbe@0 | 60 -- text output functions -- |
| jbe@0 | 61 --------------------------- |
| jbe@0 | 62 |
| jbe@69 | 63 CREATE OR REPLACE FUNCTION epoint_out(epoint) |
| jbe@0 | 64 RETURNS cstring |
| jbe@0 | 65 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 66 AS '$libdir/latlon-v0010', 'pgl_epoint_out'; |
| jbe@46 | 67 |
| jbe@69 | 68 CREATE OR REPLACE FUNCTION epoint_with_sample_count_out(epoint_with_sample_count) |
| jbe@46 | 69 RETURNS cstring |
| jbe@46 | 70 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 71 AS '$libdir/latlon-v0010', 'pgl_epoint_with_sample_count_out'; |
| jbe@0 | 72 |
| jbe@69 | 73 CREATE OR REPLACE FUNCTION ebox_out(ebox) |
| jbe@0 | 74 RETURNS cstring |
| jbe@0 | 75 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 76 AS '$libdir/latlon-v0010', 'pgl_ebox_out'; |
| jbe@0 | 77 |
| jbe@69 | 78 CREATE OR REPLACE FUNCTION ecircle_out(ecircle) |
| jbe@0 | 79 RETURNS cstring |
| jbe@0 | 80 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 81 AS '$libdir/latlon-v0010', 'pgl_ecircle_out'; |
| jbe@0 | 82 |
| jbe@69 | 83 CREATE OR REPLACE FUNCTION ecluster_out(ecluster) |
| jbe@0 | 84 RETURNS cstring |
| jbe@0 | 85 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 86 AS '$libdir/latlon-v0010', 'pgl_ecluster_out'; |
| jbe@0 | 87 |
| jbe@0 | 88 |
| jbe@0 | 89 -------------------------- |
| jbe@0 | 90 -- binary I/O functions -- |
| jbe@0 | 91 -------------------------- |
| jbe@0 | 92 |
| jbe@69 | 93 CREATE OR REPLACE FUNCTION epoint_recv(internal) |
| jbe@0 | 94 RETURNS epoint |
| jbe@0 | 95 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 96 AS '$libdir/latlon-v0010', 'pgl_epoint_recv'; |
| jbe@0 | 97 |
| jbe@69 | 98 CREATE OR REPLACE FUNCTION ebox_recv(internal) |
| jbe@0 | 99 RETURNS ebox |
| jbe@0 | 100 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 101 AS '$libdir/latlon-v0010', 'pgl_ebox_recv'; |
| jbe@0 | 102 |
| jbe@69 | 103 CREATE OR REPLACE FUNCTION ecircle_recv(internal) |
| jbe@0 | 104 RETURNS ecircle |
| jbe@0 | 105 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 106 AS '$libdir/latlon-v0010', 'pgl_ecircle_recv'; |
| jbe@0 | 107 |
| jbe@69 | 108 CREATE OR REPLACE FUNCTION epoint_send(epoint) |
| jbe@0 | 109 RETURNS bytea |
| jbe@0 | 110 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 111 AS '$libdir/latlon-v0010', 'pgl_epoint_send'; |
| jbe@0 | 112 |
| jbe@69 | 113 CREATE OR REPLACE FUNCTION ebox_send(ebox) |
| jbe@69 | 114 RETURNS bytea |
| jbe@69 | 115 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 116 AS '$libdir/latlon-v0010', 'pgl_ebox_send'; |
| jbe@46 | 117 |
| jbe@69 | 118 CREATE OR REPLACE FUNCTION ecircle_send(ecircle) |
| jbe@69 | 119 RETURNS bytea |
| jbe@69 | 120 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 121 AS '$libdir/latlon-v0010', 'pgl_ecircle_send'; |
| jbe@0 | 122 |
| jbe@0 | 123 |
| jbe@0 | 124 -------------------- |
| jbe@0 | 125 -- B-tree support -- |
| jbe@0 | 126 -------------------- |
| jbe@0 | 127 |
| jbe@0 | 128 -- begin of B-tree support for epoint |
| jbe@0 | 129 |
| jbe@69 | 130 CREATE OR REPLACE FUNCTION epoint_btree_lt(epoint, epoint) |
| jbe@0 | 131 RETURNS boolean |
| jbe@0 | 132 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 133 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_lt'; |
| jbe@0 | 134 |
| jbe@69 | 135 CREATE OR REPLACE FUNCTION epoint_btree_le(epoint, epoint) |
| jbe@0 | 136 RETURNS boolean |
| jbe@0 | 137 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 138 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_le'; |
| jbe@0 | 139 |
| jbe@69 | 140 CREATE OR REPLACE FUNCTION epoint_btree_eq(epoint, epoint) |
| jbe@0 | 141 RETURNS boolean |
| jbe@0 | 142 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 143 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_eq'; |
| jbe@0 | 144 |
| jbe@69 | 145 CREATE OR REPLACE FUNCTION epoint_btree_ne(epoint, epoint) |
| jbe@69 | 146 RETURNS boolean |
| jbe@69 | 147 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 148 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ne'; |
| jbe@0 | 149 |
| jbe@69 | 150 CREATE OR REPLACE FUNCTION epoint_btree_ge(epoint, epoint) |
| jbe@69 | 151 RETURNS boolean |
| jbe@69 | 152 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 153 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_ge'; |
| jbe@0 | 154 |
| jbe@69 | 155 CREATE OR REPLACE FUNCTION epoint_btree_gt(epoint, epoint) |
| jbe@69 | 156 RETURNS boolean |
| jbe@69 | 157 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 158 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_gt'; |
| jbe@0 | 159 |
| jbe@69 | 160 CREATE OR REPLACE FUNCTION epoint_btree_cmp(epoint, epoint) |
| jbe@0 | 161 RETURNS int4 |
| jbe@0 | 162 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 163 AS '$libdir/latlon-v0010', 'pgl_btree_epoint_cmp'; |
| jbe@0 | 164 |
| jbe@0 | 165 -- end of B-tree support for epoint |
| jbe@0 | 166 |
| jbe@0 | 167 -- begin of B-tree support for ebox |
| jbe@0 | 168 |
| jbe@69 | 169 CREATE OR REPLACE FUNCTION ebox_btree_lt(ebox, ebox) |
| jbe@0 | 170 RETURNS boolean |
| jbe@0 | 171 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 172 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_lt'; |
| jbe@0 | 173 |
| jbe@69 | 174 CREATE OR REPLACE FUNCTION ebox_btree_le(ebox, ebox) |
| jbe@0 | 175 RETURNS boolean |
| jbe@0 | 176 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 177 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_le'; |
| jbe@0 | 178 |
| jbe@69 | 179 CREATE OR REPLACE FUNCTION ebox_btree_eq(ebox, ebox) |
| jbe@0 | 180 RETURNS boolean |
| jbe@0 | 181 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 182 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_eq'; |
| jbe@0 | 183 |
| jbe@69 | 184 CREATE OR REPLACE FUNCTION ebox_btree_ne(ebox, ebox) |
| jbe@69 | 185 RETURNS boolean |
| jbe@69 | 186 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 187 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ne'; |
| jbe@0 | 188 |
| jbe@69 | 189 CREATE OR REPLACE FUNCTION ebox_btree_ge(ebox, ebox) |
| jbe@69 | 190 RETURNS boolean |
| jbe@69 | 191 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 192 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_ge'; |
| jbe@0 | 193 |
| jbe@69 | 194 CREATE OR REPLACE FUNCTION ebox_btree_gt(ebox, ebox) |
| jbe@69 | 195 RETURNS boolean |
| jbe@69 | 196 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 197 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_gt'; |
| jbe@0 | 198 |
| jbe@69 | 199 CREATE OR REPLACE FUNCTION ebox_btree_cmp(ebox, ebox) |
| jbe@0 | 200 RETURNS int4 |
| jbe@0 | 201 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 202 AS '$libdir/latlon-v0010', 'pgl_btree_ebox_cmp'; |
| jbe@0 | 203 |
| jbe@0 | 204 -- end of B-tree support for ebox |
| jbe@0 | 205 |
| jbe@0 | 206 -- begin of B-tree support for ecircle |
| jbe@0 | 207 |
| jbe@69 | 208 CREATE OR REPLACE FUNCTION ecircle_btree_lt(ecircle, ecircle) |
| jbe@0 | 209 RETURNS boolean |
| jbe@0 | 210 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 211 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_lt'; |
| jbe@0 | 212 |
| jbe@69 | 213 CREATE OR REPLACE FUNCTION ecircle_btree_le(ecircle, ecircle) |
| jbe@0 | 214 RETURNS boolean |
| jbe@0 | 215 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 216 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_le'; |
| jbe@0 | 217 |
| jbe@69 | 218 CREATE OR REPLACE FUNCTION ecircle_btree_eq(ecircle, ecircle) |
| jbe@0 | 219 RETURNS boolean |
| jbe@0 | 220 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 221 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_eq'; |
| jbe@0 | 222 |
| jbe@69 | 223 CREATE OR REPLACE FUNCTION ecircle_btree_ne(ecircle, ecircle) |
| jbe@69 | 224 RETURNS boolean |
| jbe@69 | 225 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 226 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ne'; |
| jbe@0 | 227 |
| jbe@69 | 228 CREATE OR REPLACE FUNCTION ecircle_btree_ge(ecircle, ecircle) |
| jbe@69 | 229 RETURNS boolean |
| jbe@69 | 230 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 231 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_ge'; |
| jbe@0 | 232 |
| jbe@69 | 233 CREATE OR REPLACE FUNCTION ecircle_btree_gt(ecircle, ecircle) |
| jbe@69 | 234 RETURNS boolean |
| jbe@69 | 235 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 236 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_gt'; |
| jbe@0 | 237 |
| jbe@69 | 238 CREATE OR REPLACE FUNCTION ecircle_btree_cmp(ecircle, ecircle) |
| jbe@0 | 239 RETURNS int4 |
| jbe@0 | 240 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 241 AS '$libdir/latlon-v0010', 'pgl_btree_ecircle_cmp'; |
| jbe@0 | 242 |
| jbe@0 | 243 -- end of B-tree support for ecircle |
| jbe@0 | 244 |
| jbe@0 | 245 |
| jbe@0 | 246 ---------------- |
| jbe@0 | 247 -- type casts -- |
| jbe@0 | 248 ---------------- |
| jbe@0 | 249 |
| jbe@69 | 250 CREATE OR REPLACE FUNCTION cast_epoint_to_ebox(epoint) |
| jbe@0 | 251 RETURNS ebox |
| jbe@0 | 252 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 253 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ebox'; |
| jbe@0 | 254 |
| jbe@69 | 255 CREATE OR REPLACE FUNCTION cast_epoint_to_ecircle(epoint) |
| jbe@0 | 256 RETURNS ecircle |
| jbe@0 | 257 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 258 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecircle'; |
| jbe@0 | 259 |
| jbe@69 | 260 CREATE OR REPLACE FUNCTION cast_epoint_to_ecluster(epoint) |
| jbe@0 | 261 RETURNS ecluster |
| jbe@0 | 262 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 263 AS '$libdir/latlon-v0010', 'pgl_epoint_to_ecluster'; |
| jbe@0 | 264 |
| jbe@69 | 265 CREATE OR REPLACE FUNCTION cast_ebox_to_ecluster(ebox) |
| jbe@0 | 266 RETURNS ecluster |
| jbe@0 | 267 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 268 AS '$libdir/latlon-v0010', 'pgl_ebox_to_ecluster'; |
| jbe@0 | 269 |
| jbe@0 | 270 |
| jbe@0 | 271 --------------------------- |
| jbe@0 | 272 -- constructor functions -- |
| jbe@0 | 273 --------------------------- |
| jbe@0 | 274 |
| jbe@69 | 275 CREATE OR REPLACE FUNCTION epoint(float8, float8) |
| jbe@0 | 276 RETURNS epoint |
| jbe@0 | 277 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 278 AS '$libdir/latlon-v0010', 'pgl_create_epoint'; |
| jbe@0 | 279 |
| jbe@73 | 280 CREATE OR REPLACE FUNCTION epoint_latlon(float8, float8) |
| jbe@73 | 281 RETURNS epoint |
| jbe@73 | 282 LANGUAGE SQL IMMUTABLE STRICT AS $$ |
| jbe@73 | 283 SELECT @extschema@.epoint($1, $2) |
| jbe@73 | 284 $$; |
| jbe@73 | 285 |
| jbe@73 | 286 CREATE OR REPLACE FUNCTION epoint_lonlat(float8, float8) |
| jbe@73 | 287 RETURNS epoint |
| jbe@73 | 288 LANGUAGE SQL IMMUTABLE STRICT AS $$ |
| jbe@73 | 289 SELECT @extschema@.epoint($2, $1) |
| jbe@73 | 290 $$; |
| jbe@73 | 291 |
| jbe@69 | 292 CREATE OR REPLACE FUNCTION epoint_with_sample_count(epoint, int4) |
| jbe@46 | 293 RETURNS epoint_with_sample_count |
| jbe@46 | 294 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 295 AS '$libdir/latlon-v0010', 'pgl_create_epoint_with_sample_count'; |
| jbe@46 | 296 |
| jbe@69 | 297 CREATE OR REPLACE FUNCTION empty_ebox() |
| jbe@0 | 298 RETURNS ebox |
| jbe@0 | 299 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 300 AS '$libdir/latlon-v0010', 'pgl_create_empty_ebox'; |
| jbe@0 | 301 |
| jbe@69 | 302 CREATE OR REPLACE FUNCTION ebox(float8, float8, float8, float8) |
| jbe@0 | 303 RETURNS ebox |
| jbe@0 | 304 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 305 AS '$libdir/latlon-v0010', 'pgl_create_ebox'; |
| jbe@0 | 306 |
| jbe@69 | 307 CREATE OR REPLACE FUNCTION ebox(epoint, epoint) |
| jbe@69 | 308 RETURNS ebox |
| jbe@0 | 309 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 310 AS '$libdir/latlon-v0010', 'pgl_create_ebox_from_epoints'; |
| jbe@0 | 311 |
| jbe@69 | 312 CREATE OR REPLACE FUNCTION ecircle(float8, float8, float8) |
| jbe@0 | 313 RETURNS ecircle |
| jbe@0 | 314 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 315 AS '$libdir/latlon-v0010', 'pgl_create_ecircle'; |
| jbe@0 | 316 |
| jbe@69 | 317 CREATE OR REPLACE FUNCTION ecircle(epoint, float8) |
| jbe@69 | 318 RETURNS ecircle |
| jbe@69 | 319 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 320 AS '$libdir/latlon-v0010', 'pgl_create_ecircle_from_epoint'; |
| jbe@0 | 321 |
| jbe@73 | 322 CREATE OR REPLACE FUNCTION ecluster_concat(ecluster[]) |
| jbe@73 | 323 RETURNS ecluster |
| jbe@73 | 324 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 325 SELECT pg_catalog.array_to_string($1, ' ')::@extschema@.ecluster |
| jbe@73 | 326 $$; |
| jbe@73 | 327 |
| jbe@73 | 328 CREATE OR REPLACE FUNCTION ecluster_concat(ecluster, ecluster) |
| jbe@73 | 329 RETURNS ecluster |
| jbe@73 | 330 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 331 SELECT ( |
| jbe@73 | 332 $1::pg_catalog.text OPERATOR(pg_catalog.||) ' ' OPERATOR(pg_catalog.||) |
| jbe@73 | 333 $2::pg_catalog.text |
| jbe@73 | 334 )::@extschema@.ecluster |
| jbe@73 | 335 $$; |
| jbe@73 | 336 |
| jbe@73 | 337 CREATE OR REPLACE FUNCTION ecluster_create_multipoint(epoint[]) |
| jbe@73 | 338 RETURNS ecluster |
| jbe@73 | 339 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 340 SELECT |
| jbe@73 | 341 pg_catalog.array_to_string( |
| jbe@73 | 342 pg_catalog.array_agg( |
| jbe@73 | 343 'point (' OPERATOR(pg_catalog.||) unnest OPERATOR(pg_catalog.||) ')' |
| jbe@73 | 344 ), |
| jbe@73 | 345 ' ' |
| jbe@73 | 346 )::@extschema@.ecluster |
| jbe@73 | 347 FROM pg_catalog.unnest($1) |
| jbe@73 | 348 $$; |
| jbe@73 | 349 |
| jbe@73 | 350 CREATE OR REPLACE FUNCTION ecluster_create_path(epoint[]) |
| jbe@73 | 351 RETURNS ecluster |
| jbe@73 | 352 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 353 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN |
| jbe@73 | 354 'empty'::@extschema@.ecluster |
| jbe@73 | 355 ELSE |
| jbe@73 | 356 ( |
| jbe@73 | 357 'path (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' |
| jbe@73 | 358 )::@extschema@.ecluster |
| jbe@73 | 359 END |
| jbe@73 | 360 FROM pg_catalog.array_to_string($1, ' ') AS "str" |
| jbe@73 | 361 $$; |
| jbe@73 | 362 |
| jbe@73 | 363 CREATE OR REPLACE FUNCTION ecluster_create_outline(epoint[]) |
| jbe@73 | 364 RETURNS ecluster |
| jbe@73 | 365 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 366 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN |
| jbe@73 | 367 'empty'::@extschema@.ecluster |
| jbe@73 | 368 ELSE |
| jbe@73 | 369 ( |
| jbe@73 | 370 'outline (' OPERATOR(pg_catalog.||) "str" OPERATOR(pg_catalog.||) ')' |
| jbe@73 | 371 )::@extschema@.ecluster |
| jbe@73 | 372 END |
| jbe@73 | 373 FROM pg_catalog.array_to_string($1, ' ') AS "str" |
| jbe@73 | 374 $$; |
| jbe@73 | 375 |
| jbe@73 | 376 CREATE OR REPLACE FUNCTION ecluster_create_polygon(epoint[]) |
| jbe@73 | 377 RETURNS ecluster |
| jbe@73 | 378 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 379 SELECT CASE WHEN "str" OPERATOR(pg_catalog.=) '' THEN |
| jbe@73 | 380 'empty'::@extschema@.ecluster |
| jbe@73 | 381 ELSE |
| jbe@73 | 382 ( |
| jbe@73 | 383 'polygon (' OPERATOR(pg_catalog.||) pg_catalog.array_to_string($1, ' ') |
| jbe@73 | 384 OPERATOR(pg_catalog.||) ')' |
| jbe@73 | 385 )::@extschema@.ecluster |
| jbe@73 | 386 END |
| jbe@73 | 387 FROM pg_catalog.array_to_string($1, ' ') AS "str" |
| jbe@73 | 388 $$; |
| jbe@73 | 389 |
| jbe@0 | 390 |
| jbe@0 | 391 ---------------------- |
| jbe@0 | 392 -- getter functions -- |
| jbe@0 | 393 ---------------------- |
| jbe@0 | 394 |
| jbe@69 | 395 CREATE OR REPLACE FUNCTION latitude(epoint) |
| jbe@0 | 396 RETURNS float8 |
| jbe@0 | 397 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 398 AS '$libdir/latlon-v0010', 'pgl_epoint_lat'; |
| jbe@0 | 399 |
| jbe@69 | 400 CREATE OR REPLACE FUNCTION longitude(epoint) |
| jbe@0 | 401 RETURNS float8 |
| jbe@0 | 402 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 403 AS '$libdir/latlon-v0010', 'pgl_epoint_lon'; |
| jbe@0 | 404 |
| jbe@69 | 405 CREATE OR REPLACE FUNCTION min_latitude(ebox) |
| jbe@0 | 406 RETURNS float8 |
| jbe@0 | 407 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 408 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_min'; |
| jbe@0 | 409 |
| jbe@69 | 410 CREATE OR REPLACE FUNCTION max_latitude(ebox) |
| jbe@0 | 411 RETURNS float8 |
| jbe@0 | 412 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 413 AS '$libdir/latlon-v0010', 'pgl_ebox_lat_max'; |
| jbe@0 | 414 |
| jbe@69 | 415 CREATE OR REPLACE FUNCTION min_longitude(ebox) |
| jbe@69 | 416 RETURNS float8 |
| jbe@69 | 417 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 418 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_min'; |
| jbe@0 | 419 |
| jbe@69 | 420 CREATE OR REPLACE FUNCTION max_longitude(ebox) |
| jbe@69 | 421 RETURNS float8 |
| jbe@69 | 422 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 423 AS '$libdir/latlon-v0010', 'pgl_ebox_lon_max'; |
| jbe@0 | 424 |
| jbe@69 | 425 CREATE OR REPLACE FUNCTION center(ecircle) |
| jbe@69 | 426 RETURNS epoint |
| jbe@69 | 427 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 428 AS '$libdir/latlon-v0010', 'pgl_ecircle_center'; |
| jbe@69 | 429 |
| jbe@69 | 430 CREATE OR REPLACE FUNCTION radius(ecircle) |
| jbe@69 | 431 RETURNS float8 |
| jbe@69 | 432 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 433 AS '$libdir/latlon-v0010', 'pgl_ecircle_radius'; |
| jbe@0 | 434 |
| jbe@73 | 435 CREATE OR REPLACE FUNCTION ecluster_extract_points(ecluster) |
| jbe@73 | 436 RETURNS SETOF epoint |
| jbe@73 | 437 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 438 SELECT "match"[2]::@extschema@.epoint |
| jbe@73 | 439 FROM pg_catalog.regexp_matches( |
| jbe@73 | 440 $1::pg_catalog.text, e'(^| )point \\(([^)]+)\\)', 'g' |
| jbe@73 | 441 ) AS "match" |
| jbe@73 | 442 $$; |
| jbe@73 | 443 |
| jbe@73 | 444 CREATE OR REPLACE FUNCTION ecluster_extract_paths(ecluster) |
| jbe@73 | 445 RETURNS SETOF epoint[] |
| jbe@73 | 446 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 447 SELECT ( |
| jbe@73 | 448 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) |
| jbe@73 | 449 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" |
| jbe@73 | 450 ) |
| jbe@73 | 451 FROM pg_catalog.regexp_matches( |
| jbe@73 | 452 $1::pg_catalog.text, e'(^| )path \\(([^)]+)\\)', 'g' |
| jbe@73 | 453 ) AS "m1" |
| jbe@73 | 454 $$; |
| jbe@73 | 455 |
| jbe@73 | 456 CREATE OR REPLACE FUNCTION ecluster_extract_outlines(ecluster) |
| jbe@73 | 457 RETURNS SETOF epoint[] |
| jbe@73 | 458 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 459 SELECT ( |
| jbe@73 | 460 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) |
| jbe@73 | 461 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" |
| jbe@73 | 462 ) |
| jbe@73 | 463 FROM pg_catalog.regexp_matches( |
| jbe@73 | 464 $1::pg_catalog.text, e'(^| )outline \\(([^)]+)\\)', 'g' |
| jbe@73 | 465 ) AS "m1" |
| jbe@73 | 466 $$; |
| jbe@73 | 467 |
| jbe@73 | 468 CREATE OR REPLACE FUNCTION ecluster_extract_polygons(ecluster) |
| jbe@73 | 469 RETURNS SETOF epoint[] |
| jbe@73 | 470 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 471 SELECT ( |
| jbe@73 | 472 SELECT pg_catalog.array_agg("m2"[1]::@extschema@.epoint) |
| jbe@73 | 473 FROM pg_catalog.regexp_matches("m1"[2], e'[^ ]+ [^ ]+', 'g') AS "m2" |
| jbe@73 | 474 ) |
| jbe@73 | 475 FROM pg_catalog.regexp_matches( |
| jbe@73 | 476 $1::pg_catalog.text, e'(^| )polygon \\(([^)]+)\\)', 'g' |
| jbe@73 | 477 ) AS "m1" |
| jbe@73 | 478 $$; |
| jbe@73 | 479 |
| jbe@0 | 480 |
| jbe@0 | 481 --------------- |
| jbe@0 | 482 -- operators -- |
| jbe@0 | 483 --------------- |
| jbe@0 | 484 |
| jbe@69 | 485 CREATE OR REPLACE FUNCTION epoint_ebox_overlap_proc(epoint, ebox) |
| jbe@0 | 486 RETURNS boolean |
| jbe@0 | 487 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 488 AS '$libdir/latlon-v0010', 'pgl_epoint_ebox_overlap'; |
| jbe@0 | 489 |
| jbe@69 | 490 CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_proc(epoint, ecircle) |
| jbe@0 | 491 RETURNS boolean |
| jbe@0 | 492 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 493 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_overlap'; |
| jbe@0 | 494 |
| jbe@69 | 495 CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_proc(epoint, ecluster) |
| jbe@0 | 496 RETURNS boolean |
| jbe@0 | 497 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 498 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_overlap'; |
| jbe@0 | 499 |
| jbe@69 | 500 CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_proc(epoint, ecluster) |
| jbe@10 | 501 RETURNS boolean |
| jbe@10 | 502 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 503 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_may_overlap'; |
| jbe@10 | 504 |
| jbe@69 | 505 CREATE OR REPLACE FUNCTION ebox_overlap_proc(ebox, ebox) |
| jbe@0 | 506 RETURNS boolean |
| jbe@0 | 507 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 508 AS '$libdir/latlon-v0010', 'pgl_ebox_overlap'; |
| jbe@0 | 509 |
| jbe@69 | 510 CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_proc(ebox, ecircle) |
| jbe@0 | 511 RETURNS boolean |
| jbe@0 | 512 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 513 AS '$libdir/latlon-v0010', 'pgl_ebox_ecircle_may_overlap'; |
| jbe@0 | 514 |
| jbe@69 | 515 CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_proc(ebox, ecluster) |
| jbe@10 | 516 RETURNS boolean |
| jbe@10 | 517 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 518 AS '$libdir/latlon-v0010', 'pgl_ebox_ecluster_may_overlap'; |
| jbe@10 | 519 |
| jbe@69 | 520 CREATE OR REPLACE FUNCTION ecircle_overlap_proc(ecircle, ecircle) |
| jbe@16 | 521 RETURNS boolean |
| jbe@16 | 522 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 523 AS '$libdir/latlon-v0010', 'pgl_ecircle_overlap'; |
| jbe@16 | 524 |
| jbe@69 | 525 CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_proc(ecircle, ecluster) |
| jbe@10 | 526 RETURNS boolean |
| jbe@10 | 527 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 528 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_overlap'; |
| jbe@10 | 529 |
| jbe@69 | 530 CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_proc(ecircle, ecluster) |
| jbe@16 | 531 RETURNS boolean |
| jbe@16 | 532 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 533 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_may_overlap'; |
| jbe@0 | 534 |
| jbe@69 | 535 CREATE OR REPLACE FUNCTION ecluster_overlap_proc(ecluster, ecluster) |
| jbe@69 | 536 RETURNS boolean |
| jbe@0 | 537 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 538 AS '$libdir/latlon-v0010', 'pgl_ecluster_overlap'; |
| jbe@0 | 539 |
| jbe@69 | 540 CREATE OR REPLACE FUNCTION ecluster_may_overlap_proc(ecluster, ecluster) |
| jbe@69 | 541 RETURNS boolean |
| jbe@0 | 542 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 543 AS '$libdir/latlon-v0010', 'pgl_ecluster_may_overlap'; |
| jbe@0 | 544 |
| jbe@69 | 545 CREATE OR REPLACE FUNCTION ecluster_contains_proc(ecluster, ecluster) |
| jbe@69 | 546 RETURNS boolean |
| jbe@16 | 547 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 548 AS '$libdir/latlon-v0010', 'pgl_ecluster_contains'; |
| jbe@46 | 549 |
| jbe@69 | 550 CREATE OR REPLACE FUNCTION epoint_distance_proc(epoint, epoint) |
| jbe@46 | 551 RETURNS float8 |
| jbe@46 | 552 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 553 AS '$libdir/latlon-v0010', 'pgl_epoint_distance'; |
| jbe@16 | 554 |
| jbe@69 | 555 CREATE OR REPLACE FUNCTION epoint_ecircle_distance_proc(epoint, ecircle) |
| jbe@69 | 556 RETURNS float8 |
| jbe@69 | 557 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 558 AS '$libdir/latlon-v0010', 'pgl_epoint_ecircle_distance'; |
| jbe@10 | 559 |
| jbe@69 | 560 CREATE OR REPLACE FUNCTION epoint_ecluster_distance_proc(epoint, ecluster) |
| jbe@69 | 561 RETURNS float8 |
| jbe@69 | 562 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 563 AS '$libdir/latlon-v0010', 'pgl_epoint_ecluster_distance'; |
| jbe@16 | 564 |
| jbe@69 | 565 CREATE OR REPLACE FUNCTION ecircle_distance_proc(ecircle, ecircle) |
| jbe@69 | 566 RETURNS float8 |
| jbe@69 | 567 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 568 AS '$libdir/latlon-v0010', 'pgl_ecircle_distance'; |
| jbe@20 | 569 |
| jbe@69 | 570 CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_proc(ecircle, ecluster) |
| jbe@69 | 571 RETURNS float8 |
| jbe@69 | 572 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 573 AS '$libdir/latlon-v0010', 'pgl_ecircle_ecluster_distance'; |
| jbe@0 | 574 |
| jbe@69 | 575 CREATE OR REPLACE FUNCTION ecluster_distance_proc(ecluster, ecluster) |
| jbe@0 | 576 RETURNS float8 |
| jbe@69 | 577 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 578 AS '$libdir/latlon-v0010', 'pgl_ecluster_distance'; |
| jbe@16 | 579 |
| jbe@69 | 580 CREATE OR REPLACE FUNCTION fair_distance_operator_proc(ecluster, epoint_with_sample_count) |
| jbe@16 | 581 RETURNS float8 |
| jbe@69 | 582 LANGUAGE C IMMUTABLE STRICT |
| jbe@69 | 583 AS '$libdir/latlon-v0010', 'pgl_ecluster_epoint_sc_fair_distance'; |
| jbe@42 | 584 |
| jbe@73 | 585 CREATE OR REPLACE FUNCTION epoint_ebox_overlap_commutator(ebox, epoint) |
| jbe@73 | 586 RETURNS boolean |
| jbe@73 | 587 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; |
| jbe@73 | 588 |
| jbe@73 | 589 CREATE OR REPLACE FUNCTION epoint_ecircle_overlap_commutator(ecircle, epoint) |
| jbe@73 | 590 RETURNS boolean |
| jbe@73 | 591 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; |
| jbe@73 | 592 |
| jbe@73 | 593 CREATE OR REPLACE FUNCTION epoint_ecluster_overlap_commutator(ecluster, epoint) |
| jbe@73 | 594 RETURNS boolean |
| jbe@73 | 595 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; |
| jbe@73 | 596 |
| jbe@73 | 597 CREATE OR REPLACE FUNCTION ecircle_ecluster_overlap_commutator(ecluster, ecircle) |
| jbe@73 | 598 RETURNS boolean |
| jbe@73 | 599 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&) $1'; |
| jbe@73 | 600 |
| jbe@73 | 601 CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ebox, ecircle) |
| jbe@73 | 602 RETURNS boolean |
| jbe@73 | 603 LANGUAGE sql IMMUTABLE |
| jbe@73 | 604 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; |
| jbe@73 | 605 |
| jbe@73 | 606 CREATE OR REPLACE FUNCTION ebox_ecircle_overlap_castwrap(ecircle, ebox) |
| jbe@73 | 607 RETURNS boolean |
| jbe@73 | 608 LANGUAGE sql IMMUTABLE |
| jbe@73 | 609 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; |
| jbe@73 | 610 |
| jbe@73 | 611 CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ebox, ecluster) |
| jbe@73 | 612 RETURNS boolean |
| jbe@73 | 613 LANGUAGE sql IMMUTABLE |
| jbe@73 | 614 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.&&) $2'; |
| jbe@73 | 615 |
| jbe@73 | 616 CREATE OR REPLACE FUNCTION ebox_ecluster_overlap_castwrap(ecluster, ebox) |
| jbe@73 | 617 RETURNS boolean |
| jbe@73 | 618 LANGUAGE sql IMMUTABLE |
| jbe@73 | 619 AS 'SELECT $1 OPERATOR(@extschema@.&&) $2::@extschema@.ecluster'; |
| jbe@73 | 620 |
| jbe@73 | 621 CREATE OR REPLACE FUNCTION epoint_ecluster_may_overlap_commutator(ecluster, epoint) |
| jbe@73 | 622 RETURNS boolean |
| jbe@73 | 623 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; |
| jbe@73 | 624 |
| jbe@73 | 625 CREATE OR REPLACE FUNCTION ebox_ecircle_may_overlap_commutator(ecircle, ebox) |
| jbe@73 | 626 RETURNS boolean |
| jbe@73 | 627 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; |
| jbe@73 | 628 |
| jbe@73 | 629 CREATE OR REPLACE FUNCTION ebox_ecluster_may_overlap_commutator(ecluster, ebox) |
| jbe@73 | 630 RETURNS boolean |
| jbe@73 | 631 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; |
| jbe@73 | 632 |
| jbe@73 | 633 CREATE OR REPLACE FUNCTION ecircle_ecluster_may_overlap_commutator(ecluster, ecircle) |
| jbe@73 | 634 RETURNS boolean |
| jbe@73 | 635 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.&&+) $1'; |
| jbe@73 | 636 |
| jbe@73 | 637 CREATE OR REPLACE FUNCTION ecluster_contains_commutator(ecluster, ecluster) |
| jbe@73 | 638 RETURNS boolean |
| jbe@73 | 639 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.@>) $1'; |
| jbe@73 | 640 |
| jbe@73 | 641 CREATE OR REPLACE FUNCTION ebox_contains_castwrap(ebox, ebox) |
| jbe@73 | 642 RETURNS boolean |
| jbe@73 | 643 LANGUAGE sql IMMUTABLE AS $$ |
| jbe@73 | 644 SELECT |
| jbe@73 | 645 $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2::@extschema@.ecluster |
| jbe@73 | 646 $$; |
| jbe@73 | 647 |
| jbe@73 | 648 CREATE OR REPLACE FUNCTION ebox_contains_swapped_castwrap(ebox, ebox) |
| jbe@73 | 649 RETURNS boolean |
| jbe@73 | 650 LANGUAGE sql IMMUTABLE AS $$ |
| jbe@73 | 651 SELECT |
| jbe@73 | 652 $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1::@extschema@.ecluster |
| jbe@73 | 653 $$; |
| jbe@73 | 654 |
| jbe@73 | 655 CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ebox, ecluster) |
| jbe@73 | 656 RETURNS boolean |
| jbe@73 | 657 LANGUAGE sql IMMUTABLE |
| jbe@73 | 658 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.@>) $2'; |
| jbe@73 | 659 |
| jbe@73 | 660 CREATE OR REPLACE FUNCTION ebox_ecluster_contains_castwrap(ecluster, ebox) |
| jbe@73 | 661 RETURNS boolean |
| jbe@73 | 662 LANGUAGE sql IMMUTABLE |
| jbe@73 | 663 AS 'SELECT $2::@extschema@.ecluster OPERATOR(@extschema@.@>) $1'; |
| jbe@73 | 664 |
| jbe@73 | 665 CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ecluster, ebox) |
| jbe@73 | 666 RETURNS boolean |
| jbe@73 | 667 LANGUAGE sql IMMUTABLE |
| jbe@73 | 668 AS 'SELECT $1 OPERATOR(@extschema@.@>) $2::@extschema@.ecluster'; |
| jbe@73 | 669 |
| jbe@73 | 670 CREATE OR REPLACE FUNCTION ecluster_ebox_contains_castwrap(ebox, ecluster) |
| jbe@73 | 671 RETURNS boolean |
| jbe@73 | 672 LANGUAGE sql IMMUTABLE |
| jbe@73 | 673 AS 'SELECT $2 OPERATOR(@extschema@.@>) $1::@extschema@.ecluster'; |
| jbe@73 | 674 |
| jbe@73 | 675 CREATE OR REPLACE FUNCTION epoint_ecircle_distance_commutator(ecircle, epoint) |
| jbe@73 | 676 RETURNS float8 |
| jbe@73 | 677 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; |
| jbe@73 | 678 |
| jbe@73 | 679 CREATE OR REPLACE FUNCTION epoint_ecluster_distance_commutator(ecluster, epoint) |
| jbe@73 | 680 RETURNS float8 |
| jbe@73 | 681 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; |
| jbe@73 | 682 |
| jbe@73 | 683 CREATE OR REPLACE FUNCTION ecircle_ecluster_distance_commutator(ecluster, ecircle) |
| jbe@73 | 684 RETURNS float8 |
| jbe@73 | 685 LANGUAGE sql IMMUTABLE AS 'SELECT $2 OPERATOR(@extschema@.<->) $1'; |
| jbe@73 | 686 |
| jbe@73 | 687 CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(epoint, ebox) |
| jbe@73 | 688 RETURNS float8 |
| jbe@73 | 689 LANGUAGE sql IMMUTABLE |
| jbe@73 | 690 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; |
| jbe@73 | 691 |
| jbe@73 | 692 CREATE OR REPLACE FUNCTION epoint_ebox_distance_castwrap(ebox, epoint) |
| jbe@73 | 693 RETURNS float8 |
| jbe@73 | 694 LANGUAGE sql IMMUTABLE |
| jbe@73 | 695 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; |
| jbe@73 | 696 |
| jbe@73 | 697 CREATE OR REPLACE FUNCTION ebox_distance_castwrap(ebox, ebox) |
| jbe@73 | 698 RETURNS float8 |
| jbe@73 | 699 LANGUAGE sql IMMUTABLE AS $$ |
| jbe@73 | 700 SELECT |
| jbe@73 | 701 $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2::@extschema@.ecluster |
| jbe@73 | 702 $$; |
| jbe@73 | 703 |
| jbe@73 | 704 CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ebox, ecircle) |
| jbe@73 | 705 RETURNS float8 |
| jbe@73 | 706 LANGUAGE sql IMMUTABLE |
| jbe@73 | 707 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; |
| jbe@73 | 708 |
| jbe@73 | 709 CREATE OR REPLACE FUNCTION ebox_ecircle_distance_castwrap(ecircle, ebox) |
| jbe@73 | 710 RETURNS float8 |
| jbe@73 | 711 LANGUAGE sql IMMUTABLE |
| jbe@73 | 712 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; |
| jbe@73 | 713 |
| jbe@73 | 714 CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ebox, ecluster) |
| jbe@73 | 715 RETURNS float8 |
| jbe@73 | 716 LANGUAGE sql IMMUTABLE |
| jbe@73 | 717 AS 'SELECT $1::@extschema@.ecluster OPERATOR(@extschema@.<->) $2'; |
| jbe@73 | 718 |
| jbe@73 | 719 CREATE OR REPLACE FUNCTION ebox_ecluster_distance_castwrap(ecluster, ebox) |
| jbe@73 | 720 RETURNS float8 |
| jbe@73 | 721 LANGUAGE sql IMMUTABLE |
| jbe@73 | 722 AS 'SELECT $1 OPERATOR(@extschema@.<->) $2::@extschema@.ecluster'; |
| jbe@73 | 723 |
| jbe@42 | 724 |
| jbe@0 | 725 ---------------- |
| jbe@0 | 726 -- GiST index -- |
| jbe@0 | 727 ---------------- |
| jbe@0 | 728 |
| jbe@69 | 729 CREATE OR REPLACE FUNCTION pgl_gist_consistent(internal, internal, smallint, oid, internal) |
| jbe@0 | 730 RETURNS boolean |
| jbe@0 | 731 LANGUAGE C STRICT |
| jbe@69 | 732 AS '$libdir/latlon-v0010', 'pgl_gist_consistent'; |
| jbe@0 | 733 |
| jbe@69 | 734 CREATE OR REPLACE FUNCTION pgl_gist_union(internal, internal) |
| jbe@0 | 735 RETURNS internal |
| jbe@0 | 736 LANGUAGE C STRICT |
| jbe@69 | 737 AS '$libdir/latlon-v0010', 'pgl_gist_union'; |
| jbe@0 | 738 |
| jbe@69 | 739 CREATE OR REPLACE FUNCTION pgl_gist_compress_epoint(internal) |
| jbe@0 | 740 RETURNS internal |
| jbe@0 | 741 LANGUAGE C STRICT |
| jbe@69 | 742 AS '$libdir/latlon-v0010', 'pgl_gist_compress_epoint'; |
| jbe@0 | 743 |
| jbe@69 | 744 CREATE OR REPLACE FUNCTION pgl_gist_compress_ecircle(internal) |
| jbe@0 | 745 RETURNS internal |
| jbe@0 | 746 LANGUAGE C STRICT |
| jbe@69 | 747 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecircle'; |
| jbe@0 | 748 |
| jbe@69 | 749 CREATE OR REPLACE FUNCTION pgl_gist_compress_ecluster(internal) |
| jbe@0 | 750 RETURNS internal |
| jbe@0 | 751 LANGUAGE C STRICT |
| jbe@69 | 752 AS '$libdir/latlon-v0010', 'pgl_gist_compress_ecluster'; |
| jbe@0 | 753 |
| jbe@69 | 754 CREATE OR REPLACE FUNCTION pgl_gist_decompress(internal) |
| jbe@69 | 755 RETURNS internal |
| jbe@69 | 756 LANGUAGE C STRICT |
| jbe@69 | 757 AS '$libdir/latlon-v0010', 'pgl_gist_decompress'; |
| jbe@0 | 758 |
| jbe@69 | 759 CREATE OR REPLACE FUNCTION pgl_gist_penalty(internal, internal, internal) |
| jbe@69 | 760 RETURNS internal |
| jbe@69 | 761 LANGUAGE C STRICT |
| jbe@69 | 762 AS '$libdir/latlon-v0010', 'pgl_gist_penalty'; |
| jbe@0 | 763 |
| jbe@69 | 764 CREATE OR REPLACE FUNCTION pgl_gist_picksplit(internal, internal) |
| jbe@69 | 765 RETURNS internal |
| jbe@69 | 766 LANGUAGE C STRICT |
| jbe@69 | 767 AS '$libdir/latlon-v0010', 'pgl_gist_picksplit'; |
| jbe@0 | 768 |
| jbe@69 | 769 CREATE OR REPLACE FUNCTION pgl_gist_same(internal, internal, internal) |
| jbe@69 | 770 RETURNS internal |
| jbe@69 | 771 LANGUAGE C STRICT |
| jbe@69 | 772 AS '$libdir/latlon-v0010', 'pgl_gist_same'; |
| jbe@0 | 773 |
| jbe@69 | 774 CREATE OR REPLACE FUNCTION pgl_gist_distance(internal, internal, smallint, oid) |
| jbe@69 | 775 RETURNS internal |
| jbe@69 | 776 LANGUAGE C STRICT |
| jbe@69 | 777 AS '$libdir/latlon-v0010', 'pgl_gist_distance'; |
| jbe@69 | 778 |
| jbe@73 | 779 |
| jbe@73 | 780 --------------------- |
| jbe@73 | 781 -- alias functions -- |
| jbe@73 | 782 --------------------- |
| jbe@73 | 783 |
| jbe@73 | 784 CREATE OR REPLACE FUNCTION distance(epoint, epoint) |
| jbe@73 | 785 RETURNS float8 |
| jbe@73 | 786 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; |
| jbe@73 | 787 |
| jbe@73 | 788 CREATE OR REPLACE FUNCTION distance(ecluster, epoint) |
| jbe@73 | 789 RETURNS float8 |
| jbe@73 | 790 LANGUAGE sql IMMUTABLE AS 'SELECT $1 OPERATOR(@extschema@.<->) $2'; |
| jbe@73 | 791 |
| jbe@73 | 792 CREATE OR REPLACE FUNCTION distance_within(epoint, epoint, float8) |
| jbe@73 | 793 RETURNS boolean |
| jbe@73 | 794 LANGUAGE sql IMMUTABLE |
| jbe@73 | 795 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; |
| jbe@73 | 796 |
| jbe@73 | 797 CREATE OR REPLACE FUNCTION distance_within(ecluster, epoint, float8) |
| jbe@73 | 798 RETURNS boolean |
| jbe@73 | 799 LANGUAGE sql IMMUTABLE |
| jbe@73 | 800 AS 'SELECT $1 OPERATOR(@extschema@.&&) @extschema@.ecircle($2, $3)'; |
| jbe@73 | 801 |
| jbe@73 | 802 CREATE OR REPLACE FUNCTION fair_distance(ecluster, epoint, int4 = 10000) |
| jbe@73 | 803 RETURNS float8 |
| jbe@73 | 804 LANGUAGE sql IMMUTABLE AS $$ |
| jbe@73 | 805 SELECT |
| jbe@73 | 806 $1 OPERATOR(@extschema@.<=>) @extschema@.epoint_with_sample_count($2, $3) |
| jbe@73 | 807 $$; |
| jbe@73 | 808 |
| jbe@73 | 809 |
| jbe@73 | 810 -------------------------------- |
| jbe@73 | 811 -- other data storage formats -- |
| jbe@73 | 812 -------------------------------- |
| jbe@73 | 813 |
| jbe@73 | 814 CREATE OR REPLACE FUNCTION coords_to_epoint(float8, float8, text = 'epoint') |
| jbe@73 | 815 RETURNS epoint |
| jbe@73 | 816 LANGUAGE plpgsql IMMUTABLE STRICT AS $$ |
| jbe@73 | 817 DECLARE |
| jbe@73 | 818 "result" @extschema@.epoint; |
| jbe@73 | 819 BEGIN |
| jbe@73 | 820 IF $3 OPERATOR(pg_catalog.=) 'epoint_lonlat' THEN |
| jbe@73 | 821 -- avoid dynamic command execution for better performance |
| jbe@73 | 822 RETURN @extschema@.epoint($2, $1); |
| jbe@73 | 823 END IF; |
| jbe@73 | 824 IF |
| jbe@73 | 825 $3 OPERATOR(pg_catalog.=) 'epoint' OR |
| jbe@73 | 826 $3 OPERATOR(pg_catalog.=) 'epoint_latlon' |
| jbe@73 | 827 THEN |
| jbe@73 | 828 -- avoid dynamic command execution for better performance |
| jbe@73 | 829 RETURN @extschema@.epoint($1, $2); |
| jbe@73 | 830 END IF; |
| jbe@73 | 831 EXECUTE |
| jbe@73 | 832 'SELECT ' OPERATOR(pg_catalog.||) $3 OPERATOR(pg_catalog.||) '($1, $2)' INTO STRICT "result" USING $1, $2; |
| jbe@73 | 833 RETURN "result"; |
| jbe@73 | 834 END; |
| jbe@73 | 835 $$; |
| jbe@73 | 836 |
| jbe@73 | 837 CREATE OR REPLACE FUNCTION GeoJSON_LinearRing_vertices(jsonb, text = 'epoint_lonlat') |
| jbe@73 | 838 RETURNS SETOF jsonb |
| jbe@73 | 839 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 840 SELECT "result" FROM |
| jbe@73 | 841 ( SELECT pg_catalog.jsonb_array_length($1) - 1 ) |
| jbe@73 | 842 AS "lastindex_row" ("lastindex") |
| jbe@73 | 843 CROSS JOIN LATERAL pg_catalog.jsonb_array_elements( |
| jbe@73 | 844 CASE WHEN |
| jbe@73 | 845 @extschema@.coords_to_epoint( |
| jbe@73 | 846 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 0) |
| jbe@73 | 847 ::pg_catalog.float8, |
| jbe@73 | 848 ($1 OPERATOR(pg_catalog.->) 0 OPERATOR(pg_catalog.->>) 1) |
| jbe@73 | 849 ::pg_catalog.float8, |
| jbe@73 | 850 $2 |
| jbe@73 | 851 ) OPERATOR(pg_catalog.=) @extschema@.coords_to_epoint( |
| jbe@73 | 852 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 0) |
| jbe@73 | 853 ::pg_catalog.float8, |
| jbe@73 | 854 ($1 OPERATOR(pg_catalog.->) "lastindex" OPERATOR(pg_catalog.->>) 1) |
| jbe@73 | 855 ::pg_catalog.float8, |
| jbe@73 | 856 $2 |
| jbe@73 | 857 ) |
| jbe@73 | 858 THEN |
| jbe@73 | 859 $1 - "lastindex" |
| jbe@73 | 860 ELSE |
| jbe@73 | 861 $1 |
| jbe@73 | 862 END |
| jbe@73 | 863 ) AS "result_row" ("result") |
| jbe@73 | 864 $$; |
| jbe@73 | 865 |
| jbe@73 | 866 CREATE OR REPLACE FUNCTION GeoJSON_to_epoint(jsonb, text = 'epoint_lonlat') |
| jbe@73 | 867 RETURNS epoint |
| jbe@73 | 868 LANGUAGE sql IMMUTABLE STRICT AS $$ |
| jbe@73 | 869 SELECT CASE |
| jbe@73 | 870 WHEN $1 OPERATOR(pg_catalog.->>) 'type' OPERATOR(pg_catalog.=) 'Point' THEN |
| jbe@73 | 871 @extschema@.coords_to_epoint( |
| jbe@73 | 872 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) |
| jbe@73 | 873 ::pg_catalog.float8, |
| jbe@73 | 874 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) |
| jbe@73 | 875 ::pg_catalog.float8, |
| jbe@73 | 876 $2 |
| jbe@73 | 877 ) |
| jbe@73 | 878 WHEN $1->>'type' = 'Feature' THEN |
| jbe@73 | 879 @extschema@.GeoJSON_to_epoint($1 OPERATOR(pg_catalog.->) 'geometry', $2) |
| jbe@73 | 880 ELSE |
| jbe@73 | 881 NULL |
| jbe@73 | 882 END |
| jbe@73 | 883 $$; |
| jbe@73 | 884 |
| jbe@73 | 885 CREATE OR REPLACE FUNCTION GeoJSON_to_ecluster(jsonb, text = 'epoint_lonlat') |
| jbe@73 | 886 RETURNS ecluster |
| jbe@76 | 887 LANGUAGE plpgsql IMMUTABLE STRICT AS $$ |
| jbe@76 | 888 DECLARE |
| jbe@76 | 889 "tp" TEXT = $1 OPERATOR(pg_catalog.->>) 'type'; |
| jbe@76 | 890 BEGIN |
| jbe@76 | 891 IF "tp" = 'Point' THEN RETURN |
| jbe@76 | 892 @extschema@.coords_to_epoint( |
| jbe@76 | 893 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 0) |
| jbe@76 | 894 ::pg_catalog.float8, |
| jbe@76 | 895 ($1 OPERATOR(pg_catalog.->) 'coordinates' OPERATOR(pg_catalog.->>) 1) |
| jbe@76 | 896 ::pg_catalog.float8, |
| jbe@76 | 897 $2 |
| jbe@76 | 898 )::@extschema@.ecluster; |
| jbe@76 | 899 END IF; |
| jbe@76 | 900 raise notice 'DEBUG2'; |
| jbe@76 | 901 IF "tp" = 'MultiPoint' THEN RETURN |
| jbe@76 | 902 ( SELECT @extschema@.ecluster_create_multipoint(pg_catalog.array_agg( |
| jbe@76 | 903 @extschema@.coords_to_epoint( |
| jbe@76 | 904 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, |
| jbe@76 | 905 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, |
| jbe@76 | 906 $2 |
| jbe@76 | 907 ) |
| jbe@76 | 908 )) |
| jbe@76 | 909 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 910 $1 OPERATOR(pg_catalog.->) 'coordinates' |
| jbe@76 | 911 ) AS "coord" |
| jbe@76 | 912 ); |
| jbe@76 | 913 END IF; |
| jbe@76 | 914 IF "tp" = 'LineString' THEN RETURN |
| jbe@76 | 915 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( |
| jbe@76 | 916 @extschema@.coords_to_epoint( |
| jbe@76 | 917 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, |
| jbe@76 | 918 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, |
| jbe@76 | 919 $2 |
| jbe@76 | 920 ) |
| jbe@76 | 921 )) |
| jbe@76 | 922 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 923 $1 OPERATOR(pg_catalog.->) 'coordinates' |
| jbe@76 | 924 ) AS "coord" |
| jbe@76 | 925 ); |
| jbe@76 | 926 END IF; |
| jbe@76 | 927 IF "tp" = 'MultiLineString' THEN RETURN |
| jbe@76 | 928 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 929 ( SELECT @extschema@.ecluster_create_path(pg_catalog.array_agg( |
| jbe@76 | 930 @extschema@.coords_to_epoint( |
| jbe@76 | 931 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, |
| jbe@76 | 932 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, |
| jbe@76 | 933 $2 |
| jbe@76 | 934 ) |
| jbe@76 | 935 )) |
| jbe@76 | 936 FROM pg_catalog.jsonb_array_elements("coord_array") AS "coord" |
| jbe@76 | 937 ) |
| jbe@76 | 938 )) |
| jbe@76 | 939 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 940 $1 OPERATOR(pg_catalog.->) 'coordinates' |
| jbe@76 | 941 ) AS "coord_array" |
| jbe@76 | 942 ); |
| jbe@76 | 943 END IF; |
| jbe@76 | 944 IF "tp" = 'Polygon' THEN RETURN |
| jbe@76 | 945 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 946 ( SELECT @extschema@.ecluster_create_polygon(pg_catalog.array_agg( |
| jbe@76 | 947 @extschema@.coords_to_epoint( |
| jbe@76 | 948 ("coord" OPERATOR(pg_catalog.->>) 0)::pg_catalog.float8, |
| jbe@76 | 949 ("coord" OPERATOR(pg_catalog.->>) 1)::pg_catalog.float8, |
| jbe@76 | 950 $2 |
| jbe@76 | 951 ) |
| jbe@76 | 952 )) |
| jbe@76 | 953 FROM @extschema@.GeoJSON_LinearRing_vertices("coord_array", $2) |
| jbe@76 | 954 AS "coord" |
| jbe@76 | 955 ) |
| jbe@76 | 956 )) |
| jbe@76 | 957 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 958 $1 OPERATOR(pg_catalog.->) 'coordinates' |
| jbe@76 | 959 ) AS "coord_array" |
| jbe@76 | 960 ); |
| jbe@76 | 961 END IF; |
| jbe@76 | 962 IF "tp" = 'MultiPolygon' THEN RETURN |
| jbe@76 | 963 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 964 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 965 ( SELECT @extschema@.ecluster_create_polygon( |
| jbe@76 | 966 pg_catalog.array_agg( |
| jbe@76 | 967 @extschema@.coords_to_epoint( |
| jbe@76 | 968 ("coord" OPERATOR(pg_catalog.->>) 0) |
| jbe@76 | 969 ::pg_catalog.float8, |
| jbe@76 | 970 ("coord" OPERATOR(pg_catalog.->>) 1) |
| jbe@76 | 971 ::pg_catalog.float8, |
| jbe@76 | 972 $2 |
| jbe@76 | 973 ) |
| jbe@75 | 974 ) |
| jbe@73 | 975 ) |
| jbe@76 | 976 FROM @extschema@.GeoJSON_LinearRing_vertices( |
| jbe@76 | 977 "coord_array", $2 |
| jbe@76 | 978 ) AS "coord" |
| jbe@75 | 979 ) |
| jbe@76 | 980 )) |
| jbe@76 | 981 FROM pg_catalog.jsonb_array_elements("coord_array_array") |
| jbe@76 | 982 AS "coord_array" |
| jbe@76 | 983 ) |
| jbe@76 | 984 )) |
| jbe@76 | 985 FROM jsonb_array_elements( |
| jbe@76 | 986 $1 OPERATOR(pg_catalog.->) 'coordinates' |
| jbe@76 | 987 ) AS "coord_array_array" |
| jbe@76 | 988 ); |
| jbe@76 | 989 END IF; |
| jbe@76 | 990 IF "tp" = 'GeometryCollection' THEN RETURN |
| jbe@76 | 991 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 992 @extschema@.GeoJSON_to_ecluster("geometry", $2) |
| jbe@76 | 993 )) |
| jbe@76 | 994 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 995 $1 OPERATOR(pg_catalog.->) 'geometries' |
| jbe@76 | 996 ) AS "geometry" |
| jbe@76 | 997 ); |
| jbe@76 | 998 END IF; |
| jbe@76 | 999 IF "tp" = 'Feature' THEN RETURN |
| jbe@76 | 1000 @extschema@.GeoJSON_to_ecluster( |
| jbe@76 | 1001 $1 OPERATOR(pg_catalog.->) 'geometry', $2 |
| jbe@76 | 1002 ); |
| jbe@76 | 1003 END IF; |
| jbe@76 | 1004 IF "tp" = 'FeatureCollection' THEN RETURN |
| jbe@76 | 1005 ( SELECT @extschema@.ecluster_concat(pg_catalog.array_agg( |
| jbe@76 | 1006 @extschema@.GeoJSON_to_ecluster("feature", $2) |
| jbe@76 | 1007 )) |
| jbe@76 | 1008 FROM pg_catalog.jsonb_array_elements( |
| jbe@76 | 1009 $1 OPERATOR(pg_catalog.->) 'features' |
| jbe@76 | 1010 ) AS "feature" |
| jbe@76 | 1011 ); |
| jbe@76 | 1012 END IF; |
| jbe@76 | 1013 RETURN NULL; |
| jbe@76 | 1014 END; |
| jbe@73 | 1015 $$; |
| jbe@73 | 1016 |