root/tags/1.3.0/lwgeom/lwpostgis.sql.in

Revision 2666, 184.8 KB (checked in by pramsey, 5 years ago)

Fix some ST_ declarations that were missing.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
  • Property svn:mime-type set to text/plain
Line 
1-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
2--
3-- $Id$
4--
5-- PostGIS - Spatial Types for PostgreSQL
6-- http://postgis.refractions.net
7-- Copyright 2001-2003 Refractions Research Inc.
8--
9-- This is free software; you can redistribute and/or modify it under
10-- the terms of the GNU General Public Licence. See the COPYING file.
11-- 
12-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
13--
14-- WARNING: Any change in this file must be evaluated for compatibility.
15--          Changes cleanly handled by lwpostgis_uptrade.sql are fine,
16--          other changes will require a bump in Major version.
17--          Currently only function replaceble by CREATE OR REPLACE
18--          are cleanly handled.
19--
20-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
21
22#include "sqldefines.h"
23
24BEGIN;
25
26-------------------------------------------------------------------
27--  HISTOGRAM2D TYPE (lwhistogram2d)
28-------------------------------------------------------------------
29
30#if USE_VERSION < 73
31# define HISTOGRAM_IN_REP opaque
32# define HISTOGRAM_OUT_REP opaque
33#else
34# define HISTOGRAM_IN_REP histogram2d
35# define HISTOGRAM_OUT_REP cstring
36#endif
37
38-- Deprecation in 1.2.3
39CREATEFUNCTION histogram2d_in(HISTOGRAM_OUT_REP)
40        RETURNS HISTOGRAM_IN_REP
41        AS '@MODULE_FILENAME@', 'lwhistogram2d_in'
42        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
43
44-- Availability: 1.2.2
45CREATEFUNCTION ST_histogram2d_in(HISTOGRAM_OUT_REP)
46        RETURNS HISTOGRAM_IN_REP
47        AS '@MODULE_FILENAME@', 'lwhistogram2d_in'
48        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
49
50-- Deprecation in 1.2.3
51CREATEFUNCTION histogram2d_out(HISTOGRAM_IN_REP)
52        RETURNS HISTOGRAM_OUT_REP
53        AS '@MODULE_FILENAME@', 'lwhistogram2d_out'
54        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
55
56-- Availability: 1.2.2
57CREATEFUNCTION ST_histogram2d_out(HISTOGRAM_IN_REP)
58        RETURNS HISTOGRAM_OUT_REP
59        AS '@MODULE_FILENAME@', 'lwhistogram2d_out'
60        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
61
62CREATE TYPE histogram2d (
63        alignment = double,
64        internallength = variable,
65        input = ST_histogram2d_in,
66        output = ST_histogram2d_out,
67        storage = main
68);
69
70-------------------------------------------------------------------
71--  SPHEROID TYPE
72-------------------------------------------------------------------
73
74#if USE_VERSION < 73
75# define SPHEROID_IN_REP opaque
76# define SPHEROID_OUT_REP opaque
77#else
78# define SPHEROID_IN_REP spheroid
79# define SPHEROID_OUT_REP cstring
80#endif
81
82-- Deprecation in 1.2.3
83CREATEFUNCTION spheroid_in(SPHEROID_OUT_REP)
84        RETURNS SPHEROID_IN_REP
85        AS '@MODULE_FILENAME@','ellipsoid_in'
86        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
87
88-- Availability: 1.2.2
89CREATEFUNCTION ST_spheroid_in(SPHEROID_OUT_REP)
90        RETURNS SPHEROID_IN_REP
91        AS '@MODULE_FILENAME@','ellipsoid_in'
92        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
93
94-- Deprecation in 1.2.3
95CREATEFUNCTION spheroid_out(SPHEROID_IN_REP)
96        RETURNS SPHEROID_OUT_REP
97        AS '@MODULE_FILENAME@','ellipsoid_out'
98        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
99
100-- Availability: 1.2.2
101CREATEFUNCTION ST_spheroid_out(SPHEROID_IN_REP)
102        RETURNS SPHEROID_OUT_REP
103        AS '@MODULE_FILENAME@','ellipsoid_out'
104        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
105
106CREATE TYPE spheroid (
107        alignment = double,
108        internallength = 65,
109        input = ST_spheroid_in,
110        output = ST_spheroid_out
111);
112
113-------------------------------------------------------------------
114--  GEOMETRY TYPE (lwgeom)
115-------------------------------------------------------------------
116
117#if USE_VERSION < 73
118# define GEOMETRY_IN_REP opaque
119# define GEOMETRY_OUT_REP opaque
120#else
121# define GEOMETRY_IN_REP geometry
122# define GEOMETRY_OUT_REP cstring
123#endif
124
125-- Deprecation in 1.2.3
126CREATEFUNCTION geometry_in(GEOMETRY_OUT_REP)
127        RETURNS geometry
128        AS '@MODULE_FILENAME@','LWGEOM_in'
129        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
130
131-- Availability: 1.2.2
132CREATEFUNCTION ST_geometry_in(GEOMETRY_OUT_REP)
133        RETURNS geometry
134        AS '@MODULE_FILENAME@','LWGEOM_in'
135        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
136
137-- Deprecation in 1.2.3
138CREATEFUNCTION geometry_out(GEOMETRY_IN_REP)
139        RETURNS cstring
140        AS '@MODULE_FILENAME@','LWGEOM_out'
141        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
142
143-- Availability: 1.2.2
144CREATEFUNCTION ST_geometry_out(GEOMETRY_IN_REP)
145        RETURNS cstring
146        AS '@MODULE_FILENAME@','LWGEOM_out'
147        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
148
149#if USE_VERSION >= 80
150-- Deprecation in 1.2.3
151CREATEFUNCTION geometry_analyze(internal)
152        RETURNS bool
153        AS '@MODULE_FILENAME@', 'LWGEOM_analyze'
154        LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
155
156-- Availability: 1.2.2
157CREATEFUNCTION ST_geometry_analyze(internal)
158        RETURNS bool
159        AS '@MODULE_FILENAME@', 'LWGEOM_analyze'
160        LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
161#endif
162
163#if USE_VERSION > 73
164-- Deprecation in 1.2.3
165CREATEFUNCTION geometry_recv(internal)
166        RETURNS geometry
167        AS '@MODULE_FILENAME@','LWGEOM_recv'
168        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
169
170-- Availability: 1.2.2
171CREATEFUNCTION ST_geometry_recv(internal)
172        RETURNS geometry
173        AS '@MODULE_FILENAME@','LWGEOM_recv'
174        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
175
176-- Deprecation in 1.2.3
177CREATEFUNCTION geometry_send(geometry)
178        RETURNS bytea
179        AS '@MODULE_FILENAME@','LWGEOM_send'
180        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
181
182-- Availability: 1.2.2
183CREATEFUNCTION ST_geometry_send(geometry)
184        RETURNS bytea
185        AS '@MODULE_FILENAME@','LWGEOM_send'
186        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
187#endif
188
189CREATE TYPE geometry (
190        internallength = variable,
191        input = ST_geometry_in,
192        output = ST_geometry_out,
193#if USE_VERSION > 73
194        send = ST_geometry_send,
195        receive = ST_geometry_recv,
196#endif
197        delimiter = ':',
198#if USE_VERSION >= 80
199        analyze = ST_geometry_analyze,
200#endif
201        storage = main
202);
203
204-------------------------------------------
205-- Affine transforms
206-------------------------------------------
207
208-- Availability: 1.1.2
209-- Deprecation in 1.2.3
210CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
211        RETURNS geometry
212        AS '@MODULE_FILENAME@', 'LWGEOM_affine'
213        LANGUAGE 'C' _IMMUTABLE_STRICT;
214
215-- Availability: 1.2.2
216CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
217        RETURNS geometry
218        AS '@MODULE_FILENAME@', 'LWGEOM_affine'
219        LANGUAGE 'C' _IMMUTABLE_STRICT;
220
221-- Availability: 1.1.2
222-- Deprecation in 1.2.3
223CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8)
224        RETURNS geometry
225        AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
226        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
227
228-- Availability: 1.2.2
229CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8)
230        RETURNS geometry
231        AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
232        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
233
234-- Availability: 1.1.2
235-- Deprecation in 1.2.3
236CREATEFUNCTION RotateZ(geometry,float8)
237        RETURNS geometry
238        AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
239        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
240
241-- Availability: 1.2.2
242CREATEFUNCTION ST_RotateZ(geometry,float8)
243        RETURNS geometry
244        AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
245        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
246
247-- Availability: 1.1.2
248-- Deprecation in 1.2.3
249CREATEFUNCTION Rotate(geometry,float8)
250        RETURNS geometry
251        AS 'SELECT rotateZ($1, $2)'
252        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
253
254-- Availability: 1.2.2
255CREATEFUNCTION ST_Rotate(geometry,float8)
256        RETURNS geometry
257        AS 'SELECT rotateZ($1, $2)'
258        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
259
260-- Availability: 1.1.2
261-- Deprecation in 1.2.3
262CREATEFUNCTION RotateX(geometry,float8)
263        RETURNS geometry
264        AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
265        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
266
267-- Availability: 1.2.2
268CREATEFUNCTION ST_RotateX(geometry,float8)
269        RETURNS geometry
270        AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
271        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
272
273-- Availability: 1.1.2
274-- Deprecation in 1.2.3
275CREATEFUNCTION RotateY(geometry,float8)
276        RETURNS geometry
277        AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
278        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
279
280-- Availability: 1.2.2
281CREATEFUNCTION ST_RotateY(geometry,float8)
282        RETURNS geometry
283        AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
284        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
285
286-- Deprecation in 1.2.3
287CREATEFUNCTION Translate(geometry,float8,float8,float8)
288        RETURNS geometry
289        AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
290        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
291
292-- Availability: 1.2.2
293CREATEFUNCTION ST_Translate(geometry,float8,float8,float8)
294        RETURNS geometry
295        AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
296        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
297
298-- Deprecation in 1.2.3
299CREATEFUNCTION Translate(geometry,float8,float8)
300        RETURNS geometry
301        AS 'SELECT translate($1, $2, $3, 0)'
302        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
303
304-- Availability: 1.2.2
305CREATEFUNCTION ST_Translate(geometry,float8,float8)
306        RETURNS geometry
307        AS 'SELECT translate($1, $2, $3, 0)'
308        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
309
310-- Availability: 1.1.0
311-- Deprecation in 1.2.3
312CREATEFUNCTION Scale(geometry,float8,float8,float8)
313        RETURNS geometry
314        AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
315        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
316
317-- Availability: 1.2.2
318CREATEFUNCTION ST_Scale(geometry,float8,float8,float8)
319        RETURNS geometry
320        AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
321        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
322
323-- Availability: 1.1.0
324-- Deprecation in 1.2.3
325CREATEFUNCTION Scale(geometry,float8,float8)
326        RETURNS geometry
327        AS 'SELECT scale($1, $2, $3, 1)'
328        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
329
330-- Availability: 1.2.2
331CREATEFUNCTION ST_Scale(geometry,float8,float8)
332        RETURNS geometry
333        AS 'SELECT scale($1, $2, $3, 1)'
334        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
335
336-- Availability: 1.1.0
337-- Deprecation in 1.2.3
338CREATEFUNCTION transscale(geometry,float8,float8,float8,float8)
339        RETURNS geometry
340        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0,
341                0, 0, 1,  $2 * $4, $3 * $5, 0)'
342        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
343
344-- Availability: 1.2.2
345CREATEFUNCTION ST_transscale(geometry,float8,float8,float8,float8)
346        RETURNS geometry
347        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0,
348                0, 0, 1,  $2 * $4, $3 * $5, 0)'
349        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
350
351-- Availability: 1.1.0
352-- Deprecation in 1.2.3
353CREATEFUNCTION shift_longitude(geometry)
354        RETURNS geometry
355        AS '@MODULE_FILENAME@', 'LWGEOM_longitude_shift'
356        LANGUAGE 'C' _IMMUTABLE_STRICT;
357
358-- Availability: 1.2.2
359CREATEFUNCTION ST_shift_longitude(geometry)
360        RETURNS geometry
361        AS '@MODULE_FILENAME@', 'LWGEOM_longitude_shift'
362        LANGUAGE 'C' _IMMUTABLE_STRICT;
363
364-------------------------------------------------------------------
365--  BOX3D TYPE
366-------------------------------------------------------------------
367
368#if USE_VERSION < 73
369# define BOX3D_IN_REP opaque
370# define BOX3D_OUT_REP opaque
371#else
372# define BOX3D_IN_REP box3d
373# define BOX3D_OUT_REP cstring
374#endif
375
376-- Deprecation in 1.2.3
377CREATEFUNCTION box3d_in(BOX3D_OUT_REP)
378        RETURNS BOX3D_IN_REP
379        AS '@MODULE_FILENAME@', 'BOX3D_in'
380        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
381
382-- Deprecation in 1.2.3
383CREATEFUNCTION box3d_out(BOX3D_IN_REP)
384        RETURNS BOX3D_OUT_REP
385        AS '@MODULE_FILENAME@', 'BOX3D_out'
386        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
387
388-- Availability: 1.2.2
389CREATEFUNCTION ST_box3d_in(BOX3D_OUT_REP)
390        RETURNS BOX3D_IN_REP
391        AS '@MODULE_FILENAME@', 'BOX3D_in'
392        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
393
394-- Availability: 1.2.2
395CREATEFUNCTION ST_box3d_out(BOX3D_IN_REP)
396        RETURNS BOX3D_OUT_REP
397        AS '@MODULE_FILENAME@', 'BOX3D_out'
398        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
399
400CREATE TYPE box3d (
401        alignment = double,
402        internallength = 48,
403        input = ST_box3d_in,
404        output = ST_box3d_out
405);
406
407-- Deprecation in 1.2.3
408CREATEFUNCTION xmin(box3d)
409        RETURNS FLOAT8
410        AS '@MODULE_FILENAME@','BOX3D_xmin'
411        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
412
413-- Availability: 1.2.2
414CREATEFUNCTION ST_xmin(box3d)
415        RETURNS FLOAT8
416        AS '@MODULE_FILENAME@','BOX3D_xmin'
417        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
418
419-- Deprecation in 1.2.3
420CREATEFUNCTION ymin(box3d)
421        RETURNS FLOAT8
422        AS '@MODULE_FILENAME@','BOX3D_ymin'
423        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
424
425-- Availability: 1.2.2
426CREATEFUNCTION ST_ymin(box3d)
427        RETURNS FLOAT8
428        AS '@MODULE_FILENAME@','BOX3D_ymin'
429        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
430
431-- Deprecation in 1.2.3
432CREATEFUNCTION zmin(box3d)
433        RETURNS FLOAT8
434        AS '@MODULE_FILENAME@','BOX3D_zmin'
435        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
436
437-- Availability: 1.2.2
438CREATEFUNCTION ST_zmin(box3d)
439        RETURNS FLOAT8
440        AS '@MODULE_FILENAME@','BOX3D_zmin'
441        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
442
443-- Deprecation in 1.2.3
444CREATEFUNCTION xmax(box3d)
445        RETURNS FLOAT8
446        AS '@MODULE_FILENAME@','BOX3D_xmax'
447        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
448
449-- Availability: 1.2.2
450CREATEFUNCTION ST_xmax(box3d)
451        RETURNS FLOAT8
452        AS '@MODULE_FILENAME@','BOX3D_xmax'
453        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
454
455-- Deprecation in 1.2.3
456CREATEFUNCTION ymax(box3d)
457        RETURNS FLOAT8
458        AS '@MODULE_FILENAME@','BOX3D_ymax'
459        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
460
461-- Availability: 1.2.2
462CREATEFUNCTION ST_ymax(box3d)
463        RETURNS FLOAT8
464        AS '@MODULE_FILENAME@','BOX3D_ymax'
465        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
466
467-- Deprecation in 1.2.3
468CREATEFUNCTION zmax(box3d)
469        RETURNS FLOAT8
470        AS '@MODULE_FILENAME@','BOX3D_zmax'
471        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
472
473-- Availability: 1.2.2
474CREATEFUNCTION ST_zmax(box3d)
475        RETURNS FLOAT8
476        AS '@MODULE_FILENAME@','BOX3D_zmax'
477        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
478
479-------------------------------------------------------------------
480--  CHIP TYPE
481-------------------------------------------------------------------
482
483#if USE_VERSION < 73
484# define CHIP_IN_REP opaque
485# define CHIP_OUT_REP opaque
486#else
487# define CHIP_IN_REP chip
488# define CHIP_OUT_REP cstring
489#endif
490
491-- Deprecation in 1.2.3
492CREATEFUNCTION chip_in(CHIP_OUT_REP)
493        RETURNS CHIP_IN_REP
494        AS '@MODULE_FILENAME@','CHIP_in'
495        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
496       
497-- Availability: 1.2.2
498CREATEFUNCTION ST_chip_in(CHIP_OUT_REP)
499        RETURNS CHIP_IN_REP
500        AS '@MODULE_FILENAME@','CHIP_in'
501        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
502
503-- Deprecation in 1.2.3
504CREATEFUNCTION chip_out(CHIP_IN_REP)
505        RETURNS CHIP_OUT_REP
506        AS '@MODULE_FILENAME@','CHIP_out'
507        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
508
509-- Availability: 1.2.2
510CREATEFUNCTION ST_chip_out(CHIP_IN_REP)
511        RETURNS CHIP_OUT_REP
512        AS '@MODULE_FILENAME@','CHIP_out'
513        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
514
515CREATE TYPE chip (
516        alignment = double,
517        internallength = variable,
518        input = ST_chip_in,
519        output = ST_chip_out,
520        storage = extended
521);
522
523-----------------------------------------------------------------------
524-- BOX2D
525-----------------------------------------------------------------------
526
527
528#if USE_VERSION < 73
529# define BOX2D_IN_REP opaque
530# define BOX2D_OUT_REP opaque
531#else
532# define BOX2D_IN_REP box2d
533# define BOX2D_OUT_REP cstring
534#endif
535
536-- Deprecation in 1.2.3
537CREATEFUNCTION box2d_in(BOX2D_OUT_REP)
538        RETURNS box2d
539        AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
540        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
541
542-- Availability: 1.2.2
543CREATEFUNCTION ST_box2d_in(BOX2D_OUT_REP)
544        RETURNS box2d
545        AS '@MODULE_FILENAME@','BOX2DFLOAT4_in'
546        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
547
548-- Deprecation in 1.2.3
549CREATEFUNCTION box2d_out(BOX2D_IN_REP)
550        RETURNS cstring
551        AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
552        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
553
554-- Availability: 1.2.2
555CREATEFUNCTION ST_box2d_out(BOX2D_IN_REP)
556        RETURNS cstring
557        AS '@MODULE_FILENAME@','BOX2DFLOAT4_out'
558        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
559
560CREATE TYPE box2d (
561        internallength = 16,
562        input = ST_box2d_in,
563        output = ST_box2d_out,
564        storage = plain
565);
566
567---- BOX2D  support functions
568
569-- Deprecation in 1.2.3
570CREATEFUNCTION box2d_overleft(box2d, box2d)
571        RETURNS bool
572        AS '@MODULE_FILENAME@', 'BOX2D_overleft'
573        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
574
575-- Availability: 1.2.2
576CREATEFUNCTION ST_box2d_overleft(box2d, box2d)
577        RETURNS bool
578        AS '@MODULE_FILENAME@', 'BOX2D_overleft'
579        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
580
581-- Deprecation in 1.2.3
582CREATEFUNCTION box2d_overright(box2d, box2d)
583        RETURNS bool
584        AS '@MODULE_FILENAME@', 'BOX2D_overright'
585        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
586
587-- Availability: 1.2.2
588CREATEFUNCTION ST_box2d_overright(box2d, box2d)
589        RETURNS bool
590        AS '@MODULE_FILENAME@', 'BOX2D_overright'
591        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
592
593-- Deprecation in 1.2.3
594CREATEFUNCTION box2d_left(box2d, box2d)
595        RETURNS bool
596        AS '@MODULE_FILENAME@', 'BOX2D_left'
597        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
598
599-- Availability: 1.2.2
600CREATEFUNCTION ST_box2d_left(box2d, box2d)
601        RETURNS bool
602        AS '@MODULE_FILENAME@', 'BOX2D_left'
603        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
604
605-- Deprecation in 1.2.3
606CREATEFUNCTION box2d_right(box2d, box2d)
607        RETURNS bool
608        AS '@MODULE_FILENAME@', 'BOX2D_right'
609        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
610
611-- Availability: 1.2.2
612CREATEFUNCTION ST_box2d_right(box2d, box2d)
613        RETURNS bool
614        AS '@MODULE_FILENAME@', 'BOX2D_right'
615        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
616
617-- Deprecation in 1.2.3
618CREATEFUNCTION box2d_contain(box2d, box2d)
619        RETURNS bool
620        AS '@MODULE_FILENAME@', 'BOX2D_contain'
621        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
622
623-- Availability: 1.2.2
624CREATEFUNCTION ST_box2d_contain(box2d, box2d)
625        RETURNS bool
626        AS '@MODULE_FILENAME@', 'BOX2D_contain'
627        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
628
629-- Deprecation in 1.2.3
630CREATEFUNCTION box2d_contained(box2d, box2d)
631        RETURNS bool
632        AS '@MODULE_FILENAME@', 'BOX2D_contained'
633        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
634
635-- Availability: 1.2.2
636CREATEFUNCTION ST_box2d_contained(box2d, box2d)
637        RETURNS bool
638        AS '@MODULE_FILENAME@', 'BOX2D_contained'
639        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
640
641-- Deprecation in 1.2.3
642CREATEFUNCTION box2d_overlap(box2d, box2d)
643        RETURNS bool
644        AS '@MODULE_FILENAME@', 'BOX2D_overlap'
645        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
646
647-- Availability: 1.2.2
648CREATEFUNCTION ST_box2d_overlap(box2d, box2d)
649        RETURNS bool
650        AS '@MODULE_FILENAME@', 'BOX2D_overlap'
651        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
652
653-- Deprecation in 1.2.3
654CREATEFUNCTION box2d_same(box2d, box2d)
655        RETURNS bool
656        AS '@MODULE_FILENAME@', 'BOX2D_same'
657        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
658
659-- Availability: 1.2.2
660CREATEFUNCTION ST_box2d_same(box2d, box2d)
661        RETURNS bool
662        AS '@MODULE_FILENAME@', 'BOX2D_same'
663        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
664
665-- Deprecation in 1.2.3
666CREATEFUNCTION box2d_intersects(box2d, box2d)
667        RETURNS bool
668        AS '@MODULE_FILENAME@', 'BOX2D_intersects'
669        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
670
671-- Availability: 1.2.2
672CREATEFUNCTION ST_box2d_intersects(box2d, box2d)
673        RETURNS bool
674        AS '@MODULE_FILENAME@', 'BOX2D_intersects'
675        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
676
677
678-- lwgeom  operator support functions
679
680-------------------------------------------------------------------
681-- BTREE indexes
682-------------------------------------------------------------------
683
684-- Deprecation in 1.2.3
685CREATEFUNCTION geometry_lt(geometry, geometry)
686        RETURNS bool
687        AS '@MODULE_FILENAME@', 'lwgeom_lt'
688        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
689
690-- Availability: 1.2.2
691CREATEFUNCTION ST_geometry_lt(geometry, geometry)
692        RETURNS bool
693        AS '@MODULE_FILENAME@', 'lwgeom_lt'
694        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
695
696-- Deprecation in 1.2.3
697CREATEFUNCTION geometry_le(geometry, geometry)
698        RETURNS bool
699        AS '@MODULE_FILENAME@', 'lwgeom_le'
700        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
701
702-- Availability: 1.2.2
703CREATEFUNCTION ST_geometry_le(geometry, geometry)
704        RETURNS bool
705        AS '@MODULE_FILENAME@', 'lwgeom_le'
706        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
707
708-- Deprecation in 1.2.3
709CREATEFUNCTION geometry_gt(geometry, geometry)
710        RETURNS bool
711        AS '@MODULE_FILENAME@', 'lwgeom_gt'
712        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
713
714-- Availability: 1.2.2
715CREATEFUNCTION ST_geometry_gt(geometry, geometry)
716        RETURNS bool
717        AS '@MODULE_FILENAME@', 'lwgeom_gt'
718        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
719
720-- Deprecation in 1.2.3
721CREATEFUNCTION geometry_ge(geometry, geometry)
722        RETURNS bool
723        AS '@MODULE_FILENAME@', 'lwgeom_ge'
724        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
725
726-- Availability: 1.2.2
727CREATEFUNCTION ST_geometry_ge(geometry, geometry)
728        RETURNS bool
729        AS '@MODULE_FILENAME@', 'lwgeom_ge'
730        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
731
732-- Deprecation in 1.2.3
733CREATEFUNCTION geometry_eq(geometry, geometry)
734        RETURNS bool
735        AS '@MODULE_FILENAME@', 'lwgeom_eq'
736        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
737
738-- Availability: 1.2.2
739CREATEFUNCTION ST_geometry_eq(geometry, geometry)
740        RETURNS bool
741        AS '@MODULE_FILENAME@', 'lwgeom_eq'
742        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
743
744-- Deprecation in 1.2.3
745CREATEFUNCTION geometry_cmp(geometry, geometry)
746        RETURNS integer
747        AS '@MODULE_FILENAME@', 'lwgeom_cmp'
748        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
749
750-- Availability: 1.2.2
751CREATEFUNCTION ST_geometry_cmp(geometry, geometry)
752        RETURNS integer
753        AS '@MODULE_FILENAME@', 'lwgeom_cmp'
754        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
755
756--
757-- Sorting operators for Btree
758--
759
760CREATE OPERATOR < (
761   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_lt,
762   COMMUTATOR = '>', NEGATOR = '>=',
763   RESTRICT = contsel, JOIN = contjoinsel
764);
765
766CREATE OPERATOR <= (
767   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_le,
768   COMMUTATOR = '>=', NEGATOR = '>',
769   RESTRICT = contsel, JOIN = contjoinsel
770);
771
772CREATE OPERATOR = (
773   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_eq,
774   COMMUTATOR = '=', -- we might implement a faster negator here
775   RESTRICT = contsel, JOIN = contjoinsel
776);
777
778CREATE OPERATOR >= (
779   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_ge,
780   COMMUTATOR = '<=', NEGATOR = '<',
781   RESTRICT = contsel, JOIN = contjoinsel
782);
783CREATE OPERATOR > (
784   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_gt,
785   COMMUTATOR = '<', NEGATOR = '<=',
786   RESTRICT = contsel, JOIN = contjoinsel
787);
788
789#if USE_VERSION >= 74
790
791CREATE OPERATOR CLASS btree_geometry_ops
792        DEFAULT FOR TYPE geometry USING btree AS
793        OPERATOR        1       < ,
794        OPERATOR        2       <= ,
795        OPERATOR        3       = ,
796        OPERATOR        4       >= ,
797        OPERATOR        5       > ,
798        FUNCTION        1       geometry_cmp (geometry, geometry);
799
800#endif
801
802
803-------------------------------------------------------------------
804-- GiST indexes
805-------------------------------------------------------------------
806-- Deprecation in 1.2.3
807#if USE_VERSION < 73
808CREATEFUNCTION postgis_gist_sel(opaque, oid,  opaque, int4)
809#else
810CREATEFUNCTION postgis_gist_sel (internal, oid, internal, int4)
811#endif
812        RETURNS float8
813        AS '@MODULE_FILENAME@', 'LWGEOM_gist_sel'
814        LANGUAGE 'C';
815
816-- Availability: 1.2.2
817#if USE_VERSION < 73
818CREATEFUNCTION ST_postgis_gist_sel(opaque, oid,  opaque, int4)
819#else
820CREATEFUNCTION ST_postgis_gist_sel (internal, oid, internal, int4)
821#endif
822        RETURNS float8
823        AS '@MODULE_FILENAME@', 'LWGEOM_gist_sel'
824        LANGUAGE 'C';
825
826-- Deprecation in 1.2.3
827#if USE_VERSION == 72
828CREATEFUNCTION postgis_gist_joinsel(opaque, oid,  opaque)
829#elif USE_VERSION == 73
830CREATEFUNCTION postgis_gist_joinsel(internal, oid,  internal)
831#else
832CREATEFUNCTION postgis_gist_joinsel(internal, oid, internal, smallint)
833#endif
834        RETURNS float8
835        AS '@MODULE_FILENAME@', 'LWGEOM_gist_joinsel'
836        LANGUAGE 'C';
837
838-- Availability: 1.2.2
839#if USE_VERSION == 72
840CREATEFUNCTION ST_postgis_gist_joinsel(opaque, oid,  opaque)
841#elif USE_VERSION == 73
842CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid,  internal)
843#else
844CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid, internal, smallint)
845#endif
846        RETURNS float8
847        AS '@MODULE_FILENAME@', 'LWGEOM_gist_joinsel'
848        LANGUAGE 'C';
849
850-- Deprecation in 1.2.3
851CREATEFUNCTION geometry_overleft(geometry, geometry)
852        RETURNS bool
853        AS '@MODULE_FILENAME@', 'LWGEOM_overleft'
854        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
855
856-- Availability: 1.2.2
857CREATEFUNCTION ST_geometry_overleft(geometry, geometry)
858        RETURNS bool
859        AS '@MODULE_FILENAME@', 'LWGEOM_overleft'
860        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
861
862-- Deprecation in 1.2.3
863CREATEFUNCTION geometry_overright(geometry, geometry)
864        RETURNS bool
865        AS '@MODULE_FILENAME@', 'LWGEOM_overright'
866        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
867
868-- Availability: 1.2.2
869CREATEFUNCTION ST_geometry_overright(geometry, geometry)
870        RETURNS bool
871        AS '@MODULE_FILENAME@', 'LWGEOM_overright'
872        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
873
874-- Deprecation in 1.2.3
875CREATEFUNCTION geometry_overabove(geometry, geometry)
876        RETURNS bool
877        AS '@MODULE_FILENAME@', 'LWGEOM_overabove'
878        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
879
880-- Availability: 1.2.2
881CREATEFUNCTION ST_geometry_overabove(geometry, geometry)
882        RETURNS bool
883        AS '@MODULE_FILENAME@', 'LWGEOM_overabove'
884        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
885
886-- Deprecation in 1.2.3
887CREATEFUNCTION geometry_overbelow(geometry, geometry)
888        RETURNS bool
889        AS '@MODULE_FILENAME@', 'LWGEOM_overbelow'
890        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
891
892-- Availability: 1.2.2
893CREATEFUNCTION ST_geometry_overbelow(geometry, geometry)
894        RETURNS bool
895        AS '@MODULE_FILENAME@', 'LWGEOM_overbelow'
896        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
897
898-- Deprecation in 1.2.3
899CREATEFUNCTION geometry_left(geometry, geometry)
900        RETURNS bool
901        AS '@MODULE_FILENAME@', 'LWGEOM_left'
902        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
903
904-- Availability: 1.2.2
905CREATEFUNCTION ST_geometry_left(geometry, geometry)
906        RETURNS bool
907        AS '@MODULE_FILENAME@', 'LWGEOM_left'
908        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
909
910-- Deprecation in 1.2.3
911CREATEFUNCTION geometry_right(geometry, geometry)
912        RETURNS bool
913        AS '@MODULE_FILENAME@', 'LWGEOM_right'
914        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
915
916-- Availability: 1.2.2
917CREATEFUNCTION ST_geometry_right(geometry, geometry)
918        RETURNS bool
919        AS '@MODULE_FILENAME@', 'LWGEOM_right'
920        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
921
922-- Deprecation in 1.2.3
923CREATEFUNCTION geometry_above(geometry, geometry)
924        RETURNS bool
925        AS '@MODULE_FILENAME@', 'LWGEOM_above'
926        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
927
928-- Availability: 1.2.2
929CREATEFUNCTION ST_geometry_above(geometry, geometry)
930        RETURNS bool
931        AS '@MODULE_FILENAME@', 'LWGEOM_above'
932        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
933
934-- Deprecation in 1.2.3
935CREATEFUNCTION geometry_below(geometry, geometry)
936        RETURNS bool
937        AS '@MODULE_FILENAME@', 'LWGEOM_below'
938        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
939
940-- Availability: 1.2.2
941CREATEFUNCTION ST_geometry_below(geometry, geometry)
942        RETURNS bool
943        AS '@MODULE_FILENAME@', 'LWGEOM_below'
944        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
945
946-- Deprecation in 1.2.3
947CREATEFUNCTION geometry_contain(geometry, geometry)
948        RETURNS bool
949        AS '@MODULE_FILENAME@', 'LWGEOM_contain'
950        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
951
952-- Availability: 1.2.2
953CREATEFUNCTION ST_geometry_contain(geometry, geometry)
954        RETURNS bool
955        AS '@MODULE_FILENAME@', 'LWGEOM_contain'
956        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
957
958-- Deprecation in 1.2.3
959CREATEFUNCTION geometry_contained(geometry, geometry)
960        RETURNS bool
961        AS '@MODULE_FILENAME@', 'LWGEOM_contained'
962        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
963
964-- Availability: 1.2.2
965CREATEFUNCTION ST_geometry_contained(geometry, geometry)
966        RETURNS bool
967        AS '@MODULE_FILENAME@', 'LWGEOM_contained'
968        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
969
970-- Deprecation in 1.2.3
971CREATEFUNCTION geometry_overlap(geometry, geometry)
972        RETURNS bool
973        AS '@MODULE_FILENAME@', 'LWGEOM_overlap'
974        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
975
976-- Availability: 1.2.2
977CREATEFUNCTION ST_geometry_overlap(geometry, geometry)
978        RETURNS bool
979        AS '@MODULE_FILENAME@', 'LWGEOM_overlap'
980        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
981
982-- Deprecation in 1.2.3
983CREATEFUNCTION geometry_same(geometry, geometry)
984        RETURNS bool
985        AS '@MODULE_FILENAME@', 'LWGEOM_same'
986        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
987
988--Availability: 1.2.2
989CREATEFUNCTION ST_geometry_same(geometry, geometry)
990        RETURNS bool
991        AS '@MODULE_FILENAME@', 'LWGEOM_same'
992        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
993
994-- GEOMETRY operators
995
996CREATE OPERATOR << (
997   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_left,
998   COMMUTATOR = '>>',
999   RESTRICT = positionsel, JOIN = positionjoinsel
1000);
1001
1002CREATE OPERATOR &< (
1003   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overleft,
1004   COMMUTATOR = '&>',
1005   RESTRICT = positionsel, JOIN = positionjoinsel
1006);
1007
1008CREATE OPERATOR <<| (
1009   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_below,
1010   COMMUTATOR = '|>>',
1011   RESTRICT = positionsel, JOIN = positionjoinsel
1012);
1013
1014CREATE OPERATOR &<| (
1015   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overbelow,
1016   COMMUTATOR = '|&>',
1017   RESTRICT = positionsel, JOIN = positionjoinsel
1018);
1019
1020CREATE OPERATOR && (
1021   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overlap,
1022   COMMUTATOR = '&&',
1023   RESTRICT = ST_postgis_gist_sel, JOIN = ST_postgis_gist_joinsel
1024);
1025
1026CREATE OPERATOR &> (
1027   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overright,
1028   COMMUTATOR = '&<',
1029   RESTRICT = positionsel, JOIN = positionjoinsel
1030);
1031
1032CREATE OPERATOR >> (
1033   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_right,
1034   COMMUTATOR = '<<',
1035   RESTRICT = positionsel, JOIN = positionjoinsel
1036);
1037
1038CREATE OPERATOR |&> (
1039   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overabove,
1040   COMMUTATOR = '&<|',
1041   RESTRICT = positionsel, JOIN = positionjoinsel
1042);
1043
1044CREATE OPERATOR |>> (
1045   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_above,
1046   COMMUTATOR = '<<|',
1047   RESTRICT = positionsel, JOIN = positionjoinsel
1048);
1049
1050CREATE OPERATOR ~= (
1051   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_same,
1052   COMMUTATOR = '~=',
1053   RESTRICT = eqsel, JOIN = eqjoinsel
1054);
1055
1056CREATE OPERATOR @ (
1057   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contained,
1058   COMMUTATOR = '~',
1059   RESTRICT = contsel, JOIN = contjoinsel
1060);
1061
1062CREATE OPERATOR ~ (
1063   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contain,
1064   COMMUTATOR = '@',
1065   RESTRICT = contsel, JOIN = contjoinsel
1066);
1067
1068-- gist support functions
1069
1070#if USE_VERSION < 73
1071#define OPAQUE_TYPE opaque
1072#else
1073#define OPAQUE_TYPE internal
1074#endif
1075
1076CREATEFUNCTION LWGEOM_gist_consistent(OPAQUE_TYPE,geometry,int4)
1077        RETURNS bool
1078        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_consistent'
1079        LANGUAGE 'C';
1080
1081CREATEFUNCTION LWGEOM_gist_compress(OPAQUE_TYPE)
1082        RETURNS OPAQUE_TYPE
1083        AS '@MODULE_FILENAME@','LWGEOM_gist_compress'
1084        LANGUAGE 'C';
1085
1086CREATEFUNCTION LWGEOM_gist_penalty(OPAQUE_TYPE,OPAQUE_TYPE,OPAQUE_TYPE)
1087        RETURNS OPAQUE_TYPE
1088        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_penalty'
1089        LANGUAGE 'C';
1090
1091CREATEFUNCTION LWGEOM_gist_picksplit(OPAQUE_TYPE, OPAQUE_TYPE)
1092        RETURNS OPAQUE_TYPE
1093        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_picksplit'
1094        LANGUAGE 'C';
1095
1096CREATEFUNCTION LWGEOM_gist_union(bytea, OPAQUE_TYPE)
1097        RETURNS OPAQUE_TYPE
1098        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_union'
1099        LANGUAGE 'C';
1100
1101CREATEFUNCTION LWGEOM_gist_same(box2d, box2d, OPAQUE_TYPE)
1102        RETURNS OPAQUE_TYPE
1103        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_same'
1104        LANGUAGE 'C';
1105
1106CREATEFUNCTION LWGEOM_gist_decompress(OPAQUE_TYPE)
1107        RETURNS OPAQUE_TYPE
1108        AS '@MODULE_FILENAME@' ,'LWGEOM_gist_decompress'
1109        LANGUAGE 'C';
1110
1111-------------------------------------------
1112-- GIST opclass index binding entries.
1113-------------------------------------------
1114
1115#if USE_VERSION == 72
1116
1117--
1118-- Create opclass index binding entries for PG72
1119--
1120
1121INSERT INTO pg_opclass (opcamid, opcname, opcintype, opcdefault, opckeytype)
1122    VALUES (
1123        (SELECT oid FROM pg_am WHERE amname = 'gist'),
1124        'gist_geometry_ops',
1125        (SELECT oid FROM pg_type WHERE typname = 'geometry'),
1126        true,
1127        (SELECT oid FROM pg_type WHERE typname = 'box2d'));
1128
1129-- drop table rt_ops_tmp;
1130
1131SELECT o.oid AS opoid, o.oprname
1132        INTO TABLE rt_ops_tmp
1133        FROM pg_operator o, pg_type t
1134        WHERE o.oprleft = t.oid
1135                AND t.typname = 'geometry';
1136
1137-- poly_left
1138INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1139   SELECT opcl.oid, 1, true, c.opoid
1140   FROM pg_opclass opcl, rt_ops_tmp c
1141   WHERE
1142      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1143      and opcname = 'gist_geometry_ops'
1144      and c.oprname = '<<';
1145
1146-- poly_overleft
1147INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1148   SELECT opcl.oid, 2, true, c.opoid
1149   FROM pg_opclass opcl, rt_ops_tmp c
1150   WHERE
1151      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1152      and opcname = 'gist_geometry_ops'
1153      and c.oprname = '&<';
1154
1155-- poly_overlap
1156INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1157   SELECT opcl.oid, 3, true, c.opoid
1158   FROM pg_opclass opcl, rt_ops_tmp c
1159   WHERE
1160      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1161      and opcname = 'gist_geometry_ops'
1162      and c.oprname = '&&';
1163
1164-- poly_overright
1165INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1166   SELECT opcl.oid, 4, true, c.opoid
1167   FROM pg_opclass opcl, rt_ops_tmp c
1168   WHERE
1169      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1170      and opcname = 'gist_geometry_ops'
1171      and c.oprname = '&>';
1172
1173-- poly_right
1174INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1175   SELECT opcl.oid, 5, true, c.opoid
1176   FROM pg_opclass opcl, rt_ops_tmp c
1177   WHERE
1178      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1179      and opcname = 'gist_geometry_ops'
1180      and c.oprname = '>>';
1181
1182-- poly_same
1183INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1184   SELECT opcl.oid, 6, true, c.opoid
1185   FROM pg_opclass opcl, rt_ops_tmp c
1186   WHERE
1187      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1188      and opcname = 'gist_geometry_ops'
1189      and c.oprname = '~=';
1190
1191-- poly_contains
1192INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1193   SELECT opcl.oid, 7, true, c.opoid
1194   FROM pg_opclass opcl, rt_ops_tmp c
1195   WHERE
1196      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1197      and opcname = 'gist_geometry_ops'
1198      and c.oprname = '~';
1199
1200-- poly_contained
1201INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1202   SELECT opcl.oid, 8, true, c.opoid
1203   FROM pg_opclass opcl, rt_ops_tmp c
1204   WHERE
1205      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1206      and opcname = 'gist_geometry_ops'
1207      and c.oprname = '@';
1208
1209-- poly_overbelow
1210INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1211   SELECT opcl.oid, 9, true, c.opoid
1212   FROM pg_opclass opcl, rt_ops_tmp c
1213   WHERE
1214      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1215      and opcname = 'gist_geometry_ops'
1216      and c.oprname = '&<|';
1217
1218-- poly_below
1219INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1220   SELECT opcl.oid, 10, true, c.opoid
1221   FROM pg_opclass opcl, rt_ops_tmp c
1222   WHERE
1223      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1224      and opcname = 'gist_geometry_ops'
1225      and c.oprname = '<<|';
1226
1227-- poly_above
1228INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1229   SELECT opcl.oid, 11, true, c.opoid
1230   FROM pg_opclass opcl, rt_ops_tmp c
1231   WHERE
1232      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1233      and opcname = 'gist_geometry_ops'
1234      and c.oprname = '|>>';
1235
1236-- poly_overabove
1237INSERT INTO pg_amop (amopclaid, amopstrategy, amopreqcheck, amopopr)
1238   SELECT opcl.oid, 12, true, c.opoid
1239   FROM pg_opclass opcl, rt_ops_tmp c
1240   WHERE
1241      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1242      and opcname = 'gist_geometry_ops'
1243      and c.oprname = '|&>';
1244
1245DROP TABLE rt_ops_tmp;
1246
1247
1248-- add the entries to amproc for the support methods
1249-- note the amprocnum numbers associated with each are specific!
1250INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1251   SELECT opcl.oid, 1, pro.oid
1252   FROM pg_opclass opcl, pg_proc pro
1253   WHERE
1254      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1255      and opcname = 'gist_geometry_ops'
1256      and proname = 'lwgeom_gist_consistent';
1257
1258INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1259   SELECT opcl.oid, 2, pro.oid
1260   FROM pg_opclass opcl, pg_proc pro
1261   WHERE
1262      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1263      and opcname = 'gist_geometry_ops'
1264      and proname = 'lwgeom_gist_union';
1265
1266INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1267   SELECT opcl.oid, 3, pro.oid
1268   FROM pg_opclass opcl, pg_proc pro
1269   WHERE
1270      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1271      and opcname = 'gist_geometry_ops'
1272      and proname = 'lwgeom_gist_compress';
1273
1274INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1275   SELECT opcl.oid, 4, pro.oid
1276   FROM pg_opclass opcl, pg_proc pro
1277   WHERE
1278      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1279      and opcname = 'gist_geometry_ops'
1280      and proname = 'lwgeom_gist_decompress';
1281
1282INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1283   SELECT opcl.oid, 5, pro.oid
1284   FROM pg_opclass opcl, pg_proc pro
1285   WHERE
1286      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1287      and opcname = 'gist_geometry_ops'
1288      and proname = 'lwgeom_gist_penalty';
1289
1290INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1291   SELECT opcl.oid, 6, pro.oid
1292   FROM pg_opclass opcl, pg_proc pro
1293   WHERE
1294      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1295      and opcname = 'gist_geometry_ops'
1296      and proname = 'lwgeom_gist_picksplit';
1297
1298INSERT INTO pg_amproc (amopclaid, amprocnum, amproc)
1299   SELECT opcl.oid, 7, pro.oid
1300   FROM pg_opclass opcl, pg_proc pro
1301   WHERE
1302      opcamid = (SELECT oid FROM pg_am WHERE amname = 'gist')
1303      and opcname = 'gist_geometry_ops'
1304      and proname = 'lwgeom_gist_same';
1305
1306#else
1307
1308--
1309-- Create opclass index bindings for PG>=73
1310--
1311
1312CREATE OPERATOR CLASS gist_geometry_ops
1313        DEFAULT FOR TYPE geometry USING gist AS
1314        OPERATOR        1        <<     RECHECK,
1315        OPERATOR        2        &<     RECHECK,
1316        OPERATOR        3        &&     RECHECK,
1317        OPERATOR        4        &>     RECHECK,
1318        OPERATOR        5        >>     RECHECK,
1319        OPERATOR        6        ~=     RECHECK,
1320        OPERATOR        7        ~      RECHECK,
1321        OPERATOR        8        @      RECHECK,
1322        OPERATOR        9        &<|    RECHECK,
1323        OPERATOR        10       <<|    RECHECK,
1324        OPERATOR        11       |>>    RECHECK,
1325        OPERATOR        12       |&>    RECHECK,
1326        FUNCTION        1        LWGEOM_gist_consistent (internal, geometry, int4),
1327        FUNCTION        2        LWGEOM_gist_union (bytea, internal),
1328        FUNCTION        3        LWGEOM_gist_compress (internal),
1329        FUNCTION        4        LWGEOM_gist_decompress (internal),
1330        FUNCTION        5        LWGEOM_gist_penalty (internal, internal, internal),
1331        FUNCTION        6        LWGEOM_gist_picksplit (internal, internal),
1332        FUNCTION        7        LWGEOM_gist_same (box2d, box2d, internal);
1333
1334UPDATE pg_opclass
1335        SET opckeytype = (SELECT oid FROM pg_type
1336                          WHERE typname = 'box2d'
1337                          AND typnamespace = (SELECT oid FROM pg_namespace
1338                                              WHERE nspname=current_schema()))
1339        WHERE opcname = 'gist_geometry_ops'
1340        AND opcnamespace = (SELECT oid from pg_namespace
1341                            WHERE nspname=current_schema());
1342       
1343-- TODO: add btree binding...
1344
1345#endif
1346       
1347-------------------------------------------
1348-- other lwgeom functions
1349-------------------------------------------
1350
1351-- Deprecation in 1.2.3
1352CREATEFUNCTION addBBOX(geometry)
1353        RETURNS geometry
1354        AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
1355        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1356
1357-- Availability: 1.2.2
1358CREATEFUNCTION ST_addBBOX(geometry)
1359        RETURNS geometry
1360        AS '@MODULE_FILENAME@','LWGEOM_addBBOX'
1361        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1362
1363-- Deprecation in 1.2.3
1364CREATEFUNCTION dropBBOX(geometry)
1365        RETURNS geometry
1366        AS '@MODULE_FILENAME@','LWGEOM_dropBBOX'
1367        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1368
1369-- Availability: 1.2.2
1370CREATEFUNCTION ST_dropBBOX(geometry)
1371        RETURNS geometry
1372        AS '@MODULE_FILENAME@','LWGEOM_dropBBOX'
1373        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1374       
1375-- Deprecation in 1.2.3
1376CREATEFUNCTION getSRID(geometry)
1377        RETURNS int4
1378        AS '@MODULE_FILENAME@','LWGEOM_getSRID'
1379        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1380
1381-- Availability: 1.2.2
1382CREATEFUNCTION getSRID(geometry)
1383        RETURNS int4
1384        AS '@MODULE_FILENAME@','LWGEOM_getSRID'
1385        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1386
1387-- Deprecation in 1.2.3
1388CREATEFUNCTION getBBOX(geometry)
1389        RETURNS box2d
1390        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
1391        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1392
1393-- Availability: 1.2.2
1394CREATEFUNCTION getBBOX(geometry)
1395        RETURNS box2d
1396        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
1397        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1398
1399-------------------------------------------
1400--- CHIP functions
1401-------------------------------------------
1402
1403-- Deprecation in 1.2.3
1404CREATEFUNCTION srid(chip)
1405        RETURNS int4
1406        AS '@MODULE_FILENAME@','CHIP_getSRID'
1407        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1408
1409-- Availability: 1.2.2
1410CREATEFUNCTION ST_srid(chip)
1411        RETURNS int4
1412        AS '@MODULE_FILENAME@','CHIP_getSRID'
1413        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1414
1415-- Deprecation in 1.2.3
1416CREATEFUNCTION height(chip)
1417        RETURNS int4
1418        AS '@MODULE_FILENAME@','CHIP_getHeight'
1419        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1420
1421-- Availability: 1.2.2
1422CREATEFUNCTION ST_height(chip)
1423        RETURNS int4
1424        AS '@MODULE_FILENAME@','CHIP_getHeight'
1425        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1426
1427-- Deprecation in 1.2.3
1428CREATEFUNCTION factor(chip)
1429        RETURNS FLOAT4
1430        AS '@MODULE_FILENAME@','CHIP_getFactor'
1431        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1432
1433-- Availability: 1.2.2
1434CREATEFUNCTION ST_factor(chip)
1435        RETURNS FLOAT4
1436        AS '@MODULE_FILENAME@','CHIP_getFactor'
1437        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1438
1439-- Deprecation in 1.2.3
1440CREATEFUNCTION width(chip)
1441        RETURNS int4
1442        AS '@MODULE_FILENAME@','CHIP_getWidth'
1443        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1444
1445-- Availability: 1.2.2
1446CREATEFUNCTION ST_width(chip)
1447        RETURNS int4
1448        AS '@MODULE_FILENAME@','CHIP_getWidth'
1449        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1450
1451-- Deprecation in 1.2.3
1452CREATEFUNCTION datatype(chip)
1453        RETURNS int4
1454        AS '@MODULE_FILENAME@','CHIP_getDatatype'
1455        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1456
1457-- Availability: 1.2.2
1458CREATEFUNCTION ST_datatype(chip)
1459        RETURNS int4
1460        AS '@MODULE_FILENAME@','CHIP_getDatatype'
1461        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1462
1463-- Deprecation in 1.2.3
1464CREATEFUNCTION compression(chip)
1465        RETURNS int4
1466        AS '@MODULE_FILENAME@','CHIP_getCompression'
1467        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1468
1469-- Availability: 1.2.2
1470CREATEFUNCTION ST_compression(chip)
1471        RETURNS int4
1472        AS '@MODULE_FILENAME@','CHIP_getCompression'
1473        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1474
1475-- Deprecation in 1.2.3
1476CREATEFUNCTION setSRID(chip,int4)
1477        RETURNS chip
1478        AS '@MODULE_FILENAME@','CHIP_setSRID'
1479        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1480
1481-- Deprecation in 1.2.3
1482CREATEFUNCTION setFactor(chip,float4)
1483        RETURNS chip
1484        AS '@MODULE_FILENAME@','CHIP_setFactor'
1485        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1486
1487-- Availability: 1.2.2
1488CREATEFUNCTION ST_setFactor(chip,float4)
1489        RETURNS chip
1490        AS '@MODULE_FILENAME@','CHIP_setFactor'
1491        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1492
1493------------------------------------------------------------------------
1494-- DEBUG
1495------------------------------------------------------------------------
1496
1497-- Deprecation in 1.2.3
1498CREATEFUNCTION mem_size(geometry)
1499        RETURNS int4
1500        AS '@MODULE_FILENAME@', 'LWGEOM_mem_size'
1501        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1502
1503-- Availability: 1.2.2
1504CREATEFUNCTION ST_mem_size(geometry)
1505        RETURNS int4
1506        AS '@MODULE_FILENAME@', 'LWGEOM_mem_size'
1507        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1508
1509-- Deprecation in 1.2.3
1510CREATEFUNCTION summary(geometry)
1511        RETURNS text
1512        AS '@MODULE_FILENAME@', 'LWGEOM_summary'
1513        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1514
1515-- Availability: 1.2.2
1516CREATEFUNCTION ST_summary(geometry)
1517        RETURNS text
1518        AS '@MODULE_FILENAME@', 'LWGEOM_summary'
1519        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1520
1521-- Deprecation in 1.2.3
1522CREATEFUNCTION npoints(geometry)
1523        RETURNS int4
1524        AS '@MODULE_FILENAME@', 'LWGEOM_npoints'
1525        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1526
1527-- Availability: 1.2.2
1528CREATEFUNCTION ST_npoints(geometry)
1529        RETURNS int4
1530        AS '@MODULE_FILENAME@', 'LWGEOM_npoints'
1531        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1532
1533-- Deprecation in 1.2.3
1534CREATEFUNCTION nrings(geometry)
1535        RETURNS int4
1536        AS '@MODULE_FILENAME@', 'LWGEOM_nrings'
1537        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1538
1539-- Availability: 1.2.2
1540CREATEFUNCTION ST_nrings(geometry)
1541        RETURNS int4
1542        AS '@MODULE_FILENAME@', 'LWGEOM_nrings'
1543        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1544
1545------------------------------------------------------------------------
1546-- Misures
1547------------------------------------------------------------------------
1548
1549-- this is a fake (for back-compatibility)
1550-- uses 3d if 3d is available, 2d otherwise
1551-- Deprecation in 1.2.3
1552CREATEFUNCTION length3d(geometry)
1553        RETURNS FLOAT8
1554        AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
1555        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1556
1557-- Availability: 1.2.2
1558CREATEFUNCTION ST_length3d(geometry)
1559        RETURNS FLOAT8
1560        AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
1561        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1562
1563-- Deprecation in 1.2.3
1564CREATEFUNCTION length2d(geometry)
1565        RETURNS FLOAT8
1566        AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
1567        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1568
1569-- Availability: 1.2.2
1570CREATEFUNCTION ST_length2d(geometry)
1571        RETURNS FLOAT8
1572        AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
1573        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1574
1575CREATEFUNCTION length(geometry)
1576        RETURNS FLOAT8
1577        AS '@MODULE_FILENAME@', 'LWGEOM_length_linestring'
1578        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1579
1580-- PostGIS equivalent function: length2d(geometry)
1581CREATEFUNCTION ST_Length(geometry)
1582        RETURNS FLOAT8
1583        AS '@MODULE_FILENAME@', 'LWGEOM_length2d_linestring'
1584        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1585
1586-- this is a fake (for back-compatibility)
1587-- uses 3d if 3d is available, 2d otherwise
1588-- Deprecation in 1.2.3
1589CREATEFUNCTION length3d_spheroid(geometry, spheroid)
1590        RETURNS FLOAT8
1591        AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
1592        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1593
1594-- Availability: 1.2.2
1595CREATEFUNCTION ST_length3d_spheroid(geometry, spheroid)
1596        RETURNS FLOAT8
1597        AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
1598        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1599
1600-- Deprecation in 1.2.3
1601CREATEFUNCTION length_spheroid(geometry, spheroid)
1602        RETURNS FLOAT8
1603        AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
1604        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1605
1606-- Availability: 1.2.2
1607CREATEFUNCTION ST_length_spheroid(geometry, spheroid)
1608        RETURNS FLOAT8
1609        AS '@MODULE_FILENAME@','LWGEOM_length_ellipsoid_linestring'
1610        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1611
1612-- Deprecation in 1.2.3
1613CREATEFUNCTION length2d_spheroid(geometry, spheroid)
1614        RETURNS FLOAT8
1615        AS '@MODULE_FILENAME@','LWGEOM_length2d_ellipsoid_linestring'
1616        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1617
1618-- Availability: 1.2.2
1619CREATEFUNCTION ST_length2d_spheroid(geometry, spheroid)
1620        RETURNS FLOAT8
1621        AS '@MODULE_FILENAME@','LWGEOM_length2d_ellipsoid_linestring'
1622        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1623
1624-- this is a fake (for back-compatibility)
1625-- uses 3d if 3d is available, 2d otherwise
1626-- Deprecation in 1.2.3
1627CREATEFUNCTION perimeter3d(geometry)
1628        RETURNS FLOAT8
1629        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
1630        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1631
1632-- Availability: 1.2.2
1633CREATEFUNCTION ST_perimeter3d(geometry)
1634        RETURNS FLOAT8
1635        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
1636        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1637
1638-- Deprecation in 1.2.3
1639CREATEFUNCTION perimeter2d(geometry)
1640        RETURNS FLOAT8
1641        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
1642        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1643
1644-- Availability: 1.2.2
1645CREATEFUNCTION ST_perimeter2d(geometry)
1646        RETURNS FLOAT8
1647        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
1648        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1649
1650-- Deprecation in 1.2.3
1651CREATEFUNCTION perimeter(geometry)
1652        RETURNS FLOAT8
1653        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter_poly'
1654        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1655
1656-- PostGIS equivalent function: perimeter2d(geometry)
1657CREATEFUNCTION ST_Perimeter(geometry)
1658        RETURNS FLOAT8
1659        AS '@MODULE_FILENAME@', 'LWGEOM_perimeter2d_poly'
1660        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1661
1662-- this is an alias for 'area(geometry)'
1663-- there is nothing such an 'area3d'...
1664-- Deprecation in 1.2.3
1665CREATEFUNCTION area2d(geometry)
1666        RETURNS FLOAT8
1667        AS '@MODULE_FILENAME@', 'LWGEOM_area_polygon'
1668        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1669
1670-- Availability: 1.2.2
1671CREATEFUNCTION ST_area2d(geometry)
1672        RETURNS FLOAT8
1673        AS '@MODULE_FILENAME@', 'LWGEOM_area_polygon'
1674        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1675
1676-- Deprecation in 1.2.3
1677CREATEFUNCTION area(geometry)
1678        RETURNS FLOAT8
1679        AS '@MODULE_FILENAME@','LWGEOM_area_polygon'
1680        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1681
1682-- PostGIS equivalent function: area(geometry)
1683CREATEFUNCTION ST_Area(geometry)
1684        RETURNS FLOAT8
1685        AS '@MODULE_FILENAME@','LWGEOM_area_polygon'
1686        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1687
1688-- Deprecation in 1.2.3
1689CREATEFUNCTION distance_spheroid(geometry,geometry,spheroid)
1690        RETURNS FLOAT8
1691        AS '@MODULE_FILENAME@','LWGEOM_distance_ellipsoid_point'
1692        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1693
1694-- Availability: 1.2.2
1695CREATEFUNCTION ST_distance_spheroid(geometry,geometry,spheroid)
1696        RETURNS FLOAT8
1697        AS '@MODULE_FILENAME@','LWGEOM_distance_ellipsoid_point'
1698        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1699
1700-- Deprecation in 1.2.3
1701CREATEFUNCTION distance_sphere(geometry,geometry)
1702        RETURNS FLOAT8
1703        AS '@MODULE_FILENAME@','LWGEOM_distance_sphere'
1704        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1705
1706-- Availability: 1.2.2
1707CREATEFUNCTION ST_distance_sphere(geometry,geometry)
1708        RETURNS FLOAT8
1709        AS '@MODULE_FILENAME@','LWGEOM_distance_sphere'
1710        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1711
1712-- Minimum distance. 2d only.
1713-- Deprecation in 1.2.3
1714CREATEFUNCTION distance(geometry,geometry)
1715        RETURNS float8
1716        AS '@MODULE_FILENAME@', 'LWGEOM_mindistance2d'
1717        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1718
1719-- PostGIS equivalent function: distance(geometry,geometry)
1720CREATEFUNCTION ST_Distance(geometry,geometry)
1721    RETURNS float8
1722    AS '@MODULE_FILENAME@', 'LWGEOM_mindistance2d'
1723    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1724
1725-- Maximum distance between linestrings. 2d only. Very bogus.
1726-- Deprecation in 1.2.3
1727CREATEFUNCTION max_distance(geometry,geometry)
1728        RETURNS float8
1729        AS '@MODULE_FILENAME@', 'LWGEOM_maxdistance2d_linestring'
1730        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1731
1732-- Availability: 1.2.2
1733CREATEFUNCTION ST_max_distance(geometry,geometry)
1734        RETURNS float8
1735        AS '@MODULE_FILENAME@', 'LWGEOM_maxdistance2d_linestring'
1736        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
1737
1738-- Deprecation in 1.2.3
1739CREATEFUNCTION point_inside_circle(geometry,float8,float8,float8)
1740        RETURNS bool
1741        AS '@MODULE_FILENAME@', 'LWGEOM_inside_circle_point'
1742        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1743
1744-- Availability: 1.2.2
1745CREATEFUNCTION ST_point_inside_circle(geometry,float8,float8,float8)
1746        RETURNS bool
1747        AS '@MODULE_FILENAME@', 'LWGEOM_inside_circle_point'
1748        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1749
1750-- Deprecation in 1.2.3
1751CREATEFUNCTION azimuth(geometry,geometry)
1752        RETURNS float8
1753        AS '@MODULE_FILENAME@', 'LWGEOM_azimuth'
1754        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1755
1756-- Availability: 1.2.2
1757CREATEFUNCTION ST_azimuth(geometry,geometry)
1758        RETURNS float8
1759        AS '@MODULE_FILENAME@', 'LWGEOM_azimuth'
1760        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1761
1762------------------------------------------------------------------------
1763-- MISC
1764------------------------------------------------------------------------
1765
1766-- Deprecation in 1.2.3
1767CREATEFUNCTION force_2d(geometry)
1768        RETURNS geometry
1769        AS '@MODULE_FILENAME@', 'LWGEOM_force_2d'
1770        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1771
1772-- Availability: 1.2.2
1773CREATEFUNCTION ST_force_2d(geometry)
1774        RETURNS geometry
1775        AS '@MODULE_FILENAME@', 'LWGEOM_force_2d'
1776        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1777
1778-- Deprecation in 1.2.3
1779CREATEFUNCTION force_3dz(geometry)
1780        RETURNS geometry
1781        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
1782        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1783
1784-- Availability: 1.2.2
1785CREATEFUNCTION ST_force_3dz(geometry)
1786        RETURNS geometry
1787        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
1788        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1789
1790-- an alias for force_3dz
1791-- Deprecation in 1.2.3
1792CREATEFUNCTION force_3d(geometry)
1793        RETURNS geometry
1794        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
1795        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1796
1797-- Availability: 1.2.2
1798CREATEFUNCTION ST_force_3d(geometry)
1799        RETURNS geometry
1800        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dz'
1801        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1802
1803-- Deprecation in 1.2.3
1804CREATEFUNCTION force_3dm(geometry)
1805        RETURNS geometry
1806        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dm'
1807        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1808
1809-- Availability: 1.2.2
1810CREATEFUNCTION ST_force_3dm(geometry)
1811        RETURNS geometry
1812        AS '@MODULE_FILENAME@', 'LWGEOM_force_3dm'
1813        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1814
1815-- Deprecation in 1.2.3
1816CREATEFUNCTION force_4d(geometry)
1817        RETURNS geometry
1818        AS '@MODULE_FILENAME@', 'LWGEOM_force_4d'
1819        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1820
1821-- Availability: 1.2.2
1822CREATEFUNCTION ST_force_4d(geometry)
1823        RETURNS geometry
1824        AS '@MODULE_FILENAME@', 'LWGEOM_force_4d'
1825        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1826
1827-- Deprecation in 1.2.3
1828CREATEFUNCTION force_collection(geometry)
1829        RETURNS geometry
1830        AS '@MODULE_FILENAME@', 'LWGEOM_force_collection'
1831        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1832
1833-- Availability: 1.2.2
1834CREATEFUNCTION ST_force_collection(geometry)
1835        RETURNS geometry
1836        AS '@MODULE_FILENAME@', 'LWGEOM_force_collection'
1837        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1838
1839-- Deprecation in 1.2.3
1840CREATEFUNCTION multi(geometry)
1841        RETURNS geometry
1842        AS '@MODULE_FILENAME@', 'LWGEOM_force_multi'
1843        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1844
1845-- Availability: 1.2.2
1846CREATEFUNCTION ST_multi(geometry)
1847        RETURNS geometry
1848        AS '@MODULE_FILENAME@', 'LWGEOM_force_multi'
1849        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
1850
1851-- Deprecation in 1.2.3
1852CREATEFUNCTION collector(geometry, geometry)
1853        RETURNS geometry
1854        AS '@MODULE_FILENAME@', 'LWGEOM_collect'
1855        LANGUAGE 'C' _IMMUTABLE;
1856
1857-- Availability: 1.2.2
1858CREATEFUNCTION ST_collector(geometry, geometry)
1859        RETURNS geometry
1860        AS '@MODULE_FILENAME@', 'LWGEOM_collect'
1861        LANGUAGE 'C' _IMMUTABLE;
1862
1863-- Deprecation in 1.2.3
1864CREATEFUNCTION collect(geometry, geometry)
1865        RETURNS geometry
1866        AS '@MODULE_FILENAME@', 'LWGEOM_collect'
1867        LANGUAGE 'C' _IMMUTABLE;
1868
1869-- Availability: 1.2.2
1870CREATEFUNCTION ST_collect(geometry, geometry)
1871        RETURNS geometry
1872        AS '@MODULE_FILENAME@', 'LWGEOM_collect'
1873        LANGUAGE 'C' _IMMUTABLE;
1874
1875-- Deprecation in 1.2.3
1876CREATE AGGREGATE memcollect(
1877        sfunc = ST_collect,
1878        basetype = geometry,
1879        stype = geometry
1880        );
1881
1882-- Availability: 1.2.2
1883CREATE AGGREGATE ST_memcollect(
1884        sfunc = ST_collect,
1885        basetype = geometry,
1886        stype = geometry
1887        );
1888
1889-- Deprecation in 1.2.3
1890CREATEFUNCTION geom_accum (geometry[],geometry)
1891        RETURNS geometry[]
1892        AS '@MODULE_FILENAME@', 'LWGEOM_accum'
1893        LANGUAGE 'C' _IMMUTABLE;
1894
1895-- Availability: 1.2.2
1896CREATEFUNCTION ST_geom_accum (geometry[],geometry)
1897        RETURNS geometry[]
1898        AS '@MODULE_FILENAME@', 'LWGEOM_accum'
1899        LANGUAGE 'C' _IMMUTABLE;
1900
1901-- Deprecation in 1.2.3
1902CREATE AGGREGATE accum (
1903        sfunc = ST_geom_accum,
1904        basetype = geometry,
1905        stype = geometry[]
1906        );
1907
1908-- Availability: 1.2.2
1909CREATE AGGREGATE ST_accum (
1910        sfunc = ST_geom_accum,
1911        basetype = geometry,
1912        stype = geometry[]
1913        );
1914
1915-- Deprecation in 1.2.3
1916CREATEFUNCTION collect_garray (geometry[])
1917        RETURNS geometry
1918        AS '@MODULE_FILENAME@', 'LWGEOM_collect_garray'
1919        LANGUAGE 'C' _IMMUTABLE_STRICT;
1920
1921-- Availability: 1.2.2
1922CREATEFUNCTION ST_collect_garray (geometry[])
1923        RETURNS geometry
1924        AS '@MODULE_FILENAME@', 'LWGEOM_collect_garray'
1925        LANGUAGE 'C' _IMMUTABLE_STRICT;
1926
1927-- Deprecation in 1.2.3
1928CREATE AGGREGATE collect (
1929        sfunc = ST_geom_accum,
1930        basetype = geometry,
1931        stype = geometry[],
1932        finalfunc = ST_collect_garray
1933        );
1934
1935
1936-- Availability: 1.2.2
1937CREATE AGGREGATE ST_collect (
1938        sfunc = ST_geom_accum,
1939        basetype = geometry,
1940        stype = geometry[],
1941        finalfunc = ST_collect_garray
1942        );
1943
1944-- Deprecation in 1.2.3
1945CREATEFUNCTION expand(box3d,float8)
1946        RETURNS box3d
1947        AS '@MODULE_FILENAME@', 'BOX3D_expand'
1948        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1949
1950-- Availability: 1.2.2
1951CREATEFUNCTION ST_Expand(box3d,float8)
1952        RETURNS box3d
1953        AS '@MODULE_FILENAME@', 'BOX3D_expand'
1954        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1955
1956-- Deprecation in 1.2.3
1957CREATEFUNCTION expand(box2d,float8)
1958        RETURNS box2d
1959        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_expand'
1960        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1961
1962-- Availability: 1.2.2
1963CREATEFUNCTION ST_expand(box2d,float8)
1964        RETURNS box2d
1965        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_expand'
1966        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1967
1968-- Deprecation in 1.2.3
1969CREATEFUNCTION expand(geometry,float8)
1970        RETURNS geometry
1971        AS '@MODULE_FILENAME@', 'LWGEOM_expand'
1972        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1973
1974-- Availability: 1.2.2
1975CREATEFUNCTION ST_expand(geometry,float8)
1976        RETURNS geometry
1977        AS '@MODULE_FILENAME@', 'LWGEOM_expand'
1978        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1979
1980-- Deprecation in 1.2.3
1981CREATEFUNCTION envelope(geometry)
1982        RETURNS geometry
1983        AS '@MODULE_FILENAME@', 'LWGEOM_envelope'
1984        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1985
1986-- PostGIS equivalent function: envelope(geometry)
1987CREATEFUNCTION ST_Envelope(geometry)
1988        RETURNS geometry
1989        AS '@MODULE_FILENAME@', 'LWGEOM_envelope'
1990        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1991
1992-- Deprecation in 1.2.3
1993CREATEFUNCTION reverse(geometry)
1994        RETURNS geometry
1995        AS '@MODULE_FILENAME@', 'LWGEOM_reverse'
1996        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
1997
1998-- Availability: 1.2.2
1999CREATEFUNCTION ST_Reverse(geometry)
2000        RETURNS geometry
2001        AS '@MODULE_FILENAME@', 'LWGEOM_reverse'
2002        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2003
2004-- Deprecation in 1.2.3
2005CREATEFUNCTION ForceRHR(geometry)
2006        RETURNS geometry
2007        AS '@MODULE_FILENAME@', 'LWGEOM_forceRHR_poly'
2008        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2009
2010-- Availability: 1.2.2
2011CREATEFUNCTION ST_ForceRHR(geometry)
2012        RETURNS geometry
2013        AS '@MODULE_FILENAME@', 'LWGEOM_forceRHR_poly'
2014        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2015
2016-- Deprecation in 1.2.3
2017CREATEFUNCTION noop(geometry)
2018        RETURNS geometry
2019        AS '@MODULE_FILENAME@', 'LWGEOM_noop'
2020        LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
2021
2022-- Availability: 1.2.2
2023CREATEFUNCTION ST_noop(geometry)
2024        RETURNS geometry
2025        AS '@MODULE_FILENAME@', 'LWGEOM_noop'
2026        LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
2027
2028-- Deprecation in 1.2.3
2029CREATEFUNCTION zmflag(geometry)
2030        RETURNS smallint
2031        AS '@MODULE_FILENAME@', 'LWGEOM_zmflag'
2032        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2033
2034-- Availability: 1.2.2
2035CREATEFUNCTION ST_zmflag(geometry)
2036        RETURNS smallint
2037        AS '@MODULE_FILENAME@', 'LWGEOM_zmflag'
2038        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2039
2040-- Deprecation in 1.2.3
2041CREATEFUNCTION hasBBOX(geometry)
2042        RETURNS bool
2043        AS '@MODULE_FILENAME@', 'LWGEOM_hasBBOX'
2044        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2045
2046-- Availabitily: 1.2.2
2047CREATEFUNCTION ST_HasBBOX(geometry)
2048        RETURNS bool
2049        AS '@MODULE_FILENAME@', 'LWGEOM_hasBBOX'
2050        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2051
2052-- Deprecation in 1.2.3
2053CREATEFUNCTION ndims(geometry)
2054        RETURNS smallint
2055        AS '@MODULE_FILENAME@', 'LWGEOM_ndims'
2056        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2057
2058-- Availability: 1.2.2
2059CREATEFUNCTION ST_NDims(geometry)
2060        RETURNS smallint
2061        AS '@MODULE_FILENAME@', 'LWGEOM_ndims'
2062        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2063
2064-- Deprecation in 1.2.3
2065CREATEFUNCTION AsEWKT(geometry)
2066        RETURNS TEXT
2067        AS '@MODULE_FILENAME@','LWGEOM_asEWKT'
2068        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2069
2070-- Availability: 1.2.2
2071CREATEFUNCTION ST_AsEWKT(geometry)
2072        RETURNS TEXT
2073        AS '@MODULE_FILENAME@','LWGEOM_asEWKT'
2074        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2075
2076-- Deprecation in 1.2.3
2077CREATEFUNCTION AsEWKB(geometry)
2078        RETURNS BYTEA
2079        AS '@MODULE_FILENAME@','WKBFromLWGEOM'
2080        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2081
2082-- Availability: 1.2.2
2083CREATEFUNCTION ST_AsEWKB(geometry)
2084        RETURNS BYTEA
2085        AS '@MODULE_FILENAME@','WKBFromLWGEOM'
2086        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2087
2088-- Deprecation in 1.2.3
2089CREATEFUNCTION AsHEXEWKB(geometry)
2090        RETURNS TEXT
2091        AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
2092        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2093
2094-- Availability: 1.2.2
2095CREATEFUNCTION ST_AsHEXEWKB(geometry)
2096        RETURNS TEXT
2097        AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
2098        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2099
2100-- Deprecation in 1.2.3
2101CREATEFUNCTION AsHEXEWKB(geometry, text)
2102        RETURNS TEXT
2103        AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
2104        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2105
2106-- Availability: 1.2.2
2107CREATEFUNCTION ST_AsHEXEWKB(geometry, text)
2108        RETURNS TEXT
2109        AS '@MODULE_FILENAME@','LWGEOM_asHEXEWKB'
2110        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2111
2112-- Deprecation in 1.2.3
2113CREATEFUNCTION AsEWKB(geometry,text)
2114        RETURNS bytea
2115        AS '@MODULE_FILENAME@','WKBFromLWGEOM'
2116        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2117
2118-- Availability: 1.2.2
2119CREATEFUNCTION ST_AsEWKB(geometry,text)
2120        RETURNS bytea
2121        AS '@MODULE_FILENAME@','WKBFromLWGEOM'
2122        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2123
2124-- Deprecation in 1.2.3
2125CREATEFUNCTION GeomFromEWKB(bytea)
2126        RETURNS geometry
2127        AS '@MODULE_FILENAME@','LWGEOMFromWKB'
2128        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2129
2130-- Availability: 1.2.2
2131CREATEFUNCTION ST_GeomFromEWKB(bytea)
2132        RETURNS geometry
2133        AS '@MODULE_FILENAME@','LWGEOMFromWKB'
2134        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2135
2136-- Deprecation in 1.2.3
2137CREATEFUNCTION GeomFromEWKT(text)
2138        RETURNS geometry
2139        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
2140        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2141
2142-- Availability: 1.2.2
2143CREATEFUNCTION ST_GeomFromEWKT(text)
2144        RETURNS geometry
2145        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
2146        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2147
2148-- Deprecation in 1.2.3
2149CREATEFUNCTION cache_bbox()
2150        RETURNS trigger
2151        AS '@MODULE_FILENAME@'
2152        LANGUAGE 'C';
2153
2154-- Availability: 1.2.2
2155CREATEFUNCTION ST_Cache_BBox()
2156        RETURNS trigger
2157        AS '@MODULE_FILENAME@','cache_bbox'
2158        LANGUAGE 'C';
2159
2160------------------------------------------------------------------------
2161-- CONSTRUCTORS
2162------------------------------------------------------------------------
2163
2164-- Deprecation in 1.2.3
2165CREATEFUNCTION MakePoint(float8, float8)
2166        RETURNS geometry
2167        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2168        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2169
2170-- Availability: 1.2.2
2171CREATEFUNCTION ST_MakePoint(float8, float8)
2172        RETURNS geometry
2173        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2174        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2175
2176-- Deprecation in 1.2.3
2177CREATEFUNCTION MakePoint(float8, float8, float8)
2178        RETURNS geometry
2179        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2180        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2181
2182-- Availability: 1.2.2
2183CREATEFUNCTION ST_MakePoint(float8, float8, float8)
2184        RETURNS geometry
2185        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2186        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2187
2188-- Deprecation in 1.2.3
2189CREATEFUNCTION MakePoint(float8, float8, float8, float8)
2190        RETURNS geometry
2191        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2192        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2193
2194-- Availability: 1.2.2
2195CREATEFUNCTION ST_MakePoint(float8, float8, float8, float8)
2196        RETURNS geometry
2197        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint'
2198        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2199
2200-- Deprecation in 1.2.3
2201CREATEFUNCTION MakePointM(float8, float8, float8)
2202        RETURNS geometry
2203        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
2204        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2205
2206-- Availability: 1.2.2
2207CREATEFUNCTION MakePointM(float8, float8, float8)
2208        RETURNS geometry
2209        AS '@MODULE_FILENAME@', 'LWGEOM_makepoint3dm'
2210        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2211
2212-- Deprecation in 1.2.3
2213CREATEFUNCTION MakeBox2d(geometry, geometry)
2214        RETURNS box2d
2215        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_construct'
2216        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2217
2218-- Availability: 1.2.2
2219CREATEFUNCTION ST_MakeBox2d(geometry, geometry)
2220        RETURNS box2d
2221        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_construct'
2222        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2223
2224-- Deprecation in 1.2.3
2225CREATEFUNCTION MakeBox3d(geometry, geometry)
2226        RETURNS box3d
2227        AS '@MODULE_FILENAME@', 'BOX3D_construct'
2228        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2229
2230-- Availability: 1.2.2
2231CREATEFUNCTION ST_MakeBox3d(geometry, geometry)
2232        RETURNS box3d
2233        AS '@MODULE_FILENAME@', 'BOX3D_construct'
2234        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2235
2236-- Deprecation in 1.2.3
2237CREATEFUNCTION makeline_garray (geometry[])
2238        RETURNS geometry
2239        AS '@MODULE_FILENAME@', 'LWGEOM_makeline_garray'
2240        LANGUAGE 'C' _IMMUTABLE_STRICT;
2241
2242-- Availability: 1.2.2
2243CREATEFUNCTION ST_MakeLine_GArray (geometry[])
2244        RETURNS geometry
2245        AS '@MODULE_FILENAME@', 'LWGEOM_makeline_garray'
2246        LANGUAGE 'C' _IMMUTABLE_STRICT;
2247
2248-- Deprecation in 1.2.3
2249CREATEFUNCTION LineFromMultiPoint(geometry)
2250        RETURNS geometry
2251        AS '@MODULE_FILENAME@', 'LWGEOM_line_from_mpoint'
2252        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2253
2254-- Availability: 1.2.2
2255CREATEFUNCTION ST_LineFromMultiPoint(geometry)
2256        RETURNS geometry
2257        AS '@MODULE_FILENAME@', 'LWGEOM_line_from_mpoint'
2258        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2259
2260-- Deprecation in 1.2.3
2261CREATEFUNCTION MakeLine(geometry, geometry)
2262        RETURNS geometry
2263        AS '@MODULE_FILENAME@', 'LWGEOM_makeline'
2264        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2265
2266-- Availability: 1.2.2
2267CREATEFUNCTION ST_MakeLine(geometry, geometry)
2268        RETURNS geometry
2269        AS '@MODULE_FILENAME@', 'LWGEOM_makeline'
2270        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2271
2272-- Deprecation in 1.2.3
2273CREATEFUNCTION AddPoint(geometry, geometry)
2274        RETURNS geometry
2275        AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
2276        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2277
2278-- Availability: 1.2.2
2279CREATEFUNCTION ST_AddPoint(geometry, geometry)
2280        RETURNS geometry
2281        AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
2282        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2283
2284-- Deprecation in 1.2.3
2285CREATEFUNCTION AddPoint(geometry, geometry, integer)
2286        RETURNS geometry
2287        AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
2288        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2289
2290-- Availability: 1.2.2
2291CREATEFUNCTION ST_AddPoint(geometry, geometry, integer)
2292        RETURNS geometry
2293        AS '@MODULE_FILENAME@', 'LWGEOM_addpoint'
2294        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2295
2296-- Deprecation in 1.2.3
2297CREATEFUNCTION RemovePoint(geometry, integer)
2298        RETURNS geometry
2299        AS '@MODULE_FILENAME@', 'LWGEOM_removepoint'
2300        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2301
2302-- Availability: 1.2.2
2303CREATEFUNCTION ST_RemovePoint(geometry, integer)
2304        RETURNS geometry
2305        AS '@MODULE_FILENAME@', 'LWGEOM_removepoint'
2306        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2307
2308-- Deprecation in 1.2.3
2309CREATEFUNCTION SetPoint(geometry, integer, geometry)
2310        RETURNS geometry
2311        AS '@MODULE_FILENAME@', 'LWGEOM_setpoint_linestring'
2312        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2313
2314-- Availability: 1.2.2
2315CREATEFUNCTION ST_SetPoint(geometry, integer, geometry)
2316        RETURNS geometry
2317        AS '@MODULE_FILENAME@', 'LWGEOM_setpoint_linestring'
2318        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2319
2320-- Deprecation in 1.2.3
2321CREATE AGGREGATE makeline (
2322        sfunc = geom_accum,
2323        basetype = geometry,
2324        stype = geometry[],
2325        finalfunc = makeline_garray
2326        );
2327
2328-- Availability: 1.2.2
2329CREATE AGGREGATE ST_MakeLine (
2330        sfunc = geom_accum,
2331        basetype = geometry,
2332        stype = geometry[],
2333        finalfunc = ST_makeline_garray
2334        );
2335
2336-- Deprecation in 1.2.3
2337CREATEFUNCTION MakePolygon(geometry, geometry[])
2338        RETURNS geometry
2339        AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
2340        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2341
2342-- Availability: 1.2.2
2343CREATEFUNCTION ST_MakePolygon(geometry, geometry[])
2344        RETURNS geometry
2345        AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
2346        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2347
2348-- Deprecation in 1.2.3
2349CREATEFUNCTION MakePolygon(geometry)
2350        RETURNS geometry
2351        AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
2352        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2353
2354-- Availability: 1.2.2
2355CREATEFUNCTION ST_MakePolygon(geometry)
2356        RETURNS geometry
2357        AS '@MODULE_FILENAME@', 'LWGEOM_makepoly'
2358        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2359
2360-- Deprecation in 1.2.3
2361CREATEFUNCTION BuildArea(geometry)
2362        RETURNS geometry
2363        AS '@MODULE_FILENAME@', 'LWGEOM_buildarea'
2364        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2365
2366-- Availability: 1.2.2
2367CREATEFUNCTION ST_BuildArea(geometry)
2368        RETURNS geometry
2369        AS '@MODULE_FILENAME@', 'LWGEOM_buildarea'
2370        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
2371
2372-- Deprecation in 1.2.3
2373CREATEFUNCTION Polygonize_GArray (geometry[])
2374        RETURNS geometry
2375        AS '@MODULE_FILENAME@', 'polygonize_garray'
2376        LANGUAGE 'C' _IMMUTABLE_STRICT;
2377
2378-- Availability: 1.2.2
2379CREATEFUNCTION ST_Polygonize_GArray (geometry[])
2380        RETURNS geometry
2381        AS '@MODULE_FILENAME@', 'polygonize_garray'
2382        LANGUAGE 'C' _IMMUTABLE_STRICT;
2383
2384-- Deprecation in 1.2.3
2385CREATEFUNCTION LineMerge(geometry)
2386        RETURNS geometry
2387        AS '@MODULE_FILENAME@', 'linemerge'
2388        LANGUAGE 'C' _IMMUTABLE_STRICT;
2389
2390-- Availability: 1.2.2
2391CREATEFUNCTION ST_LineMerge(geometry)
2392        RETURNS geometry
2393        AS '@MODULE_FILENAME@', 'linemerge'
2394        LANGUAGE 'C' _IMMUTABLE_STRICT;
2395
2396-- Deprecation in 1.2.3
2397CREATE AGGREGATE Polygonize (
2398        sfunc = geom_accum,
2399        basetype = geometry,
2400        stype = geometry[],
2401        finalfunc = polygonize_garray
2402        );
2403
2404-- Availability: 1.2.2
2405CREATE AGGREGATE ST_Polygonize (
2406        sfunc = ST_geom_accum,
2407        basetype = geometry,
2408        stype = geometry[],
2409        finalfunc = ST_polygonize_garray
2410        );
2411
2412#if USE_VERSION > 72
2413
2414CREATE TYPE geometry_dump AS (path integer[], geom geometry);
2415
2416-- Deprecation in 1.2.3
2417CREATEFUNCTION Dump(geometry)
2418        RETURNS SETOF geometry_dump
2419        AS '@MODULE_FILENAME@', 'LWGEOM_dump'
2420        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2421
2422-- Availability: 1.2.2
2423CREATEFUNCTION ST_Dump(geometry)
2424        RETURNS SETOF geometry_dump
2425        AS '@MODULE_FILENAME@', 'LWGEOM_dump'
2426        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2427
2428-- Deprecation in 1.2.3
2429CREATEFUNCTION DumpRings(geometry)
2430        RETURNS SETOF geometry_dump
2431        AS '@MODULE_FILENAME@', 'LWGEOM_dump_rings'
2432        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2433
2434-- Availability: 1.2.2
2435CREATEFUNCTION ST_DumpRings(geometry)
2436        RETURNS SETOF geometry_dump
2437        AS '@MODULE_FILENAME@', 'LWGEOM_dump_rings'
2438        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
2439
2440#endif
2441
2442------------------------------------------------------------------------
2443
2444--
2445-- Aggregate functions
2446--
2447
2448-- Deprecation in 1.2.3
2449CREATEFUNCTION combine_bbox(box2d,geometry)
2450        RETURNS box2d
2451        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_combine'
2452        LANGUAGE 'C' _IMMUTABLE;
2453
2454-- Availability: 1.2.2
2455CREATEFUNCTION ST_Combine_BBox(box2d,geometry)
2456        RETURNS box2d
2457        AS '@MODULE_FILENAME@', 'BOX2DFLOAT4_combine'
2458        LANGUAGE 'C' _IMMUTABLE;
2459
2460-- Deprecation in 1.2.3
2461CREATE AGGREGATE Extent(
2462        sfunc = ST_combine_bbox,
2463        basetype = geometry,
2464        stype = box2d
2465        );
2466
2467-- Availability: 1.2.2
2468CREATE AGGREGATE ST_Extent(
2469        sfunc = ST_combine_bbox,
2470        basetype = geometry,
2471        stype = box2d
2472        );
2473
2474-- Deprecation in 1.2.3
2475CREATEFUNCTION combine_bbox(box3d,geometry)
2476        RETURNS box3d
2477        AS '@MODULE_FILENAME@', 'BOX3D_combine'
2478        LANGUAGE 'C' _IMMUTABLE;
2479
2480-- Availability: 1.2.2
2481CREATEFUNCTION ST_Combine_BBox(box3d,geometry)
2482        RETURNS box3d
2483        AS '@MODULE_FILENAME@', 'BOX3D_combine'
2484        LANGUAGE 'C' _IMMUTABLE;
2485
2486-- Deprecation in 1.2.3
2487CREATE AGGREGATE Extent3d(
2488        sfunc = combine_bbox,
2489        basetype = geometry,
2490        stype = box3d
2491        );
2492
2493-- Availability: 1.2.2
2494CREATE AGGREGATE ST_Extent3d(
2495        sfunc = ST_combine_bbox,
2496        basetype = geometry,
2497        stype = box3d
2498        );
2499
2500-----------------------------------------------------------------------
2501-- CREATE_HISTOGRAM2D( <box2d>, <size> )
2502-----------------------------------------------------------------------
2503--
2504-- Returns a histgram with 0s in all the boxes.
2505--
2506-----------------------------------------------------------------------
2507-- Deprecation in 1.2.3
2508CREATEFUNCTION create_histogram2d(box2d,int)
2509        RETURNS histogram2d
2510        AS '@MODULE_FILENAME@','create_lwhistogram2d'
2511        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2512
2513-- Availability: 1.2.2
2514CREATEFUNCTION ST_create_histogram2d(box2d,int)
2515        RETURNS histogram2d
2516        AS '@MODULE_FILENAME@','create_lwhistogram2d'
2517        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2518
2519-----------------------------------------------------------------------
2520-- BUILD_HISTOGRAM2D( <histogram2d>, <tablename>, <columnname> )
2521-----------------------------------------------------------------------
2522-- Deprecation in 1.2.3
2523CREATEFUNCTION build_histogram2d (histogram2d,text,text)
2524        RETURNS histogram2d
2525        AS '@MODULE_FILENAME@','build_lwhistogram2d'
2526        LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
2527
2528-- Availability: 1.2.2
2529CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text)
2530        RETURNS histogram2d
2531        AS '@MODULE_FILENAME@','build_lwhistogram2d'
2532        LANGUAGE 'C' _STABLE_STRICT; -- WITH (isstrict);
2533
2534#if USE_VERSION >= 73
2535-----------------------------------------------------------------------
2536-- BUILD_HISTOGRAM2D(<histogram2d>,<schema>,<tablename>,<columnname>)
2537-----------------------------------------------------------------------
2538-- This is a wrapper to the omonimous schema unaware function,
2539-- thanks to Carl Anderson for the idea.
2540-----------------------------------------------------------------------
2541-- Deprecation in 1.2.3
2542CREATEFUNCTION build_histogram2d (histogram2d,text,text,text)
2543RETURNS histogram2d
2544AS '
2545BEGIN
2546        EXECUTE ''SET local search_path = ''||$2||'',public'';
2547        RETURN public.build_histogram2d($1,$3,$4);
2548END
2549'
2550LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
2551
2552-- Availability: 1.2.2
2553CREATEFUNCTION ST_build_histogram2d (histogram2d,text,text,text)
2554RETURNS histogram2d
2555AS '
2556BEGIN
2557        EXECUTE ''SET local search_path = ''||$2||'',public'';
2558        RETURN public.build_histogram2d($1,$3,$4);
2559END
2560'
2561LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
2562
2563#endif
2564
2565-----------------------------------------------------------------------
2566-- EXPLODE_HISTOGRAM2D( <histogram2d>, <tablename> )
2567-----------------------------------------------------------------------
2568-- Deprecation in 1.2.3
2569CREATEFUNCTION explode_histogram2d (histogram2d,text)
2570        RETURNS histogram2d
2571        AS '@MODULE_FILENAME@','explode_lwhistogram2d'
2572        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2573
2574-- Availability: 1.2.2
2575CREATEFUNCTION ST_explode_histogram2d (histogram2d,text)
2576        RETURNS histogram2d
2577        AS '@MODULE_FILENAME@','explode_lwhistogram2d'
2578        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2579
2580-----------------------------------------------------------------------
2581-- ESTIMATE_HISTOGRAM2D( <histogram2d>, <box> )
2582-----------------------------------------------------------------------
2583-- Deprecation in 1.2.3
2584CREATEFUNCTION estimate_histogram2d(histogram2d,box2d)
2585        RETURNS float8
2586        AS '@MODULE_FILENAME@','estimate_lwhistogram2d'
2587        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2588
2589-- Availability: 1.2.2
2590CREATEFUNCTION ST_estimate_histogram2d(histogram2d,box2d)
2591        RETURNS float8
2592        AS '@MODULE_FILENAME@','estimate_lwhistogram2d'
2593        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
2594
2595-----------------------------------------------------------------------
2596-- ESTIMATED_EXTENT( <schema name>, <table name>, <column name> )
2597-----------------------------------------------------------------------
2598-- Deprecation in 1.2.3
2599CREATEFUNCTION estimated_extent(text,text,text) RETURNS box2d AS
2600        '@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
2601        LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
2602
2603-- Availability: 1.2.2
2604CREATEFUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS
2605        '@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
2606        LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
2607
2608-----------------------------------------------------------------------
2609-- ESTIMATED_EXTENT( <table name>, <column name> )
2610-----------------------------------------------------------------------
2611-- Deprecation in 1.2.3
2612CREATEFUNCTION estimated_extent(text,text) RETURNS box2d AS
2613        '@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
2614        LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
2615
2616-- Availability: 1.2.2
2617CREATEFUNCTION ST_estimated_extent(text,text) RETURNS box2d AS
2618        '@MODULE_FILENAME@', 'LWGEOM_estimated_extent'
2619        LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
2620
2621-----------------------------------------------------------------------
2622-- FIND_EXTENT( <schema name>, <table name>, <column name> )
2623-----------------------------------------------------------------------
2624-- Deprecation in 1.2.3
2625CREATEFUNCTION find_extent(text,text,text) RETURNS box2d AS
2626'
2627DECLARE
2628        schemaname alias for $1;
2629        tablename alias for $2;
2630        columnname alias for $3;
2631        myrec RECORD;
2632
2633BEGIN
2634        FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
2635                return myrec.extent;
2636        END LOOP;
2637END;
2638'
2639LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
2640
2641-- Availability: 1.2.2
2642CREATEFUNCTION ST_find_extent(text,text,text) RETURNS box2d AS
2643'
2644DECLARE
2645        schemaname alias for $1;
2646        tablename alias for $2;
2647        columnname alias for $3;
2648        myrec RECORD;
2649
2650BEGIN
2651        FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||schemaname||''"."''||tablename||''"'' LOOP
2652                return myrec.extent;
2653        END LOOP;
2654END;
2655'
2656LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
2657
2658
2659-----------------------------------------------------------------------
2660-- FIND_EXTENT( <table name>, <column name> )
2661-----------------------------------------------------------------------
2662-- Deprecation in 1.2.3
2663CREATEFUNCTION find_extent(text,text) RETURNS box2d AS
2664'
2665DECLARE
2666        tablename alias for $1;
2667        columnname alias for $2;
2668        myrec RECORD;
2669
2670BEGIN
2671        FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
2672                return myrec.extent;
2673        END LOOP;
2674END;
2675'
2676LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
2677
2678-- Availability: 1.2.2
2679CREATEFUNCTION ST_find_extent(text,text) RETURNS box2d AS
2680'
2681DECLARE
2682        tablename alias for $1;
2683        columnname alias for $2;
2684        myrec RECORD;
2685
2686BEGIN
2687        FOR myrec IN EXECUTE ''SELECT extent("''||columnname||''") FROM "''||tablename||''"'' LOOP
2688                return myrec.extent;
2689        END LOOP;
2690END;
2691'
2692LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
2693
2694-------------------------------------------------------------------
2695-- SPATIAL_REF_SYS
2696-------------------------------------------------------------------
2697CREATE TABLE spatial_ref_sys (
2698         srid integer not null primary key,
2699         auth_name varchar(256),
2700         auth_srid integer,
2701         srtext varchar(2048),
2702         proj4text varchar(2048)
2703);
2704
2705-------------------------------------------------------------------
2706-- GEOMETRY_COLUMNS
2707-------------------------------------------------------------------
2708CREATE TABLE geometry_columns (
2709        f_table_catalog varchar(256) not null,
2710        f_table_schema varchar(256) not null,
2711        f_table_name varchar(256) not null,
2712        f_geometry_column varchar(256) not null,
2713        coord_dimension integer not null,
2714        srid integer not null,
2715        type varchar(30) not null,
2716#if USE_VERSION < 80
2717        attrelid oid,
2718        varattnum int,
2719        stats histogram2d,
2720#endif
2721        CONSTRAINT geometry_columns_pk primary key (
2722                f_table_catalog,
2723                f_table_schema,
2724                f_table_name,
2725                f_geometry_column )
2726) WITH OIDS;
2727
2728-----------------------------------------------------------------------
2729-- RENAME_GEOMETRY_TABLE_CONSTRAINTS()
2730-----------------------------------------------------------------------
2731-- This function has been obsoleted for the difficulty in
2732-- finding attribute on which the constraint is applied.
2733-- AddGeometryColumn will name the constraints in a meaningful
2734-- way, but nobody can rely on it since old postgis versions did
2735-- not do that.
2736-----------------------------------------------------------------------
2737CREATEFUNCTION rename_geometry_table_constraints() RETURNS text
2738AS
2739'
2740SELECT ''rename_geometry_table_constraint() is obsoleted''::text
2741'
2742LANGUAGE 'SQL' _IMMUTABLE;
2743
2744-----------------------------------------------------------------------
2745-- FIX_GEOMETRY_COLUMNS()
2746-----------------------------------------------------------------------
2747-- This function will:
2748--
2749--      o try to fix the schema of records with an invalid one
2750--              (for PG>=73)
2751--
2752--      o link records to system tables through attrelid and varattnum
2753--              (for PG<75)
2754--
2755--      o delete all records for which no linking was possible
2756--              (for PG<75)
2757--     
2758--
2759-----------------------------------------------------------------------
2760CREATEFUNCTION fix_geometry_columns() RETURNS text
2761AS
2762'
2763DECLARE
2764        mislinked record;
2765        result text;
2766        linked integer;
2767        deleted integer;
2768#if USE_VERSION >= 73
2769        foundschema integer;
2770#endif
2771BEGIN
2772
2773#if USE_VERSION >= 73
2774        -- Since 7.3 schema support has been added.
2775        -- Previous postgis versions used to put the database name in
2776        -- the schema column. This needs to be fixed, so we try to
2777        -- set the correct schema for each geometry_colums record
2778        -- looking at table, column, type and srid.
2779        UPDATE geometry_columns SET f_table_schema = n.nspname
2780                FROM pg_namespace n, pg_class c, pg_attribute a,
2781                        pg_constraint sridcheck, pg_constraint typecheck
2782                WHERE ( f_table_schema is NULL
2783                OR f_table_schema = ''''
2784                OR f_table_schema NOT IN (
2785                        SELECT nspname::varchar
2786                        FROM pg_namespace nn, pg_class cc, pg_attribute aa
2787                        WHERE cc.relnamespace = nn.oid
2788                        AND cc.relname = f_table_name::name
2789                        AND aa.attrelid = cc.oid
2790                        AND aa.attname = f_geometry_column::name))
2791                AND f_table_name::name = c.relname
2792                AND c.oid = a.attrelid
2793                AND c.relnamespace = n.oid
2794                AND f_geometry_column::name = a.attname
2795
2796                AND sridcheck.conrelid = c.oid
2797                AND sridcheck.consrc LIKE ''(srid(% = %)''
2798                AND sridcheck.consrc ~ textcat('' = '', srid::text)
2799
2800                AND typecheck.conrelid = c.oid
2801                AND typecheck.consrc LIKE
2802        ''((geometrytype(%) = ''''%''''::text) OR (% IS NULL))''
2803                AND typecheck.consrc ~ textcat('' = '''''', type::text)
2804
2805                AND NOT EXISTS (
2806                        SELECT oid FROM geometry_columns gc
2807                        WHERE c.relname::varchar = gc.f_table_name
2808                        AND n.nspname::varchar = gc.f_table_schema
2809                        AND a.attname::varchar = gc.f_geometry_column
2810                );
2811
2812        GET DIAGNOSTICS foundschema = ROW_COUNT;
2813#endif
2814
2815#if USE_VERSION >= 80
2816        -- no linkage to system table needed
2817        return ''fixed:''||foundschema::text;
2818#endif
2819
2820        -- fix linking to system tables
2821        SELECT 0 INTO linked;
2822        FOR mislinked in
2823                SELECT gc.oid as gcrec,
2824                        a.attrelid as attrelid, a.attnum as attnum
2825                FROM geometry_columns gc, pg_class c,
2826#if USE_VERSION >= 73
2827                pg_namespace n, pg_attribute a
2828#else
2829                pg_attribute a
2830#endif
2831                WHERE ( gc.attrelid IS NULL OR gc.attrelid != a.attrelid
2832                        OR gc.varattnum IS NULL OR gc.varattnum != a.attnum)
2833#if USE_VERSION >= 73
2834                AND n.nspname = gc.f_table_schema::name
2835                AND c.relnamespace = n.oid
2836#endif
2837                AND c.relname = gc.f_table_name::name
2838                AND a.attname = f_geometry_column::name
2839                AND a.attrelid = c.oid
2840        LOOP
2841                UPDATE geometry_columns SET
2842                        attrelid = mislinked.attrelid,
2843                        varattnum = mislinked.attnum,
2844                        stats = NULL
2845                        WHERE geometry_columns.oid = mislinked.gcrec;
2846                SELECT linked+1 INTO linked;
2847        END LOOP;
2848
2849        -- remove stale records
2850        DELETE FROM geometry_columns WHERE attrelid IS NULL;
2851
2852        GET DIAGNOSTICS deleted = ROW_COUNT;
2853
2854        result =
2855#if USE_VERSION >= 73
2856                ''fixed:'' || foundschema::text ||
2857#endif
2858                '' linked:'' || linked::text ||
2859                '' deleted:'' || deleted::text;
2860
2861        return result;
2862
2863END;
2864'
2865LANGUAGE 'plpgsql' _VOLATILE;
2866
2867-----------------------------------------------------------------------
2868-- PROBE_GEOMETRY_COLUMNS()
2869-----------------------------------------------------------------------
2870-- Fill the geometry_columns table with values probed from the system
2871-- catalogues. 3d flag cannot be probed, it defaults to 2
2872--
2873-- Note that bogus records already in geometry_columns are not
2874-- overridden (a check for schema.table.column is performed), so
2875-- to have a fresh probe backup your geometry_column, delete from
2876-- it and probe.
2877-----------------------------------------------------------------------
2878CREATEFUNCTION probe_geometry_columns() RETURNS text AS
2879'
2880DECLARE
2881        inserted integer;
2882        oldcount integer;
2883        probed integer;
2884        stale integer;
2885BEGIN
2886
2887        SELECT count(*) INTO oldcount FROM geometry_columns;
2888
2889        SELECT count(*) INTO probed
2890                FROM pg_class c, pg_attribute a, pg_type t,
2891#if USE_VERSION >= 73
2892                        pg_namespace n,
2893                        pg_constraint sridcheck, pg_constraint typecheck
2894#else
2895                        pg_relcheck sridcheck, pg_relcheck typecheck
2896#endif
2897
2898                WHERE t.typname = ''geometry''
2899                AND a.atttypid = t.oid
2900                AND a.attrelid = c.oid
2901#if USE_VERSION >= 73
2902                AND c.relnamespace = n.oid
2903                AND sridcheck.connamespace = n.oid
2904                AND typecheck.connamespace = n.oid
2905#endif
2906
2907#if USE_VERSION >= 73
2908                AND sridcheck.conrelid = c.oid
2909                AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
2910                AND typecheck.conrelid = c.oid
2911                AND typecheck.consrc LIKE
2912        ''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
2913#else
2914                AND sridcheck.rcrelid = c.oid
2915                AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
2916                AND typecheck.rcrelid = c.oid
2917                AND typecheck.rcsrc LIKE
2918        ''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
2919#endif
2920                ;
2921
2922        INSERT INTO geometry_columns SELECT
2923                ''''::varchar as f_table_catalogue,
2924#if USE_VERSION >= 73
2925                n.nspname::varchar as f_table_schema,
2926#else
2927                ''''::varchar as f_table_schema,
2928#endif
2929                c.relname::varchar as f_table_name,
2930                a.attname::varchar as f_geometry_column,
2931                2 as coord_dimension,
2932#if USE_VERSION >= 73
2933                trim(both  '' =)'' from substr(sridcheck.consrc,
2934                        strpos(sridcheck.consrc, ''='')))::integer as srid,
2935                trim(both '' =)'''''' from substr(typecheck.consrc,
2936                        strpos(typecheck.consrc, ''=''),
2937                        strpos(typecheck.consrc, ''::'')-
2938                        strpos(typecheck.consrc, ''='')
2939                        ))::varchar as type
2940#else
2941                trim(both  '' =)'' from substr(sridcheck.rcsrc,
2942                        strpos(sridcheck.rcsrc, ''='')))::integer as srid,
2943                trim(both '' =)'''''' from substr(typecheck.rcsrc,
2944                        strpos(typecheck.rcsrc, ''=''),
2945                        strpos(typecheck.rcsrc, ''::'')-
2946                        strpos(typecheck.rcsrc, ''='')
2947                        ))::varchar as type
2948#endif
2949
2950#if USE_VERSION < 80
2951                , a.attrelid,
2952                a.attnum as varattnum,
2953                null::histogram2d as stats
2954#endif
2955                FROM pg_class c, pg_attribute a, pg_type t,
2956#if USE_VERSION >= 73
2957                        pg_namespace n,
2958                        pg_constraint sridcheck, pg_constraint typecheck
2959#else
2960                        pg_relcheck sridcheck, pg_relcheck typecheck
2961#endif
2962                WHERE t.typname = ''geometry''
2963                AND a.atttypid = t.oid
2964                AND a.attrelid = c.oid
2965#if USE_VERSION >= 73
2966                AND c.relnamespace = n.oid
2967                AND sridcheck.connamespace = n.oid
2968                AND typecheck.connamespace = n.oid
2969                AND sridcheck.conrelid = c.oid
2970                AND sridcheck.consrc LIKE ''(srid(''||a.attname||'') = %)''
2971                AND typecheck.conrelid = c.oid
2972                AND typecheck.consrc LIKE
2973        ''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
2974#else
2975                AND sridcheck.rcrelid = c.oid
2976                AND sridcheck.rcsrc LIKE ''(srid(''||a.attname||'') = %)''
2977                AND typecheck.rcrelid = c.oid
2978                AND typecheck.rcsrc LIKE
2979        ''((geometrytype(''||a.attname||'') = ''''%''''::text) OR (% IS NULL))''
2980#endif
2981
2982                AND NOT EXISTS (
2983                        SELECT oid FROM geometry_columns gc
2984                        WHERE c.relname::varchar = gc.f_table_name
2985#if USE_VERSION >= 73
2986                        AND n.nspname::varchar = gc.f_table_schema
2987#endif
2988                        AND a.attname::varchar = gc.f_geometry_column
2989                );
2990
2991        GET DIAGNOSTICS inserted = ROW_COUNT;
2992
2993        IF oldcount > probed THEN
2994                stale = oldcount-probed;
2995        ELSE
2996                stale = 0;
2997        END IF;
2998
2999        RETURN ''probed:''||probed::text||
3000                '' inserted:''||inserted::text||
3001                '' conflicts:''||(probed-inserted)::text||
3002                '' stale:''||stale::text;
3003END
3004
3005'
3006LANGUAGE 'plpgsql' _VOLATILE;
3007
3008-----------------------------------------------------------------------
3009-- ADDGEOMETRYCOLUMN
3010--   <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim>
3011-----------------------------------------------------------------------
3012--
3013-- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
3014-- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
3015--
3016-- Types (except geometry) are checked for consistency using a CHECK constraint
3017-- uses SQL ALTER TABLE command to add the geometry column to the table.
3018-- Addes a row to geometry_columns.
3019-- Addes a constraint on the table that all the geometries MUST have the same
3020-- SRID. Checks the coord_dimension to make sure its between 0 and 3.
3021-- Should also check the precision grid (future expansion).
3022-- Calls fix_geometry_columns() at the end.
3023--
3024-----------------------------------------------------------------------
3025CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)
3026        RETURNS text
3027        AS
3028'
3029DECLARE
3030        catalog_name alias for $1;
3031        schema_name alias for $2;
3032        table_name alias for $3;
3033        column_name alias for $4;
3034        new_srid alias for $5;
3035        new_type alias for $6;
3036        new_dim alias for $7;
3037#if USE_VERSION >= 73
3038        rec RECORD;
3039        schema_ok bool;
3040        real_schema name;
3041#endif
3042
3043BEGIN
3044
3045        IF ( not ( (new_type =''GEOMETRY'') or
3046                   (new_type =''GEOMETRYCOLLECTION'') or
3047                   (new_type =''POINT'') or
3048                   (new_type =''MULTIPOINT'') or
3049                   (new_type =''POLYGON'') or
3050                   (new_type =''MULTIPOLYGON'') or
3051                   (new_type =''LINESTRING'') or
3052                   (new_type =''MULTILINESTRING'') or
3053                   (new_type =''GEOMETRYCOLLECTIONM'') or
3054                   (new_type =''POINTM'') or
3055                   (new_type =''MULTIPOINTM'') or
3056                   (new_type =''POLYGONM'') or
3057                   (new_type =''MULTIPOLYGONM'') or
3058                   (new_type =''LINESTRINGM'') or
3059                   (new_type =''MULTILINESTRINGM'') or
3060                   (new_type = ''CIRCULARSTRING'') or
3061                   (new_type = ''CIRCULARSTRINGM'') or
3062                   (new_type = ''COMPOUNDCURVE'') or
3063                   (new_type = ''COMPOUNDCURVEM'') or
3064                   (new_type = ''CURVEPOLYGON'') or
3065                   (new_type = ''CURVEPOLYGONM'') or
3066                   (new_type = ''MULTICURVE'') or
3067                   (new_type = ''MULTICURVEM'') or
3068                   (new_type = ''MULTISURFACE'') or
3069                   (new_type = ''MULTISURFACEM'')) )
3070        THEN
3071                RAISE EXCEPTION ''Invalid type name - valid ones are:
3072                        GEOMETRY, GEOMETRYCOLLECTION, POINT,
3073                        MULTIPOINT, POLYGON, MULTIPOLYGON,
3074                        LINESTRING, MULTILINESTRING,
3075                        CIRCULARSTRING, COMPOUNDCURVE,
3076                        CURVEPOLYGON, MULTICURVE, MULTISURFACE,
3077                        GEOMETRYCOLLECTIONM, POINTM,
3078                        MULTIPOINTM, POLYGONM, MULTIPOLYGONM,
3079                        LINESTRINGM, MULTILINESTRINGM
3080                        CIRCULARSTRINGM, COMPOUNDCURVEM,
3081                        CURVEPOLYGONM, MULTICURVEM or MULTISURFACEM'';
3082                return ''fail'';
3083        END IF;
3084
3085        IF ( (new_dim >4) or (new_dim <0) ) THEN
3086                RAISE EXCEPTION ''invalid dimension'';
3087                return ''fail'';
3088        END IF;
3089
3090        IF ( (new_type LIKE ''%M'') and (new_dim!=3) ) THEN
3091
3092                RAISE EXCEPTION ''TypeM needs 3 dimensions'';
3093                return ''fail'';
3094        END IF;
3095
3096#if USE_VERSION >= 73
3097        IF ( schema_name != '''' ) THEN
3098                schema_ok = ''f'';
3099                FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
3100                        schema_ok := ''t'';
3101                END LOOP;
3102
3103                if ( schema_ok <> ''t'' ) THEN
3104                        RAISE NOTICE ''Invalid schema name - using current_schema()'';
3105                        SELECT current_schema() into real_schema;
3106                ELSE
3107                        real_schema = schema_name;
3108                END IF;
3109
3110        ELSE
3111                SELECT current_schema() into real_schema;
3112        END IF;
3113#endif
3114
3115
3116        -- Add geometry column
3117
3118        EXECUTE ''ALTER TABLE '' ||
3119#if USE_VERSION >= 73
3120                quote_ident(real_schema) || ''.'' || quote_ident(table_name)
3121#else
3122                quote_ident(table_name)
3123#endif
3124                || '' ADD COLUMN '' || quote_ident(column_name) ||
3125                '' geometry '';
3126
3127
3128        -- Delete stale record in geometry_column (if any)
3129
3130        EXECUTE ''DELETE FROM geometry_columns WHERE
3131                f_table_catalog = '' || quote_literal('''') ||
3132                '' AND f_table_schema = '' ||
3133#if USE_VERSION >= 73
3134                quote_literal(real_schema) ||
3135#else
3136                quote_literal('''') ||
3137#endif
3138                '' AND f_table_name = '' || quote_literal(table_name) ||
3139                '' AND f_geometry_column = '' || quote_literal(column_name);
3140
3141
3142        -- Add record in geometry_column
3143
3144        EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
3145                quote_literal('''') || '','' ||
3146#if USE_VERSION >= 73
3147                quote_literal(real_schema) || '','' ||
3148#else
3149                quote_literal('''') || '','' ||
3150#endif
3151                quote_literal(table_name) || '','' ||
3152                quote_literal(column_name) || '','' ||
3153                new_dim::text || '','' || new_srid::text || '','' ||
3154                quote_literal(new_type) || '')'';
3155
3156        -- Add table checks
3157
3158        EXECUTE ''ALTER TABLE '' ||
3159#if USE_VERSION >= 73
3160                quote_ident(real_schema) || ''.'' || quote_ident(table_name)
3161#else
3162                quote_ident(table_name)
3163#endif
3164                || '' ADD CONSTRAINT ''
3165                || quote_ident(''enforce_srid_'' || column_name)
3166                || '' CHECK (SRID('' || quote_ident(column_name) ||
3167                '') = '' || new_srid::text || '')'' ;
3168
3169        EXECUTE ''ALTER TABLE '' ||
3170#if USE_VERSION >= 73
3171                quote_ident(real_schema) || ''.'' || quote_ident(table_name)
3172#else
3173                quote_ident(table_name)
3174#endif
3175                || '' ADD CONSTRAINT ''
3176                || quote_ident(''enforce_dims_'' || column_name)
3177                || '' CHECK (ndims('' || quote_ident(column_name) ||
3178                '') = '' || new_dim::text || '')'' ;
3179
3180        IF (not(new_type = ''GEOMETRY'')) THEN
3181                EXECUTE ''ALTER TABLE '' ||
3182#if USE_VERSION >= 73
3183                quote_ident(real_schema) || ''.'' || quote_ident(table_name)
3184#else
3185                quote_ident(table_name)
3186#endif
3187                || '' ADD CONSTRAINT ''
3188                || quote_ident(''enforce_geotype_'' || column_name)
3189                || '' CHECK (geometrytype('' ||
3190                quote_ident(column_name) || '')='' ||
3191                quote_literal(new_type) || '' OR ('' ||
3192                quote_ident(column_name) || '') is null)'';
3193        END IF;
3194
3195        return
3196#if USE_VERSION >= 73
3197                real_schema || ''.'' ||
3198#endif
3199                table_name || ''.'' || column_name ||
3200                '' SRID:'' || new_srid::text ||
3201                '' TYPE:'' || new_type ||
3202                '' DIMS:'' || new_dim::text || chr(10) || '' '';
3203END;
3204'
3205LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3206
3207----------------------------------------------------------------------------
3208-- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
3209----------------------------------------------------------------------------
3210--
3211-- This is a wrapper to the real AddGeometryColumn, for use
3212-- when catalogue is undefined
3213--
3214----------------------------------------------------------------------------
3215CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS '
3216DECLARE
3217        ret  text;
3218BEGIN
3219        SELECT AddGeometryColumn('''',$1,$2,$3,$4,$5,$6) into ret;
3220        RETURN ret;
3221END;
3222'
3223LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
3224
3225----------------------------------------------------------------------------
3226-- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> )
3227----------------------------------------------------------------------------
3228--
3229-- This is a wrapper to the real AddGeometryColumn, for use
3230-- when catalogue and schema are undefined
3231--
3232----------------------------------------------------------------------------
3233CREATEFUNCTION AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS '
3234DECLARE
3235        ret  text;
3236BEGIN
3237        SELECT AddGeometryColumn('''','''',$1,$2,$3,$4,$5) into ret;
3238        RETURN ret;
3239END;
3240'
3241LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3242
3243-----------------------------------------------------------------------
3244-- DROPGEOMETRYCOLUMN
3245--   <catalogue>, <schema>, <table>, <column>
3246-----------------------------------------------------------------------
3247--
3248-- Removes geometry column reference from geometry_columns table.
3249-- Drops the column with pgsql >= 73.
3250-- Make some silly enforcements on it for pgsql < 73
3251--
3252-----------------------------------------------------------------------
3253CREATEFUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar)
3254        RETURNS text
3255        AS
3256'
3257DECLARE
3258        catalog_name alias for $1;
3259        schema_name alias for $2;
3260        table_name alias for $3;
3261        column_name alias for $4;
3262        myrec RECORD;
3263        okay boolean;
3264        real_schema name;
3265
3266BEGIN
3267
3268
3269#if USE_VERSION >= 73
3270        -- Find, check or fix schema_name
3271        IF ( schema_name != '''' ) THEN
3272                okay = ''f'';
3273
3274                FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
3275                        okay := ''t'';
3276                END LOOP;
3277
3278                IF ( okay <> ''t'' ) THEN
3279                        RAISE NOTICE ''Invalid schema name - using current_schema()'';
3280                        SELECT current_schema() into real_schema;
3281                ELSE
3282                        real_schema = schema_name;
3283                END IF;
3284        ELSE
3285                SELECT current_schema() into real_schema;
3286        END IF;
3287#else
3288        real_schema = schema_name;
3289#endif
3290
3291        -- Find out if the column is in the geometry_columns table
3292        okay = ''f'';
3293        FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
3294                okay := ''t'';
3295        END LOOP;
3296        IF (okay <> ''t'') THEN
3297                RAISE EXCEPTION ''column not found in geometry_columns table'';
3298                RETURN ''f'';
3299        END IF;
3300
3301        -- Remove ref from geometry_columns table
3302        EXECUTE ''delete from geometry_columns where f_table_schema = '' ||
3303                quote_literal(real_schema) || '' and f_table_name = '' ||
3304                quote_literal(table_name)  || '' and f_geometry_column = '' ||
3305                quote_literal(column_name);
3306       
3307#if USE_VERSION < 73
3308        -- Remove not-null constraint to table column
3309        EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
3310        -- update the given table/column so that it it all NULLS
3311        EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
3312        -- add = NULL constraint to given table/column
3313        EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
3314#else
3315        -- Remove table column
3316        EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) || ''.'' ||
3317                quote_ident(table_name) || '' DROP COLUMN '' ||
3318                quote_ident(column_name);
3319#endif
3320
3321
3322        RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' effectively removed.'';
3323       
3324END;
3325'
3326LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3327
3328-----------------------------------------------------------------------
3329-- DROPGEOMETRYCOLUMN
3330--   <schema>, <table>, <column>
3331-----------------------------------------------------------------------
3332--
3333-- This is a wrapper to the real DropGeometryColumn, for use
3334-- when catalogue is undefined
3335--
3336-----------------------------------------------------------------------
3337CREATEFUNCTION DropGeometryColumn(varchar,varchar,varchar)
3338        RETURNS text
3339        AS
3340'
3341DECLARE
3342        ret text;
3343BEGIN
3344        SELECT DropGeometryColumn('''',$1,$2,$3) into ret;
3345        RETURN ret;
3346END;
3347'
3348LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3349
3350-----------------------------------------------------------------------
3351-- DROPGEOMETRYCOLUMN
3352--   <table>, <column>
3353-----------------------------------------------------------------------
3354--
3355-- This is a wrapper to the real DropGeometryColumn, for use
3356-- when catalogue and schema is undefined.
3357--
3358-----------------------------------------------------------------------
3359CREATEFUNCTION DropGeometryColumn(varchar,varchar)
3360        RETURNS text
3361        AS
3362'
3363DECLARE
3364        ret text;
3365BEGIN
3366        SELECT DropGeometryColumn('''','''',$1,$2) into ret;
3367        RETURN ret;
3368END;
3369'
3370LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3371
3372-----------------------------------------------------------------------
3373-- DROPGEOMETRYTABLE
3374--   <catalogue>, <schema>, <table>
3375-----------------------------------------------------------------------
3376--
3377-- Drop a table and all its references in geometry_columns
3378--
3379-----------------------------------------------------------------------
3380CREATEFUNCTION DropGeometryTable(varchar, varchar,varchar)
3381        RETURNS text
3382        AS
3383'
3384DECLARE
3385        catalog_name alias for $1;
3386        schema_name alias for $2;
3387        table_name alias for $3;
3388        real_schema name;
3389
3390BEGIN
3391
3392#if USE_VERSION >= 73
3393        IF ( schema_name = '''' ) THEN
3394                SELECT current_schema() into real_schema;
3395        ELSE
3396                real_schema = schema_name;
3397        END IF;
3398#endif
3399
3400        -- Remove refs from geometry_columns table
3401        EXECUTE ''DELETE FROM geometry_columns WHERE '' ||
3402#if USE_VERSION >= 73
3403                ''f_table_schema = '' || quote_literal(real_schema) ||
3404                '' AND '' ||
3405#endif
3406                '' f_table_name = '' || quote_literal(table_name);
3407       
3408        -- Remove table
3409        EXECUTE ''DROP TABLE ''
3410#if USE_VERSION >= 73
3411                || quote_ident(real_schema) || ''.'' ||
3412#endif
3413                quote_ident(table_name);
3414
3415        RETURN
3416#if USE_VERSION >= 73
3417                real_schema || ''.'' ||
3418#endif
3419                table_name ||'' dropped.'';
3420       
3421END;
3422'
3423LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3424
3425-----------------------------------------------------------------------
3426-- DROPGEOMETRYTABLE
3427--   <schema>, <table>
3428-----------------------------------------------------------------------
3429--
3430-- Drop a table and all its references in geometry_columns
3431--
3432-----------------------------------------------------------------------
3433CREATEFUNCTION DropGeometryTable(varchar,varchar) RETURNS text AS
3434'SELECT DropGeometryTable('''',$1,$2)'
3435LANGUAGE 'sql' WITH (isstrict);
3436
3437-----------------------------------------------------------------------
3438-- DROPGEOMETRYTABLE
3439--   <table>
3440-----------------------------------------------------------------------
3441--
3442-- Drop a table and all its references in geometry_columns
3443-- For PG>=73 use current_schema()
3444--
3445-----------------------------------------------------------------------
3446CREATEFUNCTION DropGeometryTable(varchar) RETURNS text AS
3447'SELECT DropGeometryTable('''','''',$1)'
3448LANGUAGE 'sql' _VOLATILE_STRICT; -- WITH (isstrict);
3449
3450-----------------------------------------------------------------------
3451-- UPDATEGEOMETRYSRID
3452--   <catalogue>, <schema>, <table>, <column>, <srid>
3453-----------------------------------------------------------------------
3454--
3455-- Change SRID of all features in a spatially-enabled table
3456--
3457-----------------------------------------------------------------------
3458CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer)
3459        RETURNS text
3460        AS
3461'
3462DECLARE
3463        catalog_name alias for $1;
3464        schema_name alias for $2;
3465        table_name alias for $3;
3466        column_name alias for $4;
3467        new_srid alias for $5;
3468        myrec RECORD;
3469        okay boolean;
3470        cname varchar;
3471        real_schema name;
3472
3473BEGIN
3474
3475
3476#if USE_VERSION >= 73
3477        -- Find, check or fix schema_name
3478        IF ( schema_name != '''' ) THEN
3479                okay = ''f'';
3480
3481                FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
3482                        okay := ''t'';
3483                END LOOP;
3484
3485                IF ( okay <> ''t'' ) THEN
3486                        RAISE EXCEPTION ''Invalid schema name'';
3487                ELSE
3488                        real_schema = schema_name;
3489                END IF;
3490        ELSE
3491                SELECT INTO real_schema current_schema()::text;
3492        END IF;
3493#endif
3494
3495        -- Find out if the column is in the geometry_columns table
3496        okay = ''f'';
3497        FOR myrec IN SELECT * from geometry_columns where f_table_schema = text(real_schema) and f_table_name = table_name and f_geometry_column = column_name LOOP
3498                okay := ''t'';
3499        END LOOP;
3500        IF (okay <> ''t'') THEN
3501                RAISE EXCEPTION ''column not found in geometry_columns table'';
3502                RETURN ''f'';
3503        END IF;
3504
3505        -- Update ref from geometry_columns table
3506        EXECUTE ''UPDATE geometry_columns SET SRID = '' || new_srid::text ||
3507                '' where f_table_schema = '' ||
3508                quote_literal(real_schema) || '' and f_table_name = '' ||
3509                quote_literal(table_name)  || '' and f_geometry_column = '' ||
3510                quote_literal(column_name);
3511       
3512        -- Make up constraint name
3513        cname = ''enforce_srid_''  || column_name;
3514
3515        -- Drop enforce_srid constraint
3516#if USE_VERSION < 73
3517        EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
3518#else
3519        EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
3520                ''.'' || quote_ident(table_name) ||
3521#endif
3522                '' DROP constraint '' || quote_ident(cname);
3523
3524        -- Update geometries SRID
3525#if USE_VERSION < 73
3526        EXECUTE ''UPDATE '' || quote_ident(table_name) ||
3527#else
3528        EXECUTE ''UPDATE '' || quote_ident(real_schema) ||
3529                ''.'' || quote_ident(table_name) ||
3530#endif
3531                '' SET '' || quote_ident(column_name) ||
3532                '' = setSRID('' || quote_ident(column_name) ||
3533                '', '' || new_srid::text || '')'';
3534
3535        -- Reset enforce_srid constraint
3536#if USE_VERSION < 73
3537        EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
3538#else
3539        EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
3540                ''.'' || quote_ident(table_name) ||
3541#endif
3542                '' ADD constraint '' || quote_ident(cname) ||
3543                '' CHECK (srid('' || quote_ident(column_name) ||
3544                '') = '' || new_srid::text || '')'';
3545
3546        RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' SRID changed to '' || new_srid::text;
3547       
3548END;
3549'
3550LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3551
3552-----------------------------------------------------------------------
3553-- UPDATEGEOMETRYSRID
3554--   <schema>, <table>, <column>, <srid>
3555-----------------------------------------------------------------------
3556CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer)
3557        RETURNS text
3558        AS '
3559DECLARE
3560        ret  text;
3561BEGIN
3562        SELECT UpdateGeometrySRID('''',$1,$2,$3,$4) into ret;
3563        RETURN ret;
3564END;
3565'
3566LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3567
3568-----------------------------------------------------------------------
3569-- UPDATEGEOMETRYSRID
3570--   <table>, <column>, <srid>
3571-----------------------------------------------------------------------
3572CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,integer)
3573        RETURNS text
3574        AS '
3575DECLARE
3576        ret  text;
3577BEGIN
3578        SELECT UpdateGeometrySRID('''','''',$1,$2,$3) into ret;
3579        RETURN ret;
3580END;
3581'
3582LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
3583
3584-----------------------------------------------------------------------
3585-- UPDATE_GEOMETRY_STATS()
3586-----------------------------------------------------------------------
3587--
3588-- Only meaningful for PG<75.
3589-- Gather statisticts about geometry columns for use
3590-- with cost estimator.
3591--
3592-- It is defined also for PG>=75 for back-compatibility
3593--
3594-----------------------------------------------------------------------
3595#if USE_VERSION >= 80
3596CREATEFUNCTION update_geometry_stats() RETURNS text
3597AS ' SELECT ''update_geometry_stats() has been obsoleted. Statistics are automatically built running the ANALYZE command''::text' LANGUAGE 'sql';
3598#else
3599CREATEFUNCTION update_geometry_stats()
3600RETURNS text
3601AS
3602'
3603DECLARE
3604        result text;
3605        stated integer;
3606BEGIN
3607
3608        UPDATE geometry_columns SET
3609#if USE_VERSION >= 73
3610                stats = (build_histogram2d(create_histogram2d(
3611                        find_extent(f_table_schema, f_table_name, f_geometry_column), 40), f_table_schema, f_table_name, f_geometry_column))
3612                FROM pg_class c, pg_attribute a, pg_namespace n
3613                WHERE n.nspname = f_table_schema::name
3614                AND c.relname = f_table_name::name
3615                AND c.relnamespace = n.oid
3616#else
3617                stats = (build_histogram2d(create_histogram2d(
3618                        find_extent(f_table_name, f_geometry_column),
3619                        40), f_table_name, f_geometry_column))
3620                FROM pg_class c, pg_attribute a
3621                WHERE c.relname = f_table_name::name
3622#endif
3623                AND a.attname = f_geometry_column::name
3624                AND a.attrelid = c.oid
3625                AND geometry_columns.attrelid is not null;
3626
3627        GET DIAGNOSTICS stated = ROW_COUNT;
3628
3629        result = ''stats:'' || stated::text;
3630
3631        return result;
3632END;
3633'
3634LANGUAGE 'plpgsql' _VOLATILE_STRICT;
3635#endif
3636
3637-----------------------------------------------------------------------
3638-- UPDATE_GEOMETRY_STATS( <table>, <column> )
3639-----------------------------------------------------------------------
3640--
3641-- Only meaningful for PG<75.
3642-- Gather statisticts about a geometry column for use
3643-- with cost estimator.
3644--
3645-- It is defined also for PG>=75 for back-compatibility
3646--
3647-----------------------------------------------------------------------
3648#if USE_VERSION >= 80
3649CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
3650AS 'SELECT update_geometry_stats();' LANGUAGE 'sql' ;
3651#else
3652CREATEFUNCTION update_geometry_stats(varchar,varchar) RETURNS text
3653AS
3654'
3655DECLARE
3656        tablename aliAS for $1;
3657        columnname aliAS for $2;
3658        stated integer;
3659        result text;
3660BEGIN
3661
3662        EXECUTE ''UPDATE geometry_columns SET
3663#if USE_VERSION >= 73
3664                        stats = (build_histogram2d(create_histogram2d(
3665                                find_extent(f_table_schema,
3666                                        f_table_name,
3667                                        f_geometry_column), 40),
3668                                        f_table_schema, f_table_name,
3669                                        f_geometry_column))
3670                        FROM pg_class c, pg_attribute a, pg_namespace n
3671                        WHERE n.nspname = f_table_schema::name
3672                        AND c.relname = f_table_name::name
3673                        AND a.attname = f_geometry_column::name
3674                        AND c.relnamespace = n.oid
3675                        AND a.attrelid = c.oid
3676#else
3677                        stats = (build_histogram2d(create_histogram2d(
3678                                find_extent(f_table_name, f_geometry_column),
3679                                40), f_table_name, f_geometry_column))
3680                        FROM pg_class c, pg_attribute a
3681                        WHERE c.relname = f_table_name::name
3682                        AND a.attname = f_geometry_column::name
3683                        AND a.attrelid = c.oid
3684#endif
3685                        AND f_table_name = '' || quote_literal(tablename) || ''
3686                        AND f_geometry_column = '' || quote_literal(columnname)
3687                        || '' AND geometry_columns.attrelid is not null'';
3688
3689        GET DIAGNOSTICS stated = ROW_COUNT;
3690
3691        result = ''stats:'' || stated::text;
3692
3693        return result;
3694END;
3695'
3696LANGUAGE 'plpgsql' _VOLATILE_STRICT;
3697
3698#endif
3699
3700-----------------------------------------------------------------------
3701-- FIND_SRID( <schema>, <table>, <geom col> )
3702-----------------------------------------------------------------------
3703CREATEFUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS
3704'DECLARE
3705   schem text;
3706   tabl text;
3707   sr int4;
3708BEGIN
3709   IF $1 IS NULL THEN
3710      RAISE EXCEPTION ''find_srid() - schema is NULL!'';
3711   END IF;
3712   IF $2 IS NULL THEN
3713      RAISE EXCEPTION ''find_srid() - table name is NULL!'';
3714   END IF;
3715   IF $3 IS NULL THEN
3716      RAISE EXCEPTION ''find_srid() - column name is NULL!'';
3717   END IF;
3718   schem = $1;
3719   tabl = $2;
3720-- if the table contains a . and the schema is empty
3721-- split the table into a schema and a table
3722-- otherwise drop through to default behavior
3723   IF ( schem = '''' and tabl LIKE ''%.%'' ) THEN
3724     schem = substr(tabl,1,strpos(tabl,''.'')-1);
3725     tabl = substr(tabl,length(schem)+2);
3726   ELSE
3727     schem = schem || ''%'';
3728   END IF;
3729
3730   select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3;
3731   IF NOT FOUND THEN
3732       RAISE EXCEPTION ''find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table?  Is there an uppercase/lowercase missmatch?'';
3733   END IF;
3734  return sr;
3735END;
3736'
3737LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable);
3738
3739
3740---------------------------------------------------------------
3741-- PROJ support
3742---------------------------------------------------------------
3743
3744CREATEFUNCTION get_proj4_from_srid(integer) RETURNS text AS
3745'
3746BEGIN
3747        RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1;
3748END;
3749'
3750LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
3751
3752
3753
3754CREATEFUNCTION transform_geometry(geometry,text,text,int)
3755        RETURNS geometry
3756        AS '@MODULE_FILENAME@','transform_geom'
3757        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3758
3759CREATEFUNCTION transform(geometry,integer)
3760        RETURNS geometry
3761        AS '@MODULE_FILENAME@','transform'
3762        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3763
3764-- PostGIS equivalent function: transform(geometry,integer)
3765CREATEFUNCTION ST_Transform(geometry,integer)
3766    RETURNS geometry
3767    AS '@MODULE_FILENAME@','transform'
3768    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3769
3770
3771-----------------------------------------------------------------------
3772-- POSTGIS_VERSION()
3773-----------------------------------------------------------------------
3774
3775CREATEFUNCTION postgis_version() RETURNS text
3776        AS '@MODULE_FILENAME@'
3777        LANGUAGE 'C' _IMMUTABLE;
3778
3779CREATEFUNCTION postgis_proj_version() RETURNS text
3780        AS '@MODULE_FILENAME@'
3781        LANGUAGE 'C' _IMMUTABLE;
3782
3783--
3784-- IMPORTANT:
3785-- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl
3786-- to extract version of postgis being installed.
3787-- Do not modify this w/out also changing postgis_proc_upgrade.pl
3788--
3789CREATEFUNCTION postgis_scripts_installed() RETURNS text
3790        AS 'SELECT ''@POSTGIS_SCRIPTS_VERSION@''::text AS version'
3791        LANGUAGE 'sql' _IMMUTABLE;
3792
3793CREATEFUNCTION postgis_lib_version() RETURNS text
3794        AS '@MODULE_FILENAME@'
3795        LANGUAGE 'C' _IMMUTABLE; -- a new lib will require a new session
3796
3797-- NOTE: starting at 1.1.0 this is the same of postgis_lib_version()
3798CREATEFUNCTION postgis_scripts_released() RETURNS text
3799        AS '@MODULE_FILENAME@'
3800        LANGUAGE 'C' _IMMUTABLE;
3801
3802CREATEFUNCTION postgis_uses_stats() RETURNS bool
3803        AS '@MODULE_FILENAME@'
3804        LANGUAGE 'C' _IMMUTABLE;
3805
3806CREATEFUNCTION postgis_geos_version() RETURNS text
3807        AS '@MODULE_FILENAME@'
3808        LANGUAGE 'C' _IMMUTABLE;
3809
3810CREATEFUNCTION postgis_jts_version() RETURNS text
3811        AS '@MODULE_FILENAME@'
3812        LANGUAGE 'C' _IMMUTABLE;
3813
3814CREATEFUNCTION postgis_scripts_build_date() RETURNS text
3815        AS 'SELECT ''@POSTGIS_BUILD_DATE@''::text AS version'
3816        LANGUAGE 'sql' _IMMUTABLE;
3817
3818CREATEFUNCTION postgis_lib_build_date() RETURNS text
3819        AS '@MODULE_FILENAME@'
3820        LANGUAGE 'C' _IMMUTABLE;
3821
3822
3823
3824CREATEFUNCTION postgis_full_version() RETURNS text
3825AS '
3826DECLARE
3827        libver text;
3828        projver text;
3829        geosver text;
3830        jtsver text;
3831        usestats bool;
3832        dbproc text;
3833        relproc text;
3834        fullver text;
3835BEGIN
3836        SELECT postgis_lib_version() INTO libver;
3837        SELECT postgis_proj_version() INTO projver;
3838        SELECT postgis_geos_version() INTO geosver;
3839        SELECT postgis_jts_version() INTO jtsver;
3840        SELECT postgis_uses_stats() INTO usestats;
3841        SELECT postgis_scripts_installed() INTO dbproc;
3842        SELECT postgis_scripts_released() INTO relproc;
3843
3844        fullver = ''POSTGIS="'' || libver || ''"'';
3845
3846        IF  geosver IS NOT NULL THEN
3847                fullver = fullver || '' GEOS="'' || geosver || ''"'';
3848        END IF;
3849
3850        IF  jtsver IS NOT NULL THEN
3851                fullver = fullver || '' JTS="'' || jtsver || ''"'';
3852        END IF;
3853
3854        IF  projver IS NOT NULL THEN
3855                fullver = fullver || '' PROJ="'' || projver || ''"'';
3856        END IF;
3857
3858        IF usestats THEN
3859                fullver = fullver || '' USE_STATS'';
3860        END IF;
3861
3862        -- fullver = fullver || '' DBPROC="'' || dbproc || ''"'';
3863        -- fullver = fullver || '' RELPROC="'' || relproc || ''"'';
3864
3865        IF dbproc != relproc THEN
3866                fullver = fullver || '' (procs from '' || dbproc || '' need upgrade)'';
3867        END IF;
3868
3869        RETURN fullver;
3870END
3871'
3872LANGUAGE 'plpgsql' _IMMUTABLE;
3873
3874---------------------------------------------------------------
3875-- CASTS
3876---------------------------------------------------------------
3877
3878-- Deprecation in 1.2.3
3879CREATEFUNCTION box2d(geometry)
3880        RETURNS box2d
3881        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
3882        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3883
3884-- Availability: 1.2.2
3885CREATEFUNCTION ST_box2d(geometry)
3886        RETURNS box2d
3887        AS '@MODULE_FILENAME@','LWGEOM_to_BOX2DFLOAT4'
3888        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3889
3890-- Deprecation in 1.2.3
3891CREATEFUNCTION box3d(geometry)
3892        RETURNS box3d
3893        AS '@MODULE_FILENAME@','LWGEOM_to_BOX3D'
3894        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3895
3896-- Availability: 1.2.2
3897CREATEFUNCTION ST_box3d(geometry)
3898        RETURNS box3d
3899        AS '@MODULE_FILENAME@','LWGEOM_to_BOX3D'
3900        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3901
3902-- Deprecation in 1.2.3
3903CREATEFUNCTION box(geometry)
3904        RETURNS box
3905        AS '@MODULE_FILENAME@','LWGEOM_to_BOX'
3906        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3907
3908-- Availability: 1.2.2
3909CREATEFUNCTION ST_box(geometry)
3910        RETURNS box
3911        AS '@MODULE_FILENAME@','LWGEOM_to_BOX'
3912        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3913
3914-- Deprecation in 1.2.3
3915CREATEFUNCTION box2d(box3d)
3916        RETURNS box2d
3917        AS '@MODULE_FILENAME@','BOX3D_to_BOX2DFLOAT4'
3918        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3919
3920-- Availability: 1.2.2
3921CREATEFUNCTION ST_box2d(box3d)
3922        RETURNS box2d
3923        AS '@MODULE_FILENAME@','BOX3D_to_BOX2DFLOAT4'
3924        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3925
3926-- Deprecation in 1.2.3
3927CREATEFUNCTION box3d(box2d)
3928        RETURNS box3d
3929        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_BOX3D'
3930        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3931
3932-- Availability: 1.2.2
3933CREATEFUNCTION ST_box3d(box2d)
3934        RETURNS box3d
3935        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_BOX3D'
3936        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3937
3938-- Deprecation in 1.2.3
3939CREATEFUNCTION box(box3d)
3940        RETURNS box
3941        AS '@MODULE_FILENAME@','BOX3D_to_BOX'
3942        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3943
3944-- Availability: 1.2.2
3945CREATEFUNCTION ST_box(box3d)
3946        RETURNS box
3947        AS '@MODULE_FILENAME@','BOX3D_to_BOX'
3948        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3949
3950-- Deprecation in 1.2.3
3951CREATEFUNCTION text(geometry)
3952        RETURNS text
3953        AS '@MODULE_FILENAME@','LWGEOM_to_text'
3954        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3955
3956-- Availability: 1.2.2
3957CREATEFUNCTION ST_text(geometry)
3958        RETURNS text
3959        AS '@MODULE_FILENAME@','LWGEOM_to_text'
3960        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3961
3962-- this is kept for backward-compatibility
3963-- Deprecation in 1.2.3
3964CREATEFUNCTION box3dtobox(box3d)
3965        RETURNS box
3966        AS 'SELECT box($1)'
3967        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3968
3969-- Deprecation in 1.2.3
3970CREATEFUNCTION geometry(box2d)
3971        RETURNS geometry
3972        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_LWGEOM'
3973        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3974
3975-- Availability: 1.2.2
3976CREATEFUNCTION ST_geometry(box2d)
3977        RETURNS geometry
3978        AS '@MODULE_FILENAME@','BOX2DFLOAT4_to_LWGEOM'
3979        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3980
3981-- Deprecation in 1.2.3
3982CREATEFUNCTION geometry(box3d)
3983        RETURNS geometry
3984        AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
3985        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3986
3987-- Availability: 1.2.2
3988CREATEFUNCTION ST_geometry(box3d)
3989        RETURNS geometry
3990        AS '@MODULE_FILENAME@','BOX3D_to_LWGEOM'
3991        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3992
3993-- Deprecation in 1.2.3
3994CREATEFUNCTION geometry(text)
3995        RETURNS geometry
3996        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
3997        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
3998
3999-- Availability: 1.2.2
4000CREATEFUNCTION ST_geometry(text)
4001        RETURNS geometry
4002        AS '@MODULE_FILENAME@','parse_WKT_lwgeom'
4003        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4004
4005-- Deprecation in 1.2.3
4006CREATEFUNCTION geometry(chip)
4007        RETURNS geometry
4008        AS '@MODULE_FILENAME@','CHIP_to_LWGEOM'
4009        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4010
4011-- Availability: 1.2.2
4012CREATEFUNCTION ST_geometry(chip)
4013        RETURNS geometry
4014        AS '@MODULE_FILENAME@','CHIP_to_LWGEOM'
4015        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4016
4017-- Deprecation in 1.2.3
4018CREATEFUNCTION geometry(bytea)
4019        RETURNS geometry
4020        AS '@MODULE_FILENAME@','LWGEOM_from_bytea'
4021        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4022
4023-- Availability: 1.2.2
4024CREATEFUNCTION ST_geometry(bytea)
4025        RETURNS geometry
4026        AS '@MODULE_FILENAME@','LWGEOM_from_bytea'
4027        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4028
4029-- Deprecation in 1.2.3
4030CREATEFUNCTION bytea(geometry)
4031        RETURNS bytea
4032        AS '@MODULE_FILENAME@','LWGEOM_to_bytea'
4033        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4034
4035-- Availability: 1.2.2
4036CREATEFUNCTION ST_bytea(geometry)
4037        RETURNS bytea
4038        AS '@MODULE_FILENAME@','LWGEOM_to_bytea'
4039        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4040
4041-- Deprecation in 1.2.3
4042CREATEFUNCTION text(bool)
4043        RETURNS text
4044        AS '@MODULE_FILENAME@','BOOL_to_text'
4045        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4046
4047-- Availability: 1.2.2
4048CREATEFUNCTION ST_text(bool)
4049        RETURNS text
4050        AS '@MODULE_FILENAME@','BOOL_to_text'
4051        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4052
4053-- 7.3+ explicit casting definitions
4054#if USE_VERSION >= 73
4055CREATE CAST (geometry AS box2d) WITH FUNCTION ST_box2d(geometry) AS IMPLICIT;
4056CREATE CAST (geometry AS box3d) WITH FUNCTION ST_box3d(geometry) AS IMPLICIT;
4057CREATE CAST (geometry AS box) WITH FUNCTION ST_box(geometry) AS IMPLICIT;
4058CREATE CAST (box3d AS box2d) WITH FUNCTION ST_box2d(box3d) AS IMPLICIT;
4059CREATE CAST (box2d AS box3d) WITH FUNCTION ST_box3d(box2d) AS IMPLICIT;
4060CREATE CAST (box2d AS geometry) WITH FUNCTION ST_geometry(box2d) AS IMPLICIT;
4061CREATE CAST (box3d AS box) WITH FUNCTION ST_box(box3d) AS IMPLICIT;
4062CREATE CAST (box3d AS geometry) WITH FUNCTION ST_geometry(box3d) AS IMPLICIT;
4063CREATE CAST (text AS geometry) WITH FUNCTION ST_geometry(text) AS IMPLICIT;
4064CREATE CAST (geometry AS text) WITH FUNCTION ST_text(geometry) AS IMPLICIT;
4065CREATE CAST (chip AS geometry) WITH FUNCTION ST_geometry(chip) AS IMPLICIT;
4066CREATE CAST (bytea AS geometry) WITH FUNCTION ST_geometry(bytea) AS IMPLICIT;
4067CREATE CAST (geometry AS bytea) WITH FUNCTION ST_bytea(geometry) AS IMPLICIT;
4068-- CREATE CAST (bool AS text) WITH FUNCTION ST_text(bool) AS IMPLICIT;
4069#endif
4070
4071---------------------------------------------------------------
4072-- Algorithms
4073---------------------------------------------------------------
4074
4075-- Deprecation in 1.2.3
4076CREATEFUNCTION simplify(geometry, float8)
4077   RETURNS geometry
4078   AS '@MODULE_FILENAME@', 'LWGEOM_simplify2d'
4079   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4080
4081-- Availability: 1.2.2
4082CREATEFUNCTION ST_simplify(geometry, float8)
4083   RETURNS geometry
4084   AS '@MODULE_FILENAME@', 'LWGEOM_simplify2d'
4085   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4086
4087-- SnapToGrid(input, xoff, yoff, xsize, ysize)
4088-- Deprecation in 1.2.3
4089CREATEFUNCTION SnapToGrid(geometry, float8, float8, float8, float8)
4090   RETURNS geometry
4091   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid'
4092   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4093
4094-- Availability: 1.2.2
4095CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8)
4096   RETURNS geometry
4097   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid'
4098   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4099
4100-- SnapToGrid(input, xsize, ysize) # offsets=0
4101-- Deprecation in 1.2.3
4102CREATEFUNCTION SnapToGrid(geometry, float8, float8)
4103   RETURNS geometry
4104   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
4105   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4106
4107-- Availability: 1.2.2
4108CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8)
4109   RETURNS geometry
4110   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
4111   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4112
4113-- SnapToGrid(input, size) # xsize=ysize=size, offsets=0
4114-- Deprecation in 1.2.3
4115CREATEFUNCTION SnapToGrid(geometry, float8)
4116   RETURNS geometry
4117   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
4118   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4119
4120-- Availability: 1.2.2
4121CREATEFUNCTION ST_SnapToGrid(geometry, float8)
4122   RETURNS geometry
4123   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
4124   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4125
4126-- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize)
4127-- Deprecation in 1.2.3
4128CREATEFUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8)
4129   RETURNS geometry
4130   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid_pointoff'
4131   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4132
4133-- Availability: 1.2.2
4134CREATEFUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)
4135   RETURNS geometry
4136   AS '@MODULE_FILENAME@', 'LWGEOM_snaptogrid_pointoff'
4137   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4138
4139-- Deprecation in 1.2.3
4140CREATEFUNCTION segmentize(geometry, float8)
4141        RETURNS geometry
4142        AS '@MODULE_FILENAME@', 'LWGEOM_segmentize2d'
4143        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4144
4145-- Availability: 1.2.2
4146CREATEFUNCTION ST_segmentize(geometry, float8)
4147        RETURNS geometry
4148        AS '@MODULE_FILENAME@', 'LWGEOM_segmentize2d'
4149        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4150
4151---------------------------------------------------------------
4152-- LRS
4153---------------------------------------------------------------
4154
4155-- Deprecation in 1.2.3
4156CREATEFUNCTION line_interpolate_point(geometry, float8)
4157   RETURNS geometry
4158   AS '@MODULE_FILENAME@', 'LWGEOM_line_interpolate_point'
4159   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4160
4161-- Availability: 1.2.2
4162CREATEFUNCTION ST_line_interpolate_point(geometry, float8)
4163   RETURNS geometry
4164   AS '@MODULE_FILENAME@', 'LWGEOM_line_interpolate_point'
4165   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4166
4167-- Deprecation in 1.2.3
4168CREATEFUNCTION line_substring(geometry, float8, float8)
4169   RETURNS geometry
4170   AS '@MODULE_FILENAME@', 'LWGEOM_line_substring'
4171   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4172
4173-- Availability: 1.2.2
4174CREATEFUNCTION ST_line_substring(geometry, float8, float8)
4175   RETURNS geometry
4176   AS '@MODULE_FILENAME@', 'LWGEOM_line_substring'
4177   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4178
4179-- Deprecation in 1.2.3
4180CREATEFUNCTION line_locate_point(geometry, geometry)
4181   RETURNS float8
4182   AS '@MODULE_FILENAME@', 'LWGEOM_line_locate_point'
4183   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4184
4185-- Availability: 1.2.2
4186CREATEFUNCTION ST_line_locate_point(geometry, geometry)
4187   RETURNS float8
4188   AS '@MODULE_FILENAME@', 'LWGEOM_line_locate_point'
4189   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4190
4191-- Deprecation in 1.2.3
4192CREATEFUNCTION locate_between_measures(geometry, float8, float8)
4193        RETURNS geometry
4194        AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m'
4195        LANGUAGE 'C' _IMMUTABLE_STRICT;
4196
4197-- Availability: 1.2.2
4198CREATEFUNCTION ST_locate_between_measures(geometry, float8, float8)
4199        RETURNS geometry
4200        AS '@MODULE_FILENAME@', 'LWGEOM_locate_between_m'
4201        LANGUAGE 'C' _IMMUTABLE_STRICT;
4202
4203-- Deprecation in 1.2.3
4204CREATEFUNCTION locate_along_measure(geometry, float8)
4205        RETURNS geometry
4206        AS 'SELECT locate_between_measures($1, $2, $2)'
4207        LANGUAGE 'sql' _IMMUTABLE_STRICT;
4208
4209-- Availability: 1.2.2
4210CREATEFUNCTION ST_locate_along_measure(geometry, float8)
4211        RETURNS geometry
4212        AS 'SELECT locate_between_measures($1, $2, $2)'
4213        LANGUAGE 'sql' _IMMUTABLE_STRICT;
4214
4215---------------------------------------------------------------
4216-- GEOS
4217---------------------------------------------------------------
4218
4219-- Deprecation in 1.2.3
4220CREATEFUNCTION intersection(geometry,geometry)
4221   RETURNS geometry
4222   AS '@MODULE_FILENAME@','intersection'
4223   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4224
4225-- PostGIS equivalent function: intersection(geometry,geometry)
4226CREATEFUNCTION ST_Intersection(geometry,geometry)
4227    RETURNS geometry
4228    AS '@MODULE_FILENAME@','intersection'
4229    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4230
4231-- Deprecation in 1.2.3
4232CREATEFUNCTION buffer(geometry,float8)
4233   RETURNS geometry
4234   AS '@MODULE_FILENAME@','buffer'
4235   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4236
4237-- PostGIS equivalent function: buffer(geometry,float8)
4238CREATEFUNCTION ST_Buffer(geometry,float8)
4239    RETURNS geometry
4240    AS '@MODULE_FILENAME@','buffer'
4241    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4242
4243-- Deprecation in 1.2.3
4244CREATEFUNCTION buffer(geometry,float8,integer)
4245   RETURNS geometry
4246   AS '@MODULE_FILENAME@','buffer'
4247   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4248
4249-- Availability: 1.2.2
4250CREATEFUNCTION ST_buffer(geometry,float8,integer)
4251   RETURNS geometry
4252   AS '@MODULE_FILENAME@','buffer'
4253   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4254   
4255-- Deprecation in 1.2.3
4256CREATEFUNCTION convexhull(geometry)
4257        RETURNS geometry
4258        AS '@MODULE_FILENAME@','convexhull'
4259        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4260
4261-- PostGIS equivalent function: convexhull(geometry)
4262CREATEFUNCTION ST_ConvexHull(geometry)
4263    RETURNS geometry
4264    AS '@MODULE_FILENAME@','convexhull'
4265    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4266
4267-- Deprecation in 1.2.3
4268CREATEFUNCTION difference(geometry,geometry)
4269        RETURNS geometry
4270        AS '@MODULE_FILENAME@','difference'
4271        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4272
4273-- PostGIS equivalent function: difference(geometry,geometry)
4274CREATEFUNCTION ST_Difference(geometry,geometry)
4275    RETURNS geometry
4276    AS '@MODULE_FILENAME@','difference'
4277    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4278
4279-- Deprecation in 1.2.3
4280CREATEFUNCTION boundary(geometry)
4281        RETURNS geometry
4282        AS '@MODULE_FILENAME@','boundary'
4283        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4284
4285-- PostGIS equivalent function: boundary(geometry)
4286CREATEFUNCTION ST_Boundary(geometry)
4287        RETURNS geometry
4288        AS '@MODULE_FILENAME@','boundary'
4289        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4290
4291-- Deprecation in 1.2.3
4292CREATEFUNCTION symdifference(geometry,geometry)
4293        RETURNS geometry
4294        AS '@MODULE_FILENAME@','symdifference'
4295        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4296
4297-- PostGIS equivalent function: symdifference(geometry,geometry)
4298CREATEFUNCTION ST_SymDifference(geometry,geometry)
4299    RETURNS geometry
4300    AS '@MODULE_FILENAME@','symdifference'
4301    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4302
4303-- Deprecation in 1.2.3
4304CREATEFUNCTION symmetricdifference(geometry,geometry)
4305        RETURNS geometry
4306        AS '@MODULE_FILENAME@','symdifference'
4307        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4308
4309-- Availability: 1.2.2
4310CREATEFUNCTION ST_symmetricdifference(geometry,geometry)
4311        RETURNS geometry
4312        AS '@MODULE_FILENAME@','symdifference'
4313        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4314
4315-- Deprecation in 1.2.3
4316CREATEFUNCTION GeomUnion(geometry,geometry)
4317        RETURNS geometry
4318        AS '@MODULE_FILENAME@','geomunion'
4319        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4320
4321-- PostGIS equivalent function: GeomUnion(geometry,geometry)
4322CREATEFUNCTION ST_Union(geometry,geometry)
4323    RETURNS geometry
4324    AS '@MODULE_FILENAME@','geomunion'
4325    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4326
4327-- Deprecation in 1.2.3
4328CREATE AGGREGATE MemGeomUnion (
4329        basetype = geometry,
4330        sfunc = geomunion,
4331        stype = geometry
4332        );
4333
4334-- Availability: 1.2.2
4335CREATE AGGREGATE ST_MemGeomUnion (
4336        basetype = geometry,
4337        sfunc = ST_union,
4338        stype = geometry
4339        );
4340
4341-- Deprecation in 1.2.3
4342CREATEFUNCTION unite_garray (geometry[])
4343        RETURNS geometry
4344        AS '@MODULE_FILENAME@'
4345        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4346
4347-- Availability: 1.2.2
4348CREATEFUNCTION ST_unite_garray (geometry[])
4349        RETURNS geometry
4350        AS '@MODULE_FILENAME@','unite_garray'
4351        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4352
4353-- Deprecation in 1.2.3
4354CREATE AGGREGATE GeomUnion (
4355        sfunc = geom_accum,
4356        basetype = geometry,
4357        stype = geometry[],
4358        finalfunc = ST_unite_garray
4359        );
4360
4361-- Availability: 1.2.2
4362CREATE AGGREGATE ST_Union (
4363        sfunc = ST_geom_accum,
4364        basetype = geometry,
4365        stype = geometry[],
4366        finalfunc = ST_unite_garray
4367        );
4368
4369-- Deprecation in 1.2.3
4370CREATEFUNCTION relate(geometry,geometry)
4371   RETURNS text
4372   AS '@MODULE_FILENAME@','relate_full'
4373   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4374
4375-- Availability: 1.2.2
4376CREATEFUNCTION ST_relate(geometry,geometry)
4377   RETURNS text
4378   AS '@MODULE_FILENAME@','relate_full'
4379   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4380
4381-- Deprecation in 1.2.3
4382CREATEFUNCTION relate(geometry,geometry,text)
4383   RETURNS boolean
4384   AS '@MODULE_FILENAME@','relate_pattern'
4385   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4386
4387-- PostGIS equivalent function: relate(geometry,geometry,text)
4388CREATEFUNCTION ST_Relate(geometry,geometry,text)
4389    RETURNS boolean
4390    AS '@MODULE_FILENAME@','relate_pattern'
4391    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4392
4393-- Deprecation in 1.2.3
4394CREATEFUNCTION disjoint(geometry,geometry)
4395   RETURNS boolean
4396   AS '@MODULE_FILENAME@'
4397   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4398   
4399-- PostGIS equivalent function: disjoint(geometry,geometry)
4400CREATEFUNCTION ST_Disjoint(geometry,geometry)
4401    RETURNS boolean
4402    AS '@MODULE_FILENAME@','disjoint'
4403    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4404
4405-- Deprecation in 1.2.3
4406CREATEFUNCTION touches(geometry,geometry)
4407   RETURNS boolean
4408   AS '@MODULE_FILENAME@'
4409   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4410
4411-- PostGIS equivalent function: touches(geometry,geometry)
4412CREATEFUNCTION _ST_Touches(geometry,geometry)
4413    RETURNS boolean
4414    AS '@MODULE_FILENAME@','touches'
4415    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4416
4417-- Availability: 1.2.2
4418-- Inlines index magic
4419CREATEFUNCTION ST_Touches(geometry,geometry)
4420    RETURNS boolean
4421    AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)'
4422    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4423
4424-- Availability: 1.2.2
4425CREATEFUNCTION ST_DWithin(geometry, geometry, float8)
4426    RETURNS boolean
4427    AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND ST_Distance($1, $2) < $3'
4428    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4429
4430-- Deprecation in 1.2.3
4431CREATEFUNCTION intersects(geometry,geometry)
4432   RETURNS boolean
4433   AS '@MODULE_FILENAME@'
4434   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4435
4436-- PostGIS equivalent function: intersects(geometry,geometry)
4437CREATEFUNCTION _ST_Intersects(geometry,geometry)
4438    RETURNS boolean
4439    AS '@MODULE_FILENAME@','intersects'
4440    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4441
4442-- Availability: 1.2.2
4443-- Inlines index magic
4444CREATEFUNCTION ST_Intersects(geometry,geometry)
4445    RETURNS boolean
4446    AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
4447    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4448-- Deprecation in 1.2.3
4449CREATEFUNCTION crosses(geometry,geometry)
4450   RETURNS boolean
4451   AS '@MODULE_FILENAME@'
4452   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4453
4454-- PostGIS equivalent function: crosses(geometry,geometry)
4455CREATEFUNCTION _ST_Crosses(geometry,geometry)
4456    RETURNS boolean
4457    AS '@MODULE_FILENAME@','crosses'
4458    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4459
4460-- Availability: 1.2.2
4461-- Inlines index magic
4462CREATEFUNCTION ST_Crosses(geometry,geometry)
4463    RETURNS boolean
4464    AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)'
4465    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4466
4467-- Deprecation in 1.2.3
4468CREATEFUNCTION within(geometry,geometry)
4469   RETURNS boolean
4470   AS '@MODULE_FILENAME@'
4471   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4472
4473-- PostGIS equivalent function: within(geometry,geometry)
4474CREATEFUNCTION _ST_Within(geometry,geometry)
4475    RETURNS boolean
4476    AS '@MODULE_FILENAME@','within'
4477    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4478
4479-- Availability: 1.2.2
4480-- Inlines index magic
4481CREATEFUNCTION ST_Within(geometry,geometry)
4482    RETURNS boolean
4483    AS 'SELECT $1 && $2 AND _ST_Within($1,$2)'
4484    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4485
4486-- Deprecation in 1.2.3
4487CREATEFUNCTION contains(geometry,geometry)
4488   RETURNS boolean
4489   AS '@MODULE_FILENAME@'
4490   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4491
4492-- PostGIS equivalent function: contains(geometry,geometry)
4493CREATEFUNCTION _ST_Contains(geometry,geometry)
4494    RETURNS boolean
4495    AS '@MODULE_FILENAME@','contains'
4496    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4497
4498-- Availability: 1.2.2
4499-- Inlines index magic
4500CREATEFUNCTION ST_Contains(geometry,geometry)
4501    RETURNS boolean
4502    AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)'
4503    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4504
4505-- Availability: 1.2.2
4506CREATEFUNCTION _ST_CoveredBy(geometry,geometry)
4507   RETURNS boolean
4508   AS '@MODULE_FILENAME@', 'coveredby'
4509   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4510
4511-- Availability: 1.2.2
4512CREATEFUNCTION ST_CoveredBy(geometry,geometry)
4513   RETURNS boolean
4514   AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)'
4515   LANGUAGE 'SQL' _IMMUTABLE; -- WITH(iscachable);
4516
4517-- Availability: 1.2.2
4518CREATEFUNCTION _ST_Covers(geometry,geometry)
4519   RETURNS boolean
4520   AS '@MODULE_FILENAME@', 'covers'
4521   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4522
4523-- Availability: 1.2.2
4524-- Inlines index magic
4525CREATEFUNCTION ST_Covers(geometry,geometry)
4526   RETURNS boolean
4527   AS 'SELECT $1 && $2 AND _ST_Covers($1,$2)'
4528   LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4529
4530-- Deprecation in 1.2.3
4531CREATEFUNCTION overlaps(geometry,geometry)
4532   RETURNS boolean
4533   AS '@MODULE_FILENAME@'
4534   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4535
4536-- PostGIS equivalent function: overlaps(geometry,geometry)
4537CREATEFUNCTION _ST_Overlaps(geometry,geometry)
4538    RETURNS boolean
4539    AS '@MODULE_FILENAME@','overlaps'
4540    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4541
4542-- Availability: 1.2.2
4543-- Inlines index magic
4544CREATEFUNCTION ST_Overlaps(geometry,geometry)
4545    RETURNS boolean
4546    AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)'
4547    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
4548
4549-- Deprecation in 1.2.3
4550CREATEFUNCTION IsValid(geometry)
4551   RETURNS boolean
4552   AS '@MODULE_FILENAME@', 'isvalid'
4553   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4554
4555-- PostGIS equivalent function: IsValid(geometry)
4556-- TODO: change null returns to true
4557CREATEFUNCTION ST_IsValid(geometry)
4558    RETURNS boolean
4559    AS '@MODULE_FILENAME@', 'isvalid'
4560    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4561
4562-- Deprecation in 1.2.3
4563CREATEFUNCTION GEOSnoop(geometry)
4564   RETURNS geometry
4565   AS '@MODULE_FILENAME@', 'GEOSnoop'
4566   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
4567
4568-- Deprecation in 1.2.3
4569CREATEFUNCTION JTSnoop(geometry)
4570   RETURNS geometry
4571   AS '@MODULE_FILENAME@', 'JTSnoop'
4572   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
4573
4574-- This is also available w/out GEOS
4575CREATEFUNCTION Centroid(geometry)
4576        RETURNS geometry
4577        AS '@MODULE_FILENAME@'
4578        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4579
4580-- PostGIS equivalent function: Centroid(geometry)
4581CREATEFUNCTION ST_Centroid(geometry)
4582        RETURNS geometry
4583        AS '@MODULE_FILENAME@', 'centroid'
4584        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4585
4586-- Deprecation in 1.2.3
4587CREATEFUNCTION IsRing(geometry)
4588        RETURNS boolean
4589        AS '@MODULE_FILENAME@'
4590        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4591
4592-- PostGIS equivalent function: IsRing(geometry)
4593CREATEFUNCTION ST_IsRing(geometry)
4594        RETURNS boolean
4595        AS '@MODULE_FILENAME@', 'isring'
4596        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4597
4598-- Deprecation in 1.2.3
4599CREATEFUNCTION PointOnSurface(geometry)
4600        RETURNS geometry
4601        AS '@MODULE_FILENAME@'
4602        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4603
4604-- PostGIS equivalent function: PointOnSurface(geometry)
4605CREATEFUNCTION ST_PointOnSurface(geometry)
4606        RETURNS geometry
4607        AS '@MODULE_FILENAME@', 'pointonsurface'
4608        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4609
4610-- Deprecation in 1.2.3
4611CREATEFUNCTION IsSimple(geometry)
4612        RETURNS boolean
4613        AS '@MODULE_FILENAME@', 'issimple'
4614        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4615
4616-- PostGIS equivalent function: IsSimple(geometry)     
4617CREATEFUNCTION ST_IsSimple(geometry)
4618        RETURNS boolean
4619        AS '@MODULE_FILENAME@', 'issimple'
4620        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4621
4622-- Deprecation in 1.2.3
4623CREATEFUNCTION Equals(geometry,geometry)
4624        RETURNS boolean
4625        AS '@MODULE_FILENAME@','geomequals'
4626        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4627
4628-- PostGIS equivalent function: Equals(geometry,geometry)
4629CREATEFUNCTION ST_Equals(geometry,geometry)
4630    RETURNS boolean
4631    AS '@MODULE_FILENAME@','geomequals'
4632    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4633
4634-----------------------------------------------------------------------
4635-- SVG OUTPUT
4636-----------------------------------------------------------------------
4637-- Deprecation in 1.2.3
4638CREATEFUNCTION AsSVG(geometry,int4,int4)
4639        RETURNS TEXT
4640        AS '@MODULE_FILENAME@','assvg_geometry'
4641        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4642
4643-- Availability: 1.2.2
4644CREATEFUNCTION ST_AsSVG(geometry,int4,int4)
4645        RETURNS TEXT
4646        AS '@MODULE_FILENAME@','assvg_geometry'
4647        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4648
4649-- Deprecation in 1.2.3
4650CREATEFUNCTION AsSVG(geometry,int4)
4651        RETURNS TEXT
4652        AS '@MODULE_FILENAME@','assvg_geometry'
4653        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4654
4655-- Availability: 1.2.2
4656CREATEFUNCTION ST_AsSVG(geometry,int4)
4657        RETURNS TEXT
4658        AS '@MODULE_FILENAME@','assvg_geometry'
4659        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4660
4661-- Deprecation in 1.2.3
4662CREATEFUNCTION AsSVG(geometry)
4663        RETURNS TEXT
4664        AS '@MODULE_FILENAME@','assvg_geometry'
4665        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4666
4667-- Availability: 1.2.2
4668CREATEFUNCTION ST_AsSVG(geometry)
4669        RETURNS TEXT
4670        AS '@MODULE_FILENAME@','assvg_geometry'
4671        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4672
4673-----------------------------------------------------------------------
4674-- GML OUTPUT
4675-----------------------------------------------------------------------
4676-- AsGML(geom, precision, version)
4677-- Deprecation in 1.2.3
4678CREATEFUNCTION AsGML(geometry, int4, int4)
4679        RETURNS TEXT
4680        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4681        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4682
4683-- Availability: 1.2.2
4684CREATEFUNCTION ST_AsGML(geometry, int4, int4)
4685        RETURNS TEXT
4686        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4687        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4688
4689-- AsGML(geom, precision) / version=2
4690-- Deprecation in 1.2.3
4691CREATEFUNCTION AsGML(geometry, int4)
4692        RETURNS TEXT
4693        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4694        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4695
4696-- Availability: 1.2.2
4697CREATEFUNCTION ST_AsGML(geometry, int4)
4698        RETURNS TEXT
4699        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4700        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4701
4702-- AsGML(geom) / precision=15 version=2
4703-- Deprecation in 1.2.3
4704CREATEFUNCTION AsGML(geometry)
4705        RETURNS TEXT
4706        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4707        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4708
4709-- Availabiltiy: 1.2.2
4710CREATEFUNCTION ST_AsGML(geometry)
4711        RETURNS TEXT
4712        AS '@MODULE_FILENAME@','LWGEOM_asGML'
4713        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4714
4715-----------------------------------------------------------------------
4716-- KML OUTPUT
4717-----------------------------------------------------------------------
4718-- AsUKML(geom, precision, version)
4719-- Deprecation in 1.2.3
4720CREATEFUNCTION AsUKML(geometry, int4, int4)
4721        RETURNS TEXT
4722        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4723        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4724
4725-- Availability: 1.2.2
4726CREATEFUNCTION ST_AsUKML(geometry, int4, int4)
4727        RETURNS TEXT
4728        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4729        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4730
4731-- AsUKML(geom, precision) / version=2
4732-- Deprecation in 1.2.3
4733CREATEFUNCTION AsUKML(geometry, int4)
4734        RETURNS TEXT
4735        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4736        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4737
4738-- Availability: 1.2.2
4739CREATEFUNCTION ST_AsUKML(geometry, int4)
4740        RETURNS TEXT
4741        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4742        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4743
4744-- AsUKML(geom) / precision=15 version=2
4745-- Deprecation in 1.2.3
4746CREATEFUNCTION AsUKML(geometry)
4747        RETURNS TEXT
4748        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4749        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4750
4751-- Availability: 1.2.2
4752CREATEFUNCTION ST_AsUKML(geometry)
4753        RETURNS TEXT
4754        AS '@MODULE_FILENAME@','LWGEOM_asKML'
4755        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4756
4757-- AsKML(geom, precision, version)
4758-- Deprecation in 1.2.3
4759CREATE OR REPLACE FUNCTION AsKML(geometry, int4, int4)
4760        RETURNS TEXT
4761        AS 'SELECT AsUKML(transform($1,4326),$2,$3)'
4762        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4763
4764-- Availability: 1.2.2
4765CREATE OR REPLACE FUNCTION ST_AsKML(geometry, int4, int4)
4766        RETURNS TEXT
4767        AS 'SELECT AsUKML(transform($1,4326),$2,$3)'
4768        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4769
4770-- AsKML(geom, precision) / version=2
4771-- Deprecation in 1.2.3
4772CREATE OR REPLACE FUNCTION AsKML(geometry, int4)
4773        RETURNS TEXT
4774        AS 'SELECT AsUKML(transform($1,4326),$2)'
4775        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4776
4777-- Availability: 1.2.2
4778CREATE OR REPLACE FUNCTION ST_AsKML(geometry, int4)
4779        RETURNS TEXT
4780        AS 'SELECT AsUKML(transform($1,4326),$2)'
4781        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4782
4783-- AsKML(geom) / precision=15 version=2
4784-- Deprecation in 1.2.3
4785CREATE OR REPLACE FUNCTION AsKML(geometry)
4786        RETURNS TEXT
4787        AS 'SELECT AsUKML(transform($1,4326))'
4788        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4789
4790-- Availability: 1.2.2
4791CREATE OR REPLACE FUNCTION ST_AsKML(geometry)
4792        RETURNS TEXT
4793        AS 'SELECT AsUKML(transform($1,4326))'
4794        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4795
4796------------------------------------------------------------------------
4797-- OGC defined
4798------------------------------------------------------------------------
4799
4800-- Deprecation in 1.2.3
4801CREATEFUNCTION NumPoints(geometry)
4802        RETURNS int4
4803        AS '@MODULE_FILENAME@', 'LWGEOM_numpoints_linestring'
4804        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4805
4806-- PostGIS equivalent function: NumPoints(geometry)
4807CREATEFUNCTION ST_NumPoints(geometry)
4808        RETURNS int4
4809        AS '@MODULE_FILENAME@', 'LWGEOM_numpoints_linestring'
4810        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4811
4812-- Deprecation in 1.2.3
4813CREATEFUNCTION NumGeometries(geometry)
4814        RETURNS int4
4815        AS '@MODULE_FILENAME@', 'LWGEOM_numgeometries_collection'
4816        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4817
4818-- PostGIS equivalent function: NumGeometries(geometry)
4819CREATEFUNCTION ST_NumGeometries(geometry)
4820        RETURNS int4
4821        AS '@MODULE_FILENAME@', 'LWGEOM_numgeometries_collection'
4822        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4823
4824-- Deprecation in 1.2.3
4825CREATEFUNCTION GeometryN(geometry,integer)
4826        RETURNS geometry
4827        AS '@MODULE_FILENAME@', 'LWGEOM_geometryn_collection'
4828        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4829
4830-- PostGIS equivalent function: GeometryN(geometry)
4831CREATEFUNCTION ST_GeometryN(geometry,integer)
4832        RETURNS geometry
4833        AS '@MODULE_FILENAME@', 'LWGEOM_geometryn_collection'
4834        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4835
4836-- Deprecation in 1.2.3
4837CREATEFUNCTION Dimension(geometry)
4838        RETURNS int4
4839        AS '@MODULE_FILENAME@', 'LWGEOM_dimension'
4840        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4841
4842-- PostGIS equivalent function: Dimension(geometry)
4843CREATEFUNCTION ST_Dimension(geometry)
4844    RETURNS int4
4845    AS '@MODULE_FILENAME@', 'LWGEOM_dimension'
4846    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4847
4848-- Deprecation in 1.2.3
4849CREATEFUNCTION ExteriorRing(geometry)
4850        RETURNS geometry
4851        AS '@MODULE_FILENAME@','LWGEOM_exteriorring_polygon'
4852        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4853
4854-- PostGIS equivalent function: ExteriorRing(geometry)
4855CREATEFUNCTION ST_ExteriorRing(geometry)
4856        RETURNS geometry
4857        AS '@MODULE_FILENAME@','LWGEOM_exteriorring_polygon'
4858        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4859
4860-- Deprecation in 1.2.3
4861CREATEFUNCTION NumInteriorRings(geometry)
4862        RETURNS integer
4863        AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
4864        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4865
4866-- PostGIS equivalent function: NumInteriorRings(geometry)
4867CREATEFUNCTION ST_NumInteriorRings(geometry)
4868        RETURNS integer
4869        AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
4870        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4871
4872-- Deprecation in 1.2.3
4873CREATEFUNCTION NumInteriorRing(geometry)
4874        RETURNS integer
4875        AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
4876        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4877
4878-- Availability: 1.2.2
4879CREATEFUNCTION ST_NumInteriorRing(geometry)
4880        RETURNS integer
4881        AS '@MODULE_FILENAME@','LWGEOM_numinteriorrings_polygon'
4882        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4883
4884-- Deprecation in 1.2.3
4885CREATEFUNCTION InteriorRingN(geometry,integer)
4886        RETURNS geometry
4887        AS '@MODULE_FILENAME@','LWGEOM_interiorringn_polygon'
4888        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4889
4890-- PostGIS equivalent function: InteriorRingN(geometry)
4891CREATEFUNCTION ST_InteriorRingN(geometry,integer)
4892        RETURNS geometry
4893        AS '@MODULE_FILENAME@','LWGEOM_interiorringn_polygon'
4894        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4895
4896-- Deprecation in 1.2.3
4897CREATEFUNCTION GeometryType(geometry)
4898        RETURNS text
4899        AS '@MODULE_FILENAME@', 'LWGEOM_getTYPE'
4900        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4901
4902-- Not quite equivalent to GeometryType
4903CREATEFUNCTION ST_GeometryType(geometry)
4904    RETURNS text
4905    AS '
4906    DECLARE
4907        gtype text := geometrytype($1);
4908    BEGIN
4909        IF (gtype IN (''POINT'', ''POINTM'')) THEN
4910            gtype := ''Point'';
4911        ELSIF (gtype IN (''LINESTRING'', ''LINESTRINGM'')) THEN
4912            gtype := ''LineString'';
4913        ELSIF (gtype IN (''POLYGON'', ''POLYGONM'')) THEN
4914            gtype := ''Polygon'';
4915        ELSIF (gtype IN (''MULTIPOINT'', ''MULTIPOINTM'')) THEN
4916            gtype := ''MultiPoint'';
4917        ELSIF (gtype IN (''MULTILINESTRING'', ''MULTILINESTRINGM'')) THEN
4918            gtype := ''MultiLineString'';
4919        ELSIF (gtype IN (''MULTIPOLYGON'', ''MULTIPOLYGONM'')) THEN
4920            gtype := ''MultiPolygon'';
4921        ELSE
4922            gtype := ''Geometry'';
4923        END IF;
4924        RETURN ''ST_'' || gtype;
4925    END
4926        '
4927        LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
4928
4929-- Deprecation in 1.2.3
4930CREATEFUNCTION PointN(geometry,integer)
4931        RETURNS geometry
4932        AS '@MODULE_FILENAME@','LWGEOM_pointn_linestring'
4933        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4934
4935-- PostGIS equivalent function: PointN(geometry,integer)
4936CREATEFUNCTION ST_PointN(geometry,integer)
4937        RETURNS geometry
4938        AS '@MODULE_FILENAME@','LWGEOM_pointn_linestring'
4939        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4940
4941-- Deprecation in 1.2.3
4942CREATEFUNCTION X(geometry)
4943        RETURNS float8
4944        AS '@MODULE_FILENAME@','LWGEOM_x_point'
4945        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4946
4947-- PostGIS equivalent function: X(geometry)
4948CREATEFUNCTION ST_X(geometry)
4949        RETURNS float8
4950        AS '@MODULE_FILENAME@','LWGEOM_x_point'
4951        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4952
4953-- Deprecation in 1.2.3
4954CREATEFUNCTION Y(geometry)
4955        RETURNS float8
4956        AS '@MODULE_FILENAME@','LWGEOM_y_point'
4957        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4958       
4959-- PostGIS equivalent function: Y(geometry)
4960CREATEFUNCTION ST_Y(geometry)
4961        RETURNS float8
4962        AS '@MODULE_FILENAME@','LWGEOM_y_point'
4963        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4964
4965-- Deprecation in 1.2.3
4966CREATEFUNCTION Z(geometry)
4967        RETURNS float8
4968        AS '@MODULE_FILENAME@','LWGEOM_z_point'
4969        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4970
4971-- PostGIS equivalent function: Z(geometry)
4972CREATEFUNCTION SE_Z(geometry)
4973        RETURNS float8
4974        AS '@MODULE_FILENAME@','LWGEOM_z_point'
4975        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4976
4977-- Availability: 1.2.2
4978CREATEFUNCTION ST_Z(geometry)
4979        RETURNS float8
4980        AS '@MODULE_FILENAME@','LWGEOM_z_point'
4981        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4982
4983-- Deprecation in 1.2.3
4984CREATEFUNCTION M(geometry)
4985        RETURNS float8
4986        AS '@MODULE_FILENAME@','LWGEOM_m_point'
4987        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4988
4989-- Availability: 1.2.2
4990CREATEFUNCTION ST_M(geometry)
4991        RETURNS float8
4992        AS '@MODULE_FILENAME@','LWGEOM_m_point'
4993        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
4994
4995-- Deprecation in 1.2.3
4996CREATEFUNCTION StartPoint(geometry)
4997        RETURNS geometry
4998        AS '@MODULE_FILENAME@', 'LWGEOM_startpoint_linestring'
4999        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5000
5001-- PostGIS equivalent function: StartPoint(geometry))
5002CREATEFUNCTION ST_StartPoint(geometry)
5003        RETURNS geometry
5004        AS '@MODULE_FILENAME@', 'LWGEOM_startpoint_linestring'
5005        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5006
5007-- Deprecation in 1.2.3
5008CREATEFUNCTION EndPoint(geometry)
5009        RETURNS geometry
5010        AS '@MODULE_FILENAME@', 'LWGEOM_endpoint_linestring'
5011        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5012
5013-- PostGIS equivalent function: EndPoint(geometry))
5014CREATEFUNCTION ST_EndPoint(geometry)
5015        RETURNS geometry
5016        AS '@MODULE_FILENAME@', 'LWGEOM_endpoint_linestring'
5017        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5018
5019-- Deprecation in 1.2.3
5020CREATEFUNCTION IsClosed(geometry)
5021        RETURNS boolean
5022        AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring'
5023        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5024
5025-- PostGIS equivalent function: IsClosed(geometry)
5026CREATEFUNCTION ST_IsClosed(geometry)
5027        RETURNS boolean
5028        AS '@MODULE_FILENAME@', 'LWGEOM_isclosed_linestring'
5029        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5030
5031-- Deprecation in 1.2.3
5032CREATEFUNCTION IsEmpty(geometry)
5033        RETURNS boolean
5034        AS '@MODULE_FILENAME@', 'LWGEOM_isempty'
5035        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5036
5037-- PostGIS equivalent function: IsEmpty(geometry)
5038CREATEFUNCTION ST_IsEmpty(geometry)
5039    RETURNS boolean
5040    AS '@MODULE_FILENAME@', 'LWGEOM_isempty'
5041    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
5042
5043-- Deprecation in 1.2.3
5044CREATEFUNCTION SRID(geometry)
5045        RETURNS int4
5046        AS '@MODULE_FILENAME@','LWGEOM_getSRID'
5047        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5048
5049-- PostGIS equivalent function: getSRID(geometry)
5050CREATEFUNCTION ST_SRID(geometry)
5051    RETURNS int4
5052    AS '@MODULE_FILENAME@','LWGEOM_getSRID'
5053    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5054
5055-- Deprecation in 1.2.3
5056CREATEFUNCTION SetSRID(geometry,int4)
5057        RETURNS geometry
5058        AS '@MODULE_FILENAME@','LWGEOM_setSRID'
5059        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
5060
5061-- Availability: 1.2.2
5062CREATEFUNCTION ST_SetSRID(geometry,int4)
5063        RETURNS geometry
5064        AS '@MODULE_FILENAME@','LWGEOM_setSRID'
5065        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
5066       
5067-- Deprecation in 1.2.3
5068CREATEFUNCTION AsBinary(geometry)
5069        RETURNS bytea
5070        AS '@MODULE_FILENAME@','LWGEOM_asBinary'
5071        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5072
5073-- PostGIS equivalent function: AsBinary(geometry)
5074CREATEFUNCTION ST_AsBinary(geometry)
5075    RETURNS bytea
5076    AS '@MODULE_FILENAME@','LWGEOM_asBinary'
5077    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5078
5079-- Deprecation in 1.2.3
5080CREATEFUNCTION AsBinary(geometry,text)
5081        RETURNS bytea
5082        AS '@MODULE_FILENAME@','LWGEOM_asBinary'
5083        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5084
5085-- Availability: 1.2.2
5086CREATEFUNCTION ST_AsBinary(geometry,text)
5087        RETURNS bytea
5088        AS '@MODULE_FILENAME@','LWGEOM_asBinary'
5089        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5090
5091-- Deprecation in 1.2.3
5092CREATEFUNCTION AsText(geometry)
5093        RETURNS TEXT
5094        AS '@MODULE_FILENAME@','LWGEOM_asText'
5095        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5096
5097-- PostGIS equivalent function: AsText(geometry)
5098CREATEFUNCTION ST_AsText(geometry)
5099    RETURNS TEXT
5100    AS '@MODULE_FILENAME@','LWGEOM_asText'
5101    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5102
5103-- Deprecation in 1.2.3
5104CREATEFUNCTION GeometryFromText(text)
5105        RETURNS geometry
5106        AS '@MODULE_FILENAME@','LWGEOM_from_text'
5107        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5108
5109-- Availability: 1.2.2
5110CREATEFUNCTION ST_GeometryFromText(text)
5111        RETURNS geometry
5112        AS '@MODULE_FILENAME@','LWGEOM_from_text'
5113        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5114
5115-- Deprecation in 1.2.3
5116CREATEFUNCTION GeometryFromText(text, int4)
5117        RETURNS geometry
5118        AS '@MODULE_FILENAME@','LWGEOM_from_text'
5119        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5120
5121-- Availability: 1.2.2
5122CREATEFUNCTION ST_GeometryFromText(text, int4)
5123        RETURNS geometry
5124        AS '@MODULE_FILENAME@','LWGEOM_from_text'
5125        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5126
5127-- Deprecation in 1.2.3
5128CREATEFUNCTION GeomFromText(text)
5129        RETURNS geometry AS 'SELECT geometryfromtext($1)'
5130        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5131
5132-- Availability: 1.2.2
5133CREATEFUNCTION ST_GeomFromText(text)
5134        RETURNS geometry AS 'SELECT geometryfromtext($1)'
5135        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5136
5137-- Deprecation in 1.2.3
5138CREATEFUNCTION GeomFromText(text, int4)
5139        RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
5140        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5141
5142-- PostGIS equivalent function: GeometryFromText(text, int4)
5143CREATEFUNCTION ST_GeomFromText(text, int4)
5144        RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
5145        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5146
5147-- Deprecation in 1.2.3
5148CREATEFUNCTION PointFromText(text)
5149        RETURNS geometry
5150        AS '
5151        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
5152        THEN GeomFromText($1)
5153        ELSE NULL END
5154        '
5155        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5156
5157-- Availability: 1.2.2
5158CREATEFUNCTION ST_PointFromText(text)
5159        RETURNS geometry
5160        AS '
5161        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
5162        THEN GeomFromText($1)
5163        ELSE NULL END
5164        '
5165        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5166
5167-- Deprecation in 1.2.3
5168CREATEFUNCTION PointFromText(text, int4)
5169        RETURNS geometry
5170        AS '
5171        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
5172        THEN GeomFromText($1,$2)
5173        ELSE NULL END
5174        '
5175        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5176
5177-- PostGIS equivalent function: PointFromText(text, int4)
5178-- TODO: improve this ... by not duplicating constructor time.
5179CREATEFUNCTION ST_PointFromText(text, int4)
5180        RETURNS geometry
5181        AS '
5182        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
5183        THEN GeomFromText($1, $2)
5184        ELSE NULL END
5185        '
5186        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5187
5188-- Deprecation in 1.2.3
5189CREATEFUNCTION LineFromText(text)
5190        RETURNS geometry
5191        AS '
5192        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
5193        THEN GeomFromText($1)
5194        ELSE NULL END
5195        '
5196        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5197
5198-- Availability: 1.2.2
5199CREATEFUNCTION ST_LineFromText(text)
5200        RETURNS geometry
5201        AS '
5202        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
5203        THEN GeomFromText($1)
5204        ELSE NULL END
5205        '
5206        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5207
5208-- Deprecation in 1.2.3
5209CREATEFUNCTION LineFromText(text, int4)
5210        RETURNS geometry
5211        AS '
5212        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
5213        THEN GeomFromText($1,$2)
5214        ELSE NULL END
5215        '
5216        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5217
5218-- PostGIS equivalent function: LineFromText(text, int4)
5219CREATEFUNCTION ST_LineFromText(text, int4)
5220        RETURNS geometry
5221        AS '
5222        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
5223        THEN GeomFromText($1,$2)
5224        ELSE NULL END
5225        '
5226        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5227
5228-- Deprecation in 1.2.3
5229CREATEFUNCTION LineStringFromText(text)
5230        RETURNS geometry
5231        AS 'SELECT LineFromText($1)'
5232        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5233
5234-- Deprecation in 1.2.3
5235CREATEFUNCTION LineStringFromText(text, int4)
5236        RETURNS geometry
5237        AS 'SELECT LineFromText($1, $2)'
5238        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5239
5240-- Deprecation in 1.2.3
5241CREATEFUNCTION PolyFromText(text)
5242        RETURNS geometry
5243        AS '
5244        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
5245        THEN GeomFromText($1)
5246        ELSE NULL END
5247        '
5248        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5249
5250-- Availability: 1.2.2
5251CREATEFUNCTION ST_PolyFromText(text)
5252        RETURNS geometry
5253        AS '
5254        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
5255        THEN GeomFromText($1)
5256        ELSE NULL END
5257        '
5258        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5259
5260-- Deprecation in 1.2.3
5261CREATEFUNCTION PolyFromText(text, int4)
5262        RETURNS geometry
5263        AS '
5264        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
5265        THEN GeomFromText($1,$2)
5266        ELSE NULL END
5267        '
5268        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5269       
5270-- PostGIS equivalent function: PolyFromText(text, int4)
5271CREATEFUNCTION ST_PolyFromText(text, int4)
5272        RETURNS geometry
5273        AS '
5274        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
5275        THEN GeomFromText($1, $2)
5276        ELSE NULL END
5277        '
5278        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5279
5280-- Deprecation in 1.2.3
5281CREATEFUNCTION PolygonFromText(text, int4)
5282        RETURNS geometry
5283        AS 'SELECT PolyFromText($1, $2)'
5284        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5285
5286-- Availability: 1.2.2
5287CREATEFUNCTION ST_PolygonFromText(text, int4)
5288        RETURNS geometry
5289        AS 'SELECT PolyFromText($1, $2)'
5290        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5291
5292-- Deprecation in 1.2.3
5293CREATEFUNCTION PolygonFromText(text)
5294        RETURNS geometry
5295        AS 'SELECT PolyFromText($1)'
5296        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5297
5298-- Availability: 1.2.2
5299CREATEFUNCTION ST_PolygonFromText(text)
5300        RETURNS geometry
5301        AS 'SELECT PolyFromText($1)'
5302        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5303
5304-- Deprecation in 1.2.3
5305CREATEFUNCTION MLineFromText(text, int4)
5306        RETURNS geometry
5307        AS '
5308        SELECT CASE
5309        WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
5310        THEN GeomFromText($1,$2)
5311        ELSE NULL END
5312        '
5313        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5314
5315-- PostGIS equivalent function: MLineFromText(text, int4)
5316CREATEFUNCTION ST_MLineFromText(text, int4)
5317        RETURNS geometry
5318        AS '
5319        SELECT CASE
5320        WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
5321        THEN GeomFromText($1,$2)
5322        ELSE NULL END
5323        '
5324        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5325
5326-- Deprecation in 1.2.3
5327CREATEFUNCTION MLineFromText(text)
5328        RETURNS geometry
5329        AS '
5330        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
5331        THEN GeomFromText($1)
5332        ELSE NULL END
5333        '
5334        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5335
5336-- Availability: 1.2.2
5337CREATEFUNCTION ST_MLineFromText(text)
5338        RETURNS geometry
5339        AS '
5340        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
5341        THEN GeomFromText($1)
5342        ELSE NULL END
5343        '
5344        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5345
5346-- Deprecation in 1.2.3
5347CREATEFUNCTION MultiLineStringFromText(text)
5348        RETURNS geometry
5349        AS 'SELECT MLineFromText($1)'
5350        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5351
5352-- Availability: 1.2.2
5353CREATEFUNCTION ST_MultiLineStringFromText(text)
5354        RETURNS geometry
5355        AS 'SELECT MLineFromText($1)'
5356        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5357
5358-- Deprecation in 1.2.3
5359CREATEFUNCTION MultiLineStringFromText(text, int4)
5360        RETURNS geometry
5361        AS 'SELECT MLineFromText($1, $2)'
5362        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5363
5364-- Availability: 1.2.2
5365CREATEFUNCTION ST_MultiLineStringFromText(text, int4)
5366        RETURNS geometry
5367        AS 'SELECT MLineFromText($1, $2)'
5368        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5369
5370-- Deprecation in 1.2.3
5371CREATEFUNCTION MPointFromText(text, int4)
5372        RETURNS geometry
5373        AS '
5374        SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT''
5375        THEN GeomFromText($1,$2)
5376        ELSE NULL END
5377        '
5378        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5379
5380-- PostGIS equivalent function: MPointFromText(text, int4)
5381CREATEFUNCTION ST_MPointFromText(text, int4)
5382        RETURNS geometry
5383        AS '
5384        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOINT''
5385        THEN GeomFromText($1, $2)
5386        ELSE NULL END
5387        '
5388        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5389
5390-- Deprecation in 1.2.3
5391CREATEFUNCTION MPointFromText(text)
5392        RETURNS geometry
5393        AS '
5394        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
5395        THEN GeomFromText($1)
5396        ELSE NULL END
5397        '
5398        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5399
5400-- Availability: 1.2.2
5401CREATEFUNCTION ST_MPointFromText(text)
5402        RETURNS geometry
5403        AS '
5404        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
5405        THEN GeomFromText($1)
5406        ELSE NULL END
5407        '
5408        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5409
5410-- Deprecation in 1.2.3
5411CREATEFUNCTION MultiPointFromText(text, int4)
5412        RETURNS geometry
5413        AS 'SELECT MPointFromText($1, $2)'
5414        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5415
5416-- Deprecation in 1.2.3
5417CREATEFUNCTION MultiPointFromText(text)
5418        RETURNS geometry
5419        AS 'SELECT MPointFromText($1)'
5420        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5421
5422-- Availability: 1.2.2
5423CREATEFUNCTION ST_MultiPointFromText(text)
5424        RETURNS geometry
5425        AS 'SELECT MPointFromText($1)'
5426        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5427
5428-- Deprecation in 1.2.3
5429CREATEFUNCTION MultiPointFromText(text)
5430        RETURNS geometry
5431        AS 'SELECT MPointFromText($1)'
5432        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5433
5434-- Availability: 1.2.2
5435CREATEFUNCTION ST_MultiPointFromText(text)
5436        RETURNS geometry
5437        AS 'SELECT MPointFromText($1)'
5438        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5439
5440-- Deprecation in 1.2.3
5441CREATEFUNCTION MPolyFromText(text, int4)
5442        RETURNS geometry
5443        AS '
5444        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
5445        THEN GeomFromText($1,$2)
5446        ELSE NULL END
5447        '
5448        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5449
5450-- PostGIS equivalent function: MPolyFromText(text, int4)
5451CREATEFUNCTION ST_MPolyFromText(text, int4)
5452        RETURNS geometry
5453        AS '
5454        SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
5455        THEN GeomFromText($1,$2)
5456        ELSE NULL END
5457        '
5458        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5459
5460-- Deprecation in 1.2.3
5461CREATEFUNCTION MPolyFromText(text)
5462        RETURNS geometry
5463        AS '
5464        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
5465        THEN GeomFromText($1)
5466        ELSE NULL END
5467        '
5468        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5469
5470--Availability: 1.2.2
5471CREATEFUNCTION ST_MPolyFromText(text)
5472        RETURNS geometry
5473        AS '
5474        SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
5475        THEN GeomFromText($1)
5476        ELSE NULL END
5477        '
5478        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5479
5480-- Deprecation in 1.2.3
5481CREATEFUNCTION MultiPolygonFromText(text, int4)
5482        RETURNS geometry
5483        AS 'SELECT MPolyFromText($1, $2)'
5484        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5485
5486-- Availability: 1.2.2
5487CREATEFUNCTION ST_MultiPolygonFromText(text, int4)
5488        RETURNS geometry
5489        AS 'SELECT MPolyFromText($1, $2)'
5490        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5491
5492-- Deprecation in 1.2.3
5493CREATEFUNCTION MultiPolygonFromText(text)
5494        RETURNS geometry
5495        AS 'SELECT MPolyFromText($1)'
5496        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5497
5498-- Availability: 1.2.2
5499CREATEFUNCTION ST_MultiPolygonFromText(text)
5500        RETURNS geometry
5501        AS 'SELECT MPolyFromText($1)'
5502        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5503
5504-- Deprecation in 1.2.3
5505CREATEFUNCTION GeomCollFromText(text, int4)
5506        RETURNS geometry
5507        AS '
5508        SELECT CASE
5509        WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
5510        THEN GeomFromText($1,$2)
5511        ELSE NULL END
5512        '
5513        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5514
5515-- Availability: 1.2.2
5516CREATEFUNCTION ST_GeomCollFromText(text, int4)
5517        RETURNS geometry
5518        AS '
5519        SELECT CASE
5520        WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
5521        THEN GeomFromText($1,$2)
5522        ELSE NULL END
5523        '
5524        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5525
5526-- Deprecation in 1.2.3
5527CREATEFUNCTION GeomCollFromText(text)
5528        RETURNS geometry
5529        AS '
5530        SELECT CASE
5531        WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
5532        THEN GeomFromText($1)
5533        ELSE NULL END
5534        '
5535        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5536
5537-- Availability: 1.2.2
5538CREATEFUNCTION ST_GeomCollFromText(text)
5539        RETURNS geometry
5540        AS '
5541        SELECT CASE
5542        WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
5543        THEN GeomFromText($1)
5544        ELSE NULL END
5545        '
5546        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5547
5548-- Deprecation in 1.2.3
5549CREATEFUNCTION GeomFromWKB(bytea)
5550        RETURNS geometry
5551        AS '@MODULE_FILENAME@','LWGEOM_from_WKB'
5552        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5553
5554-- Availability: 1.2.2
5555CREATEFUNCTION ST_GeomFromWKB(bytea)
5556        RETURNS geometry
5557        AS '@MODULE_FILENAME@','LWGEOM_from_WKB'
5558        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5559
5560-- Deprecation in 1.2.3
5561CREATEFUNCTION GeomFromWKB(bytea, int)
5562        RETURNS geometry
5563        AS 'SELECT setSRID(GeomFromWKB($1), $2)'
5564        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5565
5566-- PostGIS equivalent function: GeomFromWKB(bytea, int)
5567CREATEFUNCTION ST_GeomFromWKB(bytea, int)
5568        RETURNS geometry
5569        AS 'SELECT setSRID(GeomFromWKB($1), $2)'
5570        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5571
5572-- Deprecation in 1.2.3
5573CREATEFUNCTION PointFromWKB(bytea, int)
5574        RETURNS geometry
5575        AS '
5576        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
5577        THEN GeomFromWKB($1, $2)
5578        ELSE NULL END
5579        '
5580        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5581
5582-- PostGIS equivalent function: PointFromWKB(bytea, int)
5583CREATEFUNCTION ST_PointFromWKB(bytea, int)
5584        RETURNS geometry
5585        AS '
5586        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
5587        THEN GeomFromWKB($1, $2)
5588        ELSE NULL END
5589        '
5590        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5591
5592-- Deprecation in 1.2.3
5593CREATEFUNCTION PointFromWKB(bytea)
5594        RETURNS geometry
5595        AS '
5596        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
5597        THEN GeomFromWKB($1)
5598        ELSE NULL END
5599        '
5600        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5601
5602-- Availability: 1.2.2
5603CREATEFUNCTION ST_PointFromWKB(bytea)
5604        RETURNS geometry
5605        AS '
5606        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
5607        THEN GeomFromWKB($1)
5608        ELSE NULL END
5609        '
5610        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5611
5612-- Deprecation in 1.2.3
5613CREATEFUNCTION LineFromWKB(bytea, int)
5614        RETURNS geometry
5615        AS '
5616        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
5617        THEN GeomFromWKB($1, $2)
5618        ELSE NULL END
5619        '
5620        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5621
5622-- PostGIS equivalent function: LineFromWKB(text, int)
5623CREATEFUNCTION ST_LineFromWKB(bytea, int)
5624        RETURNS geometry
5625        AS '
5626        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
5627        THEN GeomFromWKB($1, $2)
5628        ELSE NULL END
5629        '
5630        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5631
5632-- Deprecation in 1.2.3
5633CREATEFUNCTION LineFromWKB(bytea)
5634        RETURNS geometry
5635        AS '
5636        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
5637        THEN GeomFromWKB($1)
5638        ELSE NULL END
5639        '
5640        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5641
5642-- Availability: 1.2.2
5643CREATEFUNCTION ST_LineFromWKB(bytea)
5644        RETURNS geometry
5645        AS '
5646        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
5647        THEN GeomFromWKB($1)
5648        ELSE NULL END
5649        '
5650        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5651
5652-- Deprecation in 1.2.3
5653CREATEFUNCTION LinestringFromWKB(bytea, int)
5654        RETURNS geometry
5655        AS '
5656        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
5657        THEN GeomFromWKB($1, $2)
5658        ELSE NULL END
5659        '
5660        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5661
5662-- Availability: 1.2.2
5663CREATEFUNCTION ST_LinestringFromWKB(bytea, int)
5664        RETURNS geometry
5665        AS '
5666        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
5667        THEN GeomFromWKB($1, $2)
5668        ELSE NULL END
5669        '
5670        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5671
5672-- Deprecation in 1.2.3
5673CREATEFUNCTION LinestringFromWKB(bytea)
5674        RETURNS geometry
5675        AS '
5676        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
5677        THEN GeomFromWKB($1)
5678        ELSE NULL END
5679        '
5680        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5681
5682-- Availability: 1.2.2
5683CREATEFUNCTION ST_LinestringFromWKB(bytea)
5684        RETURNS geometry
5685        AS '
5686        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
5687        THEN GeomFromWKB($1)
5688        ELSE NULL END
5689        '
5690        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5691
5692-- Deprecation in 1.2.3
5693CREATEFUNCTION PolyFromWKB(bytea, int)
5694        RETURNS geometry
5695        AS '
5696        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
5697        THEN GeomFromWKB($1, $2)
5698        ELSE NULL END
5699        '
5700        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5701
5702-- PostGIS equivalent function: PolyFromWKB(text, int)
5703CREATEFUNCTION ST_PolyFromWKB(bytea, int)
5704        RETURNS geometry
5705        AS '
5706        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
5707        THEN GeomFromWKB($1, $2)
5708        ELSE NULL END
5709        '
5710        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5711
5712-- Deprecation in 1.2.3
5713CREATEFUNCTION PolyFromWKB(bytea)
5714        RETURNS geometry
5715        AS '
5716        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
5717        THEN GeomFromWKB($1)
5718        ELSE NULL END
5719        '
5720        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5721
5722-- Availability: 1.2.2
5723CREATEFUNCTION ST_PolyFromWKB(bytea)
5724        RETURNS geometry
5725        AS '
5726        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
5727        THEN GeomFromWKB($1)
5728        ELSE NULL END
5729        '
5730        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5731
5732-- Deprecation in 1.2.3
5733CREATEFUNCTION PolygonFromWKB(bytea, int)
5734        RETURNS geometry
5735        AS '
5736        SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
5737        THEN GeomFromWKB($1, $2)
5738        ELSE NULL END
5739        '
5740        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5741
5742-- Availability: 1.2.2
5743CREATEFUNCTION ST_PolygonFromWKB(bytea, int)
5744        RETURNS geometry
5745        AS '
5746        SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
5747        THEN GeomFromWKB($1, $2)
5748        ELSE NULL END
5749        '
5750        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5751
5752-- Deprecation in 1.2.3
5753CREATEFUNCTION PolygonFromWKB(bytea)
5754        RETURNS geometry
5755        AS '
5756        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
5757        THEN GeomFromWKB($1)
5758        ELSE NULL END
5759        '
5760        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5761
5762-- Availability: 1.2.2
5763CREATEFUNCTION ST_PolygonFromWKB(bytea)
5764        RETURNS geometry
5765        AS '
5766        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
5767        THEN GeomFromWKB($1)
5768        ELSE NULL END
5769        '
5770        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5771
5772-- Deprecation in 1.2.3
5773CREATEFUNCTION MPointFromWKB(bytea, int)
5774        RETURNS geometry
5775        AS '
5776        SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
5777        THEN GeomFromWKB($1, $2)
5778        ELSE NULL END
5779        '
5780        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5781
5782-- PostGIS equivalent function: MPointFromWKB(text, int)
5783CREATEFUNCTION ST_MPointFromWKB(bytea, int)
5784        RETURNS geometry
5785        AS '
5786        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOINT''
5787        THEN GeomFromWKB($1, $2)
5788        ELSE NULL END
5789        '
5790        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5791
5792-- Deprecation in 1.2.3
5793CREATEFUNCTION MPointFromWKB(bytea)
5794        RETURNS geometry
5795        AS '
5796        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
5797        THEN GeomFromWKB($1)
5798        ELSE NULL END
5799        '
5800        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5801
5802-- Availability: 1.2.2
5803CREATEFUNCTION ST_MPointFromWKB(bytea)
5804        RETURNS geometry
5805        AS '
5806        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
5807        THEN GeomFromWKB($1)
5808        ELSE NULL END
5809        '
5810        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5811
5812-- Deprecation in 1.2.3
5813CREATEFUNCTION MultiPointFromWKB(bytea, int)
5814        RETURNS geometry
5815        AS '
5816        SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
5817        THEN GeomFromWKB($1, $2)
5818        ELSE NULL END
5819        '
5820        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5821
5822-- Availability: 1.2.2
5823CREATEFUNCTION ST_MultiPointFromWKB(bytea, int)
5824        RETURNS geometry
5825        AS '
5826        SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
5827        THEN GeomFromWKB($1, $2)
5828        ELSE NULL END
5829        '
5830        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5831
5832-- Deprecation in 1.2.3
5833CREATEFUNCTION MultiPointFromWKB(bytea)
5834        RETURNS geometry
5835        AS '
5836        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
5837        THEN GeomFromWKB($1)
5838        ELSE NULL END
5839        '
5840        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5841
5842-- Availability: 1.2.2
5843CREATEFUNCTION ST_MultiPointFromWKB(bytea)
5844        RETURNS geometry
5845        AS '
5846        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
5847        THEN GeomFromWKB($1)
5848        ELSE NULL END
5849        '
5850        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5851
5852-- Deprecation in 1.2.3
5853CREATEFUNCTION MultiLineFromWKB(bytea, int)
5854        RETURNS geometry
5855        AS '
5856        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
5857        THEN GeomFromWKB($1, $2)
5858        ELSE NULL END
5859        '
5860        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5861
5862-- Availability: 1.2.2
5863CREATEFUNCTION MultiLineFromWKB(bytea, int)
5864        RETURNS geometry
5865        AS '
5866        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
5867        THEN GeomFromWKB($1, $2)
5868        ELSE NULL END
5869        '
5870        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5871
5872-- Deprecation in 1.2.3
5873CREATEFUNCTION MultiLineFromWKB(bytea)
5874        RETURNS geometry
5875        AS '
5876        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
5877        THEN GeomFromWKB($1)
5878        ELSE NULL END
5879        '
5880        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5881
5882-- Availability: 1.2.2
5883CREATEFUNCTION ST_MultiLineFromWKB(bytea)
5884        RETURNS geometry
5885        AS '
5886        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
5887        THEN GeomFromWKB($1)
5888        ELSE NULL END
5889        '
5890        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5891
5892-- Deprecation in 1.2.3
5893CREATEFUNCTION MLineFromWKB(bytea, int)
5894        RETURNS geometry
5895        AS '
5896        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
5897        THEN GeomFromWKB($1, $2)
5898        ELSE NULL END
5899        '
5900        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5901
5902-- PostGIS equivalent function: MLineFromWKB(text, int)
5903CREATEFUNCTION ST_MLineFromWKB(bytea, int)
5904        RETURNS geometry
5905        AS '
5906        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
5907        THEN GeomFromWKB($1, $2)
5908        ELSE NULL END
5909        '
5910        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5911
5912-- Deprecation in 1.2.3
5913CREATEFUNCTION MLineFromWKB(bytea)
5914        RETURNS geometry
5915        AS '
5916        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
5917        THEN GeomFromWKB($1)
5918        ELSE NULL END
5919        '
5920        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5921
5922-- Availability: 1.2.2
5923CREATEFUNCTION ST_MLineFromWKB(bytea)
5924        RETURNS geometry
5925        AS '
5926        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
5927        THEN GeomFromWKB($1)
5928        ELSE NULL END
5929        '
5930        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5931
5932-- Deprecation in 1.2.3
5933CREATEFUNCTION MPolyFromWKB(bytea, int)
5934        RETURNS geometry
5935        AS '
5936        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
5937        THEN GeomFromWKB($1, $2)
5938        ELSE NULL END
5939        '
5940        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5941
5942-- PostGIS equivalent function: MPolyFromWKB(text, int)
5943CREATEFUNCTION ST_MPolyFromWKB(bytea, int)
5944        RETURNS geometry
5945        AS '
5946        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
5947        THEN GeomFromWKB($1, $2)
5948        ELSE NULL END
5949        '
5950        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5951
5952-- Deprecation in 1.2.3
5953CREATEFUNCTION MPolyFromWKB(bytea)
5954        RETURNS geometry
5955        AS '
5956        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
5957        THEN GeomFromWKB($1)
5958        ELSE NULL END
5959        '
5960        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5961
5962-- Availability: 1.2.2
5963CREATEFUNCTION ST_MPolyFromWKB(bytea)
5964        RETURNS geometry
5965        AS '
5966        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
5967        THEN GeomFromWKB($1)
5968        ELSE NULL END
5969        '
5970        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5971
5972-- Deprecation in 1.2.3
5973CREATEFUNCTION MultiPolyFromWKB(bytea, int)
5974        RETURNS geometry
5975        AS '
5976        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
5977        THEN GeomFromWKB($1, $2)
5978        ELSE NULL END
5979        '
5980        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5981
5982-- Availability: 1.2.2
5983CREATEFUNCTION ST_MultiPolyFromWKB(bytea, int)
5984        RETURNS geometry
5985        AS '
5986        SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
5987        THEN GeomFromWKB($1, $2)
5988        ELSE NULL END
5989        '
5990        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
5991
5992-- Deprecation in 1.2.3
5993CREATEFUNCTION MultiPolyFromWKB(bytea)
5994        RETURNS geometry
5995        AS '
5996        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
5997        THEN GeomFromWKB($1)
5998        ELSE NULL END
5999        '
6000        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6001
6002-- Availability: 1.2.2
6003CREATEFUNCTION ST_MultiPolyFromWKB(bytea)
6004        RETURNS geometry
6005        AS '
6006        SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
6007        THEN GeomFromWKB($1)
6008        ELSE NULL END
6009        '
6010        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6011
6012-- Deprecation in 1.2.3
6013CREATEFUNCTION GeomCollFromWKB(bytea, int)
6014        RETURNS geometry
6015        AS '
6016        SELECT CASE
6017        WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
6018        THEN GeomFromWKB($1, $2)
6019        ELSE NULL END
6020        '
6021        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6022
6023-- Availability: 1.2.2
6024CREATEFUNCTION ST_GeomCollFromWKB(bytea, int)
6025        RETURNS geometry
6026        AS '
6027        SELECT CASE
6028        WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
6029        THEN GeomFromWKB($1, $2)
6030        ELSE NULL END
6031        '
6032        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6033
6034-- Deprecation in 1.2.3
6035CREATEFUNCTION GeomCollFromWKB(bytea)
6036        RETURNS geometry
6037        AS '
6038        SELECT CASE
6039        WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
6040        THEN GeomFromWKB($1)
6041        ELSE NULL END
6042        '
6043        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6044
6045-- Availability: 1.2.2
6046CREATEFUNCTION ST_GeomCollFromWKB(bytea)
6047        RETURNS geometry
6048        AS '
6049        SELECT CASE
6050        WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
6051        THEN GeomFromWKB($1)
6052        ELSE NULL END
6053        '
6054        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6055
6056--
6057-- SFSQL 1.1
6058--
6059-- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon
6060--
6061--  Construct a Polygon given an arbitrary
6062--  collection of closed linestrings as a
6063--  MultiLineString text representation.
6064--
6065-- This is a PLPGSQL function rather then an SQL function
6066-- To avoid double call of BuildArea (one to get GeometryType
6067-- and another to actual return, in a CASE WHEN construct).
6068-- Also, we profit from plpgsql to RAISE exceptions.
6069--
6070-- Deprecation in 1.2.3
6071CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer)
6072RETURNS geometry
6073AS '
6074DECLARE
6075        geomtext alias for $1;
6076        srid alias for $2;
6077        mline geometry;
6078        geom geometry;
6079BEGIN
6080        mline := MultiLineStringFromText(geomtext, srid);
6081
6082        IF mline IS NULL
6083        THEN
6084                RAISE EXCEPTION ''Input is not a MultiLinestring'';
6085        END IF;
6086
6087        geom := BuildArea(mline);
6088
6089        IF GeometryType(geom) != ''POLYGON''
6090        THEN
6091                RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
6092        END IF;
6093
6094        RETURN geom;
6095END;
6096'
6097LANGUAGE 'plpgsql' _IMMUTABLE_STRICT;
6098
6099-- Availability: 1.2.2
6100CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer)
6101RETURNS geometry
6102AS '
6103DECLARE
6104        geomtext alias for $1;
6105        srid alias for $2;
6106        mline geometry;
6107        geom geometry;
6108BEGIN
6109        mline := MultiLineStringFromText(geomtext, srid);
6110
6111        IF mline IS NULL
6112        THEN
6113                RAISE EXCEPTION ''Input is not a MultiLinestring'';
6114        END IF;
6115
6116        geom := BuildArea(mline);
6117
6118        IF GeometryType(geom) != ''POLYGON''
6119        THEN
6120                RAISE EXCEPTION ''Input returns more then a single polygon, try using BdMPolyFromText instead'';
6121        END IF;
6122
6123        RETURN geom;
6124END;
6125'
6126LANGUAGE 'plpgsql' _IMMUTABLE_STRICT;
6127
6128--
6129-- SFSQL 1.1
6130--
6131-- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon
6132--
6133--  Construct a MultiPolygon given an arbitrary
6134--  collection of closed linestrings as a
6135--  MultiLineString text representation.
6136--
6137-- This is a PLPGSQL function rather then an SQL function
6138-- To raise an exception in case of invalid input.
6139--
6140-- Deprecation in 1.2.3
6141CREATEFUNCTION BdMPolyFromText(text, integer)
6142RETURNS geometry
6143AS '
6144DECLARE
6145        geomtext alias for $1;
6146        srid alias for $2;
6147        mline geometry;
6148        geom geometry;
6149BEGIN
6150        mline := MultiLineStringFromText(geomtext, srid);
6151
6152        IF mline IS NULL
6153        THEN
6154                RAISE EXCEPTION ''Input is not a MultiLinestring'';
6155        END IF;
6156
6157        geom := multi(BuildArea(mline));
6158
6159        RETURN geom;
6160END;
6161'
6162LANGUAGE 'plpgsql' _IMMUTABLE_STRICT;
6163
6164-- Availability: 1.2.2
6165CREATEFUNCTION ST_BdMPolyFromText(text, integer)
6166RETURNS geometry
6167AS '
6168DECLARE
6169        geomtext alias for $1;
6170        srid alias for $2;
6171        mline geometry;
6172        geom geometry;
6173BEGIN
6174        mline := MultiLineStringFromText(geomtext, srid);
6175
6176        IF mline IS NULL
6177        THEN
6178                RAISE EXCEPTION ''Input is not a MultiLinestring'';
6179        END IF;
6180
6181        geom := multi(BuildArea(mline));
6182
6183        RETURN geom;
6184END;
6185'
6186LANGUAGE 'plpgsql' _IMMUTABLE_STRICT;
6187
6188#include "long_xact.sql.in"
6189#include "sqlmm.sql.in"
6190
6191---------------------------------------------------------------
6192-- SQL-MM
6193---------------------------------------------------------------
6194
6195--
6196-- SQL-MM
6197--
6198-- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
6199--
6200-- Converts a given geometry to a linear geometry.  Each curveed
6201-- geometry or segment is converted into a linear approximation using
6202-- the given number of segments per quarter circle.
6203CREATEFUNCTION ST_CurveToLine(geometry, integer)
6204   RETURNS geometry
6205   AS '@MODULE_FILENAME@', 'LWGEOM_curve_segmentize'
6206   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6207--
6208-- SQL-MM
6209--
6210-- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
6211--
6212-- Converts a given geometry to a linear geometry.  Each curveed
6213-- geometry or segment is converted into a linear approximation using
6214-- the default value of 32 segments per quarter circle
6215CREATEFUNCTION ST_CurveToLine(geometry)
6216        RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)'
6217        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
6218
6219CREATEFUNCTION ST_HasArc(geometry)
6220        RETURNS boolean
6221        AS '@MODULE_FILENAME@', 'LWGEOM_has_arc'
6222        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
6223
6224CREATEFUNCTION ST_LineToCurve(geometry)
6225        RETURNS geometry
6226        AS '@MODULE_FILENAME@', 'LWGEOM_line_desegmentize'
6227        LANGUAGE 'C' _IMMUTABLE_STRICT;
6228---------------------------------------------------------------
6229-- END
6230---------------------------------------------------------------
6231
6232COMMIT;
Note: See TracBrowser for help on using the browser.