[postgis-commits] svn - r3534 - in trunk: . doc extras/ogc_test_suite extras/template_gis extras/tiger_geocoder extras/tiger_geocoder/import lwgeom regress

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Thu Jan 15 10:35:06 PST 2009


Author: mcayland
Date: 2009-01-15 10:35:06 -0800 (Thu, 15 Jan 2009)
New Revision: 3534

Added:
   trunk/lwgeom/postgis.sql.in.c
Removed:
   trunk/lwgeom/lwpostgis.sql.in.c
Modified:
   trunk/GNUmakefile
   trunk/README.postgis
   trunk/doc/installation.xml
   trunk/extras/ogc_test_suite/Makefile
   trunk/extras/ogc_test_suite/README
   trunk/extras/template_gis/profile
   trunk/extras/tiger_geocoder/INSTALL
   trunk/extras/tiger_geocoder/import/newdb.sh
   trunk/lwgeom/Makefile.in
   trunk/lwgeom/sqldefines.h.in
   trunk/regress/Makefile.in
   trunk/regress/run_test
Log:
Part 1 of GBT#94: Rename folders/files to be more consistent. Embed the MAJOR.MINOR version in the PostgreSQL shared library name (to allow different databases to contain different PostGIS versions) and also rename lwpostgis.sql to postgis.sql. Update documentation in various files to reflect the new names at the same time. 


Modified: trunk/GNUmakefile
===================================================================
--- trunk/GNUmakefile	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/GNUmakefile	2009-01-15 18:35:06 UTC (rev 3534)
@@ -11,7 +11,7 @@
 uninstall: postgis-uninstall loaderdumper-uninstall docs-uninstall 
 
 clean: liblwgeom-clean postgis-clean loaderdumper-clean docs-clean test-clean 
-	rm -f lwpostgis.sql lwpostgis_upgrade.sql
+	rm -f postgis.sql postgis_upgrade.sql
 
 distclean: clean
 	rm -Rf autom4te.cache

Modified: trunk/README.postgis
===================================================================
--- trunk/README.postgis	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/README.postgis	2009-01-15 18:35:06 UTC (rev 3534)
@@ -135,7 +135,7 @@
 ------------------------------
 
 PostGIS support must be enabled for each database that requires
-its usage. This is done by feeding the lwpostgis.sql (the enabler script)
+its usage. This is done by feeding the postgis.sql (the enabler script)
 file to the target database. 
 
 The enabler script requires the PL/pgSQL procedural language in order
@@ -147,7 +147,7 @@
 So, as postgres run:
 
   createlang plpgsql <yourdatabase>
-  psql -f lwgeom/lwpostgis.sql -d <your_database>
+  psql -f lwgeom/postgis.sql -d <your_database>
 
 Your database should now be spatially enabled.
 
@@ -166,10 +166,10 @@
 
 --- SOFT UPGRADE ---
 
-Soft upgrade consists of sourcing the lwpostgis_upgrade.sql
+Soft upgrade consists of sourcing the postgis_upgrade.sql
 script in your spatial database:
 
-  psql -f lwpostgis_upgrade.sql -d your_spatial_database
+  psql -f postgis_upgrade.sql -d your_spatial_database
 
 If a soft upgrade is not possible the script will abort and 
 you will be warned about HARD UPGRADE being required,
@@ -196,11 +196,11 @@
 	# a new database. 
         # Note: The new database does NOT have to exist.
 	# Let's call it "newdb"
-	$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump > restore.log
+	$ sh utils/postgis_restore.pl postgis.sql newdb olddb.dump > restore.log
 
 	# Check that all restored dump objects really had to be 
         # restored from dump and do not conflict with the 
-        # ones defined in lwpostgis.sql
+        # ones defined in postgis.sql
 	$ grep ^KEEPING restore.log | less
 
 	# If upgrading from PostgreSQL < 8.0 to >= 8.0 you will want to 

Modified: trunk/doc/installation.xml
===================================================================
--- trunk/doc/installation.xml	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/doc/installation.xml	2009-01-15 18:35:06 UTC (rev 3534)
@@ -111,7 +111,7 @@
 			
 			  <listitem>
 				<para>Important support files such as
-				<filename>lwpostgis.sql</filename> are installed in
+				<filename>postgis.sql</filename> are installed in
 				<filename>[prefix]/share/contrib</filename>.</para>
 			  </listitem>
 			
@@ -186,7 +186,7 @@
 		
 		<listitem>
 			<para>PostGIS requires the PL/pgSQL procedural language extension.
-			Before loading the <filename>lwpostgis.sql</filename> file, you must
+			Before loading the <filename>postgis.sql</filename> file, you must
 			first enable PL/pgSQL. You should use the
 			<filename>createlang</filename> command. The PostgreSQL Programmer's
 			Guide has the details if you want to this manually for some
@@ -197,10 +197,10 @@
 			
 			<listitem>
 			<para>Now load the PostGIS object and function definitions into your
-			database by loading the <filename>lwpostgis.sql</filename> definitions
+			database by loading the <filename>postgis.sql</filename> definitions
 			file.</para>
 			
-			<programlisting># psql -d [yourdatabase] -f lwgeom/lwpostgis.sql</programlisting>
+			<programlisting># psql -d [yourdatabase] -f lwgeom/postgis.sql</programlisting>
 			
 			<para>The PostGIS server extensions are now loaded and ready to
 			use.</para>
@@ -259,10 +259,10 @@
       <sect3 id="soft_upgrade">
         <title>Soft upgrade</title>
 
-        <para>Soft upgrade consists of sourcing the lwpostgis_upgrade.sql
+        <para>Soft upgrade consists of sourcing the postgis_upgrade.sql
         script in your spatial database:</para>
 
-        <programlisting>$ psql -f lwpostgis_upgrade.sql -d your_spatial_database</programlisting>
+        <programlisting>$ psql -f postgis_upgrade.sql -d your_spatial_database</programlisting>
 
         <para>If a soft upgrade is not possible the script will abort and you
         will be warned about HARD UPGRADE being required, so do not hesitate
@@ -270,11 +270,11 @@
 
         <note>
           <para>If you can't find the
-          <filename>lwpostgis_upgrade.sql</filename> file you are probably
+          <filename>postgis_upgrade.sql</filename> file you are probably
           using a version prior to 1.1 and must generate that file by
           yourself. This is done with the following command:</para>
 
-          <programlisting>$ utils/postgis_proc_upgrade.pl lwpostgis.sql &gt; lwpostgis_upgrade.sql</programlisting>
+          <programlisting>$ utils/postgis_proc_upgrade.pl postgis.sql &gt; postgis_upgrade.sql</programlisting>
         </note>
       </sect3>
 
@@ -305,11 +305,11 @@
         your database. Let's call it "newdb", with UNICODE as the character
         encoding:</para>
 
-        <programlisting>$ sh utils/postgis_restore.pl lwpostgis.sql newdb olddb.dump -E=UNICODE &gt; restore.log</programlisting>
+        <programlisting>$ sh utils/postgis_restore.pl postgis.sql newdb olddb.dump -E=UNICODE &gt; restore.log</programlisting>
 
         <para>Check that all restored dump objects really had to be restored
         from dump and do not conflict with the ones defined in
-        lwpostgis.sql</para>
+        postgis.sql</para>
 
         <programlisting>$ grep ^KEEPING restore.log | less</programlisting>
 

Modified: trunk/extras/ogc_test_suite/Makefile
===================================================================
--- trunk/extras/ogc_test_suite/Makefile	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/extras/ogc_test_suite/Makefile	2009-01-15 18:35:06 UTC (rev 3534)
@@ -2,7 +2,7 @@
 all:
 	createdb $(TESTDB) > /dev/null
 	createlang plpgsql $(TESTDB)
-	psql $(TESTDB) < ../../lwpostgis.sql >/dev/null 2>&1
+	psql $(TESTDB) < ../../postgis.sql >/dev/null 2>&1
 	psql -a -f 1_schema.sql $(TESTDB) > 1_output.txt 2>&1
 	psql -a -f 2_queries.sql $(TESTDB) > 2_output.txt 2>&1
 	@echo "---------------------------------------"

Modified: trunk/extras/ogc_test_suite/README
===================================================================
--- trunk/extras/ogc_test_suite/README	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/extras/ogc_test_suite/README	2009-01-15 18:35:06 UTC (rev 3534)
@@ -8,7 +8,7 @@
 
   createdb ogc
   createlang plpgsql ogc
-  psql ogc < ../../lwpostgis.sql
+  psql ogc < ../../postgis.sql
 
   psql -a -f 1_schema.sql ogc >& 1_output.txt
   psql -a -f 2_queries.sql ogc >& 2_output.txt

Modified: trunk/extras/template_gis/profile
===================================================================
--- trunk/extras/template_gis/profile	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/extras/template_gis/profile	2009-01-15 18:35:06 UTC (rev 3534)
@@ -21,7 +21,7 @@
 #this is the postgis functionality loader script.
 #as it contains the name of the postgresql-postgis library, this 
 #file will designate which postgis version to use.
-PGISSCRIPT=lwpostgis.sql
+PGISSCRIPT=postgis.sql
 
 #set this to true not to load huge spatial_ref_sys table in the template.
 #NO_SRS=true

Modified: trunk/extras/tiger_geocoder/INSTALL
===================================================================
--- trunk/extras/tiger_geocoder/INSTALL	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/extras/tiger_geocoder/INSTALL	2009-01-15 18:35:06 UTC (rev 3534)
@@ -4,7 +4,7 @@
 
 - Install postgresql-8.2-postgis (For various GIS bits)
 - Install PostGIS functions and spatial ref definitions:
-  \i /usr/share/postgresql-8.2-postgis/lwpostgis.sql
+  \i /usr/share/postgresql-8.2-postgis/postgis.sql
   \i /usr/share/postgresql-8.2-postgis/spatial_ref_sys.sql
 - Install postgresql-contrib-8.2 for soundex (from fuzzystrmatch)
 - Install functions into PG using:

Modified: trunk/extras/tiger_geocoder/import/newdb.sh
===================================================================
--- trunk/extras/tiger_geocoder/import/newdb.sh	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/extras/tiger_geocoder/import/newdb.sh	2009-01-15 18:35:06 UTC (rev 3534)
@@ -3,4 +3,4 @@
 dropdb $1
 createdb $1
 createlang plpgsql $1
-psql $1 </usr/share/pgsql/contrib/lwpostgis.sql
+psql $1 </usr/share/pgsql/contrib/postgis.sql

Modified: trunk/lwgeom/Makefile.in
===================================================================
--- trunk/lwgeom/Makefile.in	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/lwgeom/Makefile.in	2009-01-15 18:35:06 UTC (rev 3534)
@@ -10,15 +10,14 @@
 # *
 # **********************************************************************
 
-MODULE_big=lwpostgis
+MODULE_big=postgis- at POSTGIS_MAJOR_VERSION@. at POSTGIS_MINOR_VERSION@
 
-
 # Files to be copied to the contrib/ directory
-DATA_built=lwpostgis.sql
+DATA_built=postgis.sql
 DATA=../spatial_ref_sys.sql
 
 # SQL objects (files requiring C pre-processing)
-SQL_OBJS=lwpostgis.sql.in
+SQL_OBJS=postgis.sql.in
 
 # PostgreSQL objects
 PG_OBJS=lwgeom_pg.o \
@@ -71,6 +70,10 @@
 include $(PGXS)
 
 
+# Borrow the $libdir substitution from PGXS but customise by adding the version number
+%.sql: %.sql.in
+	sed 's,MODULE_PATHNAME,$$libdir/$*- at POSTGIS_MAJOR_VERSION@. at POSTGIS_MINOR_VERSION@,g' $< >$@
+
 # Generate any .sql.in files from .sql.in.c files by running them through the C pre-processor 
 $(SQL_OBJS): %.in: %.in.c
 	$(CPP) -traditional-cpp $< | grep -v '^#' > $@

Deleted: trunk/lwgeom/lwpostgis.sql.in.c
===================================================================
--- trunk/lwgeom/lwpostgis.sql.in.c	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/lwgeom/lwpostgis.sql.in.c	2009-01-15 18:35:06 UTC (rev 3534)
@@ -1,5985 +0,0 @@
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- 
--- $Id$
---
--- PostGIS - Spatial Types for PostgreSQL
--- http://postgis.refractions.net
--- Copyright 2001-2003 Refractions Research Inc.
---
--- This is free software; you can redistribute and/or modify it under
--- the terms of the GNU General Public Licence. See the COPYING file.
---  
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
---
--- WARNING: Any change in this file must be evaluated for compatibility.
---          Changes cleanly handled by lwpostgis_uptrade.sql are fine,
---	    other changes will require a bump in Major version.
---	    Currently only function replaceble by CREATE OR REPLACE
---	    are cleanly handled.
---
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-#include "sqldefines.h"
-
-BEGIN;
-
--------------------------------------------------------------------
---  SPHEROID TYPE
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION spheroid_in(cstring)
-	RETURNS spheroid 
-	AS 'MODULE_PATHNAME','ellipsoid_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_spheroid_in(cstring)
-	RETURNS spheroid 
-	AS 'MODULE_PATHNAME','ellipsoid_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION spheroid_out(spheroid)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME','ellipsoid_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_spheroid_out(spheroid)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME','ellipsoid_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE spheroid (
-	alignment = double,
-	internallength = 65,
-	input = ST_spheroid_in,
-	output = ST_spheroid_out
-);
-
--------------------------------------------------------------------
---  GEOMETRY TYPE (lwgeom)
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_in(cstring)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_in(cstring)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_out(geometry)
-        RETURNS cstring
-        AS 'MODULE_PATHNAME','LWGEOM_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_out(geometry)
-        RETURNS cstring
-        AS 'MODULE_PATHNAME','LWGEOM_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_analyze(internal)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_analyze'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_analyze(internal)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_analyze'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_recv(internal)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_recv'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_recv(internal)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_recv'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_send(geometry)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_send'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_send(geometry)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_send'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE geometry (
-        internallength = variable,
-        input = ST_geometry_in,
-        output = ST_geometry_out,
-	send = ST_geometry_send,
-	receive = ST_geometry_recv,
-	delimiter = ':',
-	analyze = ST_geometry_analyze,
-        storage = main
-);
-
--------------------------------------------
--- Affine transforms
--------------------------------------------
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_affine'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_affine'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION Affine(geometry,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_Affine(geometry,float8,float8,float8,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, $3, 0,  $4, $5, 0,  0, 0, 1,  $6, $7, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateZ(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateZ(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  cos($2), -sin($2), 0,  sin($2), cos($2), 0,  0, 0, 1,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION Rotate(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT rotateZ($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Rotate(geometry,float8)
-	RETURNS geometry
-	AS 'SELECT rotateZ($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateX(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateX(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, cos($2), -sin($2), 0, sin($2), cos($2), 0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.2
--- Deprecation in 1.2.3
-CREATEFUNCTION RotateY(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RotateY(geometry,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1,  cos($2), 0, sin($2),  0, 1, 0,  -sin($2), 0, cos($2), 0,  0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Translate(geometry,float8,float8,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Translate(geometry,float8,float8,float8)
-	RETURNS geometry
- 	AS 'SELECT affine($1, 1, 0, 0, 0, 1, 0, 0, 0, 1, $2, $3, $4)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Translate(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT translate($1, $2, $3, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Translate(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT translate($1, $2, $3, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION Scale(geometry,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Scale(geometry,float8,float8,float8)
-	RETURNS geometry
-	AS 'SELECT affine($1,  $2, 0, 0,  0, $3, 0,  0, 0, $4,  0, 0, 0)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION Scale(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT scale($1, $2, $3, 1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Scale(geometry,float8,float8)
-	RETURNS geometry
-	AS 'SELECT scale($1, $2, $3, 1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; 
-
--- Availability: 1.1.0 
--- Deprecation in 1.2.3
-CREATEFUNCTION transscale(geometry,float8,float8,float8,float8)
-        RETURNS geometry
-        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
-		0, 0, 1,  $2 * $4, $3 * $5, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2 
-CREATEFUNCTION ST_transscale(geometry,float8,float8,float8,float8)
-        RETURNS geometry
-        AS 'SELECT affine($1,  $4, 0, 0,  0, $5, 0, 
-		0, 0, 1,  $2 * $4, $3 * $5, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT;
-
--- Availability: 1.1.0
--- Deprecation in 1.2.3
-CREATEFUNCTION shift_longitude(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_shift_longitude(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_longitude_shift'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; 
-
--------------------------------------------------------------------
---  BOX3D TYPE
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d_in(cstring)
-	RETURNS box3d 
-	AS 'MODULE_PATHNAME', 'BOX3D_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d_out(box3d)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME', 'BOX3D_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d_in(cstring)
-	RETURNS box3d 
-	AS 'MODULE_PATHNAME', 'BOX3D_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d_out(box3d)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME', 'BOX3D_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE box3d (
-	alignment = double,
-	internallength = 48,
-	input = ST_box3d_in,
-	output = ST_box3d_out
-);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION xmin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_xmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_XMin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_xmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ymin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_ymin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_YMin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_ymin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_zmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ZMin(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_zmin'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION xmax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_xmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_XMax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_xmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ymax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_ymax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_YMax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_ymax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_zmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ZMax(box3d)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','BOX3D_zmax'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--------------------------------------------------------------------
---  CHIP TYPE
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION chip_in(cstring)
-	RETURNS chip 
-	AS 'MODULE_PATHNAME','CHIP_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-        
--- Availability: 1.2.2
-CREATEFUNCTION ST_chip_in(cstring)
-	RETURNS chip 
-	AS 'MODULE_PATHNAME','CHIP_in'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION chip_out(chip)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME','CHIP_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_chip_out(chip)
-	RETURNS cstring 
-	AS 'MODULE_PATHNAME','CHIP_out'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATE TYPE chip (
-	alignment = double,
-	internallength = variable,
-	input = ST_chip_in,
-	output = ST_chip_out,
-	storage = extended
-);
-
------------------------------------------------------------------------
--- BOX2D
------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_in(cstring)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_in(cstring)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_in'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_out(box2d)
-        RETURNS cstring
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_out(box2d)
-        RETURNS cstring
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_out'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATE TYPE box2d (
-        internallength = 16,
-        input = ST_box2d_in,
-        output = ST_box2d_out,
-        storage = plain
-);
-
----- BOX2D  support functions
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overleft(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overleft(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overright(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overright' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overright(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overright' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_left(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_left' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_left(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_left' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_right(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_right' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_right(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_right' 
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_contain(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_contain(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_contained(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_contained(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_overlap(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_overlap(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_same(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_same(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d_intersects(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_intersects'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d_intersects(box2d, box2d) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'BOX2D_intersects'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
--- lwgeom  operator support functions
-
--------------------------------------------------------------------
--- BTREE indexes
--------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_lt(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_lt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_lt(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_lt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_le(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_le'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_le(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_le'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_gt(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_gt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_gt(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_gt'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_ge(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_ge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_ge(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_ge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_eq(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_eq'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_eq(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'lwgeom_eq'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_cmp(geometry, geometry) 
-	RETURNS integer
-	AS 'MODULE_PATHNAME', 'lwgeom_cmp'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_cmp(geometry, geometry) 
-	RETURNS integer
-	AS 'MODULE_PATHNAME', 'lwgeom_cmp'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
---
--- Sorting operators for Btree
---
-
-CREATE OPERATOR < (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_lt,
-   COMMUTATOR = '>', NEGATOR = '>=',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR <= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_le,
-   COMMUTATOR = '>=', NEGATOR = '>',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR = (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_eq,
-   COMMUTATOR = '=', -- we might implement a faster negator here
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR >= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_ge,
-   COMMUTATOR = '<=', NEGATOR = '<',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-CREATE OPERATOR > (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_gt,
-   COMMUTATOR = '<', NEGATOR = '<=',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-
-CREATE OPERATOR CLASS btree_geometry_ops
-	DEFAULT FOR TYPE geometry USING btree AS
-	OPERATOR	1	< ,
-	OPERATOR	2	<= ,
-	OPERATOR	3	= ,
-	OPERATOR	4	>= ,
-	OPERATOR	5	> ,
-	FUNCTION	1	geometry_cmp (geometry, geometry);
-
-
-
--------------------------------------------------------------------
--- GiST indexes
--------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION postgis_gist_sel (internal, oid, internal, int4)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_gist_sel'
-	LANGUAGE 'C';
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_postgis_gist_sel (internal, oid, internal, int4)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_gist_sel'
-	LANGUAGE 'C';
-
--- Deprecation in 1.2.3
-CREATEFUNCTION postgis_gist_joinsel(internal, oid, internal, smallint)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_gist_joinsel'
-	LANGUAGE 'C';
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_postgis_gist_joinsel(internal, oid, internal, smallint)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_gist_joinsel'
-	LANGUAGE 'C';
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overleft(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overleft(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overleft'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overright(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overright'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overright(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overright'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overabove(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overabove'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overabove(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overabove'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overbelow(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overbelow'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overbelow(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overbelow'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_left(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_left'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_left(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_left'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_right(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_right'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_right(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_right'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_above(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_above'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_above(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_above'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_below(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_below'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_below(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_below'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_contain(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_contain(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_contain'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_contained(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_contained(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_contained'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_overlap(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry_overlap(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_overlap'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry_same(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---Availability: 1.2.2
-CREATEFUNCTION ST_geometry_same(geometry, geometry) 
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_same'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- GEOMETRY operators
-
-CREATE OPERATOR << (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_left,
-   COMMUTATOR = '>>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &< (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overleft,
-   COMMUTATOR = '&>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR <<| (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_below,
-   COMMUTATOR = '|>>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR &<| (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overbelow,
-   COMMUTATOR = '|&>',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR && (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overlap,
-   COMMUTATOR = '&&',
-   RESTRICT = ST_postgis_gist_sel, JOIN = ST_postgis_gist_joinsel
-);
-
-CREATE OPERATOR &> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overright,
-   COMMUTATOR = '&<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR >> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_right,
-   COMMUTATOR = '<<',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR |&> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_overabove,
-   COMMUTATOR = '&<|',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR |>> (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_above,
-   COMMUTATOR = '<<|',
-   RESTRICT = positionsel, JOIN = positionjoinsel
-);
-
-CREATE OPERATOR ~= (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_same,
-   COMMUTATOR = '~=', 
-   RESTRICT = eqsel, JOIN = eqjoinsel
-);
-
-CREATE OPERATOR @ (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contained,
-   COMMUTATOR = '~',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
-CREATE OPERATOR ~ (
-   LEFTARG = geometry, RIGHTARG = geometry, PROCEDURE = ST_geometry_contain,
-   COMMUTATOR = '@',
-   RESTRICT = contsel, JOIN = contjoinsel
-);
-
--- gist support functions
-
-CREATEFUNCTION LWGEOM_gist_consistent(internal,geometry,int4) 
-	RETURNS bool 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_consistent'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_compress(internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME','LWGEOM_gist_compress'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_penalty(internal,internal,internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_penalty'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_picksplit(internal, internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_picksplit'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_union(bytea, internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_union'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_same(box2d, box2d, internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_same'
-	LANGUAGE 'C';
-
-CREATEFUNCTION LWGEOM_gist_decompress(internal) 
-	RETURNS internal 
-	AS 'MODULE_PATHNAME' ,'LWGEOM_gist_decompress'
-	LANGUAGE 'C';
-
--------------------------------------------
--- GIST opclass index binding entries.
--------------------------------------------
---
--- Create opclass index bindings for PG>=73
---
-
-CREATE OPERATOR CLASS gist_geometry_ops
-        DEFAULT FOR TYPE geometry USING gist AS
-	STORAGE 	box2d,
-        OPERATOR        1        << 	,
-        OPERATOR        2        &<	,
-        OPERATOR        3        &&	,
-        OPERATOR        4        &>	,
-        OPERATOR        5        >>	,
-        OPERATOR        6        ~=	,
-        OPERATOR        7        ~	,
-        OPERATOR        8        @	,
-	OPERATOR	9	 &<|	,
-	OPERATOR	10	 <<|	,
-	OPERATOR	11	 |>>	,
-	OPERATOR	12	 |&>	,
-	FUNCTION        1        LWGEOM_gist_consistent (internal, geometry, int4),
-        FUNCTION        2        LWGEOM_gist_union (bytea, internal),
-        FUNCTION        3        LWGEOM_gist_compress (internal),
-        FUNCTION        4        LWGEOM_gist_decompress (internal),
-        FUNCTION        5        LWGEOM_gist_penalty (internal, internal, internal),
-        FUNCTION        6        LWGEOM_gist_picksplit (internal, internal),
-        FUNCTION        7        LWGEOM_gist_same (box2d, box2d, internal);
-	
--------------------------------------------
--- other lwgeom functions
--------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION addBBOX(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_addBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_addBBOX(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_addBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION dropBBOX(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_dropBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_dropBBOX(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_dropBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-	
--- Deprecation in 1.2.3
-CREATEFUNCTION getSRID(geometry) 
-	RETURNS int4
-	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION getSRID(geometry) 
-	RETURNS int4
-	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION getBBOX(geometry)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION getBBOX(geometry)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--------------------------------------------
---- CHIP functions
--------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION srid(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_srid(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION height(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getHeight'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_height(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getHeight'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION factor(chip)
-	RETURNS FLOAT4
-	AS 'MODULE_PATHNAME','CHIP_getFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_factor(chip)
-	RETURNS FLOAT4
-	AS 'MODULE_PATHNAME','CHIP_getFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION width(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getWidth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_width(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getWidth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION datatype(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getDatatype'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_datatype(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getDatatype'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION compression(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getCompression'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_compression(chip)
-	RETURNS int4
-	AS 'MODULE_PATHNAME','CHIP_getCompression'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION setSRID(chip,int4)
-	RETURNS chip
-	AS 'MODULE_PATHNAME','CHIP_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION setFactor(chip,float4)
-	RETURNS chip
-	AS 'MODULE_PATHNAME','CHIP_setFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_setFactor(chip,float4)
-	RETURNS chip
-	AS 'MODULE_PATHNAME','CHIP_setFactor'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-------------------------------------------------------------------------
--- DEBUG
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION mem_size(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_mem_size'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_mem_size(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_mem_size'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION summary(geometry)
-	RETURNS text
-	AS 'MODULE_PATHNAME', 'LWGEOM_summary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_summary(geometry)
-	RETURNS text
-	AS 'MODULE_PATHNAME', 'LWGEOM_summary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION npoints(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_npoints'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_npoints(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_npoints'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION nrings(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_nrings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_nrings(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_nrings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-------------------------------------------------------------------------
--- Misures
-------------------------------------------------------------------------
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION length3d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length3d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATEFUNCTION length(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: length2d(geometry)
-CREATEFUNCTION ST_Length(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_length2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION length3d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length3d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION length2d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_length2d_spheroid(geometry, spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_length2d_ellipsoid_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is a fake (for back-compatibility)
--- uses 3d if 3d is available, 2d otherwise
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter3d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_perimeter3d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_perimeter2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION perimeter(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: perimeter2d(geometry)
-CREATEFUNCTION ST_Perimeter(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_perimeter2d_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- this is an alias for 'area(geometry)'
--- there is nothing such an 'area3d'...
--- Deprecation in 1.2.3
-CREATEFUNCTION area2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
--- Deprecation in 1.3.4
-CREATEFUNCTION ST_area2d(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION area(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: area(geometry)
-CREATEFUNCTION ST_Area(geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_area_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION distance_spheroid(geometry,geometry,spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_distance_spheroid(geometry,geometry,spheroid)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_distance_ellipsoid_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION distance_sphere(geometry,geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_distance_sphere(geometry,geometry)
-	RETURNS FLOAT8
-	AS 'MODULE_PATHNAME','LWGEOM_distance_sphere'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Minimum distance. 2d only.
--- Deprecation in 1.2.3
-CREATEFUNCTION distance(geometry,geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: distance(geometry,geometry)
-CREATEFUNCTION ST_Distance(geometry,geometry)
-    RETURNS float8
-    AS 'MODULE_PATHNAME', 'LWGEOM_mindistance2d'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Maximum distance between linestrings. 2d only. Very bogus.
--- Deprecation in 1.2.3
-CREATEFUNCTION max_distance(geometry,geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_max_distance(geometry,geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_maxdistance2d_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION point_inside_circle(geometry,float8,float8,float8)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_point_inside_circle(geometry,float8,float8,float8)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_inside_circle_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION azimuth(geometry,geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_azimuth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_azimuth(geometry,geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME', 'LWGEOM_azimuth'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-------------------------------------------------------------------------
--- MISC
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_2d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_2d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3dz(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3dz(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- an alias for force_3dz
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dz'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_3dm(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_3dm(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_4d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_4d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_4d(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_4d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION force_collection(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_force_collection(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION multi(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_multi'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_multi(geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_force_multi'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collector(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collector(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collect(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collect_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(box3d,float8)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Expand(box3d,float8)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(box2d,float8)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_expand(box2d,float8)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION expand(geometry,float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_expand(geometry,float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_expand'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION envelope(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_envelope'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- PostGIS equivalent function: envelope(geometry)
-CREATEFUNCTION ST_Envelope(geometry)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME', 'LWGEOM_envelope'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION reverse(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_reverse'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Reverse(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_reverse'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ForceRHR(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_forceRHR_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_ForceRHR(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_forceRHR_poly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION noop(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_noop'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_noop(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_noop'
-	LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION zmflag(geometry)
-	RETURNS smallint
-	AS 'MODULE_PATHNAME', 'LWGEOM_zmflag'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_zmflag(geometry)
-	RETURNS smallint
-	AS 'MODULE_PATHNAME', 'LWGEOM_zmflag'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION hasBBOX(geometry)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availabitily: 1.2.2
-CREATEFUNCTION ST_HasBBOX(geometry)
-	RETURNS bool
-	AS 'MODULE_PATHNAME', 'LWGEOM_hasBBOX'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ndims(geometry)
-	RETURNS smallint
-	AS 'MODULE_PATHNAME', 'LWGEOM_ndims'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_NDims(geometry)
-	RETURNS smallint
-	AS 'MODULE_PATHNAME', 'LWGEOM_ndims'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKT(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asEWKT'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKT(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asEWKT'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKB(geometry)
-	RETURNS BYTEA
-	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKB(geometry)
-	RETURNS BYTEA
-	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsHEXEWKB(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsHEXEWKB(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsHEXEWKB(geometry, text)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsHEXEWKB(geometry, text)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asHEXEWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsEWKB(geometry,text)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsEWKB(geometry,text)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','WKBFromLWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromEWKB(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOMFromWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromEWKB(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOMFromWKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromEWKT(text)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromEWKT(text)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION cache_bbox()
-        RETURNS trigger
-        AS 'MODULE_PATHNAME'
-        LANGUAGE 'C';
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Cache_BBox()
-	RETURNS trigger
-	AS 'MODULE_PATHNAME','cache_bbox'
-	LANGUAGE 'C';
-
-------------------------------------------------------------------------
--- CONSTRUCTORS
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePoint(float8, float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePoint(float8, float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePointM(float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-	
--- Availability: 1.3.4
-CREATEFUNCTION ST_MakePointM(float8, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoint3dm'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeBox2d(geometry, geometry)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeBox2d(geometry, geometry)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeBox3d(geometry, geometry)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeBox3d(geometry, geometry)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_construct'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION makeline_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeLine_GArray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromMultiPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromMultiPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_line_from_mpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakeLine(geometry, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makeline'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakeLine(geometry, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makeline'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AddPoint(geometry, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AddPoint(geometry, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AddPoint(geometry, geometry, integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AddPoint(geometry, geometry, integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_addpoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION RemovePoint(geometry, integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_removepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_RemovePoint(geometry, integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_removepoint'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SetPoint(geometry, integer, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SetPoint(geometry, integer, geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE makeline (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = makeline_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_MakeLine (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_makeline_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePolygon(geometry, geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePolygon(geometry, geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MakePolygon(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MakePolygon(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_makepoly'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION BuildArea(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_BuildArea(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_buildarea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Polygonize_GArray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'polygonize_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Polygonize_GArray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'polygonize_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineMerge(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'linemerge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineMerge(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'linemerge'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Polygonize (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = polygonize_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Polygonize (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_polygonize_garray
-	);
-
-CREATE TYPE geometry_dump AS (path integer[], geom geometry);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Dump(geometry)
-	RETURNS SETOF geometry_dump
-	AS 'MODULE_PATHNAME', 'LWGEOM_dump'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Dump(geometry)
-	RETURNS SETOF geometry_dump
-	AS 'MODULE_PATHNAME', 'LWGEOM_dump'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION DumpRings(geometry)
-	RETURNS SETOF geometry_dump
-	AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_DumpRings(geometry)
-	RETURNS SETOF geometry_dump
-	AS 'MODULE_PATHNAME', 'LWGEOM_dump_rings'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-------------------------------------------------------------------------
-
---
--- Aggregate functions
---
-
--- Deprecation in 1.2.3
-CREATEFUNCTION combine_bbox(box2d,geometry)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Combine_BBox(box2d,geometry)
-	RETURNS box2d
-	AS 'MODULE_PATHNAME', 'BOX2DFLOAT4_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Extent(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box2d
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Extent(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box2d
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION combine_bbox(box3d,geometry)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Combine_BBox(box3d,geometry)
-	RETURNS box3d
-	AS 'MODULE_PATHNAME', 'BOX3D_combine'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE Extent3d(
-	sfunc = combine_bbox,
-	basetype = geometry,
-	stype = box3d
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Extent3d(
-	sfunc = ST_combine_bbox,
-	basetype = geometry,
-	stype = box3d
-	);
-
------------------------------------------------------------------------
--- ESTIMATED_EXTENT( <schema name>, <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION estimated_extent(text,text,text) RETURNS box2d AS
-	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_estimated_extent(text,text,text) RETURNS box2d AS
-	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER;
-
------------------------------------------------------------------------
--- ESTIMATED_EXTENT( <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION estimated_extent(text,text) RETURNS box2d AS
-	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_estimated_extent(text,text) RETURNS box2d AS
-	'MODULE_PATHNAME', 'LWGEOM_estimated_extent'
-	LANGUAGE 'C' _IMMUTABLE_STRICT _SECURITY_DEFINER; 
-
------------------------------------------------------------------------
--- FIND_EXTENT( <schema name>, <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION find_extent(text,text,text) RETURNS box2d AS
-$$
-DECLARE
-	schemaname alias for $1;
-	tablename alias for $2;
-	columnname alias for $3;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || schemaname || '"."' || tablename || '"' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_find_extent(text,text,text) RETURNS box2d AS
-$$
-DECLARE
-	schemaname alias for $1;
-	tablename alias for $2;
-	columnname alias for $3;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || schemaname || '"."' || tablename || '"' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-
------------------------------------------------------------------------
--- FIND_EXTENT( <table name>, <column name> )
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION find_extent(text,text) RETURNS box2d AS
-$$
-DECLARE
-	tablename alias for $1;
-	columnname alias for $2;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || tablename || '"' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_find_extent(text,text) RETURNS box2d AS
-$$
-DECLARE
-	tablename alias for $1;
-	columnname alias for $2;
-	myrec RECORD;
-
-BEGIN
-	FOR myrec IN EXECUTE 'SELECT extent("' || columnname || '") FROM "' || tablename || '"' LOOP
-		return myrec.extent;
-	END LOOP; 
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--------------------------------------------------------------------
--- SPATIAL_REF_SYS
--------------------------------------------------------------------
-CREATE TABLE spatial_ref_sys (
-	 srid integer not null primary key,
-	 auth_name varchar(256), 
-	 auth_srid integer, 
-	 srtext varchar(2048),
-	 proj4text varchar(2048) 
-);
-
--------------------------------------------------------------------
--- GEOMETRY_COLUMNS
--------------------------------------------------------------------
-CREATE TABLE geometry_columns (
-	f_table_catalog varchar(256) not null,
-	f_table_schema varchar(256) not null,
-	f_table_name varchar(256) not null,
-	f_geometry_column varchar(256) not null,
-	coord_dimension integer not null,
-	srid integer not null,
-	type varchar(30) not null,
-	CONSTRAINT geometry_columns_pk primary key ( 
-		f_table_catalog, 
-		f_table_schema, 
-		f_table_name, 
-		f_geometry_column )
-) WITH OIDS;
-
------------------------------------------------------------------------
--- RENAME_GEOMETRY_TABLE_CONSTRAINTS()
------------------------------------------------------------------------
--- This function has been obsoleted for the difficulty in
--- finding attribute on which the constraint is applied.
--- AddGeometryColumn will name the constraints in a meaningful
--- way, but nobody can rely on it since old postgis versions did
--- not do that.
------------------------------------------------------------------------
-CREATEFUNCTION rename_geometry_table_constraints() RETURNS text
-AS 
-$$
-SELECT 'rename_geometry_table_constraint() is obsoleted'::text
-$$
-LANGUAGE 'SQL' _IMMUTABLE;
-
------------------------------------------------------------------------
--- FIX_GEOMETRY_COLUMNS() 
------------------------------------------------------------------------
--- This function will:
---
---	o try to fix the schema of records with an integer one
---		(for PG>=73)
---
---	o link records to system tables through attrelid and varattnum
---		(for PG<75)
---
---	o delete all records for which no linking was possible
---		(for PG<75)
---	
--- 
------------------------------------------------------------------------
-CREATEFUNCTION fix_geometry_columns() RETURNS text
-AS 
-$$
-DECLARE
-	mislinked record;
-	result text;
-	linked integer;
-	deleted integer;
-	foundschema integer;
-BEGIN
-
-	-- Since 7.3 schema support has been added.
-	-- Previous postgis versions used to put the database name in
-	-- the schema column. This needs to be fixed, so we try to 
-	-- set the correct schema for each geometry_colums record
-	-- looking at table, column, type and srid.
-	UPDATE geometry_columns SET f_table_schema = n.nspname
-		FROM pg_namespace n, pg_class c, pg_attribute a,
-			pg_constraint sridcheck, pg_constraint typecheck
-                WHERE ( f_table_schema is NULL
-		OR f_table_schema = ''
-                OR f_table_schema NOT IN (
-                        SELECT nspname::varchar
-                        FROM pg_namespace nn, pg_class cc, pg_attribute aa
-                        WHERE cc.relnamespace = nn.oid
-                        AND cc.relname = f_table_name::name
-                        AND aa.attrelid = cc.oid
-                        AND aa.attname = f_geometry_column::name))
-                AND f_table_name::name = c.relname
-                AND c.oid = a.attrelid
-                AND c.relnamespace = n.oid
-                AND f_geometry_column::name = a.attname
-
-                AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE '(srid(% = %)'
-                AND sridcheck.consrc ~ textcat(' = ', srid::text)
-
-                AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-		'((geometrytype(%) = ''%''::text) OR (% IS NULL))'
-                AND typecheck.consrc ~ textcat(' = ''', type::text)
-
-                AND NOT EXISTS (
-                        SELECT oid FROM geometry_columns gc
-                        WHERE c.relname::varchar = gc.f_table_name
-                        AND n.nspname::varchar = gc.f_table_schema
-                        AND a.attname::varchar = gc.f_geometry_column
-                );
-
-	GET DIAGNOSTICS foundschema = ROW_COUNT;
-
-	-- no linkage to system table needed
-	return 'fixed:'||foundschema::text;
-
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE;
-
------------------------------------------------------------------------
--- POPULATE_GEOMETRY_COLUMNS() 
------------------------------------------------------------------------
--- Truncates and refills the geometry_column table from all tables and 
--- views in the database that contain geometry columns. This function 
--- is a simple wrapper for populate_geometry_columns(oid).  In essence,
--- this function ensures every geometry column in the database has the
--- appropriate spatial contraints (for tables) and exists in the 
--- geometry_columns table.  
--- Availability: 1.4.0
------------------------------------------------------------------------
-CREATEFUNCTION populate_geometry_columns()
-  RETURNS text AS
-$$
-DECLARE
-    inserted    integer;
-    oldcount    integer;
-    probed      integer;
-    stale       integer;
-    gcs         RECORD;
-    gc          RECORD;
-    gsrid       integer;
-    gndims      integer;
-    gtype       text;
-    query       text;
-    gc_is_valid boolean;
-    
-BEGIN
-    SELECT count(*) INTO oldcount FROM geometry_columns;
-    inserted := 0;
-
-    EXECUTE 'TRUNCATE geometry_columns';
-
-    -- Count the number of geometry columns in all tables and views
-    SELECT count(DISTINCT c.oid) INTO probed
-        FROM pg_class c, 
-             pg_attribute a, 
-             pg_type t, 
-             pg_namespace n
-        WHERE (c.relkind = 'r' OR c.relkind = 'v')
-        AND t.typname = 'geometry'
-        AND a.attisdropped = false
-        AND a.atttypid = t.oid
-        AND a.attrelid = c.oid
-        AND c.relnamespace = n.oid
-	AND n.nspname NOT ILIKE 'pg_temp%';
-
-    -- Iterate through all non-dropped geometry columns
-    RAISE DEBUG 'Processing Tables.....';
-
-    FOR gcs IN 
-        SELECT DISTINCT ON (c.oid) c.oid, n.nspname, c.relname
-            FROM pg_class c, 
-                 pg_attribute a, 
-                 pg_type t, 
-                 pg_namespace n
-            WHERE c.relkind = 'r'
-            AND t.typname = 'geometry'
-            AND a.attisdropped = false
-            AND a.atttypid = t.oid
-            AND a.attrelid = c.oid
-            AND c.relnamespace = n.oid
-	    AND n.nspname NOT ILIKE 'pg_temp%'
-        LOOP
-        
-        inserted := inserted + populate_geometry_columns(gcs.oid);
-    END LOOP;
-    
-    -- Add views to geometry columns table
-    RAISE DEBUG 'Processing Views.....';
-    FOR gcs IN 
-        SELECT DISTINCT ON (c.oid) c.oid, n.nspname, c.relname
-            FROM pg_class c, 
-                 pg_attribute a, 
-                 pg_type t, 
-                 pg_namespace n
-            WHERE c.relkind = 'v'
-            AND t.typname = 'geometry'
-            AND a.attisdropped = false
-            AND a.atttypid = t.oid
-            AND a.attrelid = c.oid
-            AND c.relnamespace = n.oid
-        LOOP            
-            
-        inserted := inserted + populate_geometry_columns(gcs.oid);
-    END LOOP;
-
-    IF oldcount > inserted THEN
-        stale = oldcount-inserted;
-    ELSE
-        stale = 0;
-    END IF;
-
-    RETURN 'probed:' ||probed|| ' inserted:'||inserted|| ' conflicts:'||probed-inserted|| ' deleted:'||stale;
-END
-
-$$
-LANGUAGE 'plpgsql' _VOLATILE;
-  
------------------------------------------------------------------------
--- POPULATE_GEOMETRY_COLUMNS(tbl_oid oid) 
------------------------------------------------------------------------
--- DELETEs from and reINSERTs into the geometry_column table all entries 
--- associated with the oid of a particular table or view.  
---
--- If the provided oid is for a table, this function tries to determine 
--- the srid, dimension, and geometry type of the all geometries 
--- in the table, adding contraints as necessary to the table.  If 
--- successful, an appropriate row is inserted into the geometry_column 
--- table, otherwise, the exception is caught and an error notice is 
--- raised describing the problem. (This is so the wrapper function 
--- populate_geometry_columns() can apply spatial constraints to all
--- geometry columns across an entire database at once without erroring 
--- out)
---
--- If the provided oid is for a view, as with a table oid, this function
--- tries to determine the srid, dimension, and type of all the geometries
--- in the view, inserting appropriate entries into the geometry_columns
--- table. 
--- Availability: 1.4.0
------------------------------------------------------------------------
-CREATEFUNCTION populate_geometry_columns(tbl_oid oid)
-  RETURNS integer AS
-$$
-DECLARE
-    gcs         RECORD;
-    gc          RECORD;
-    gsrid       integer;
-    gndims      integer;
-    gtype       text;
-    query       text;
-    gc_is_valid boolean;
-    inserted    integer;
-    
-BEGIN
-    inserted := 0;
-    
-    -- Iterate through all geometry columns in this table
-    FOR gcs IN 
-        SELECT n.nspname, c.relname, a.attname
-            FROM pg_class c, 
-                 pg_attribute a, 
-                 pg_type t, 
-                 pg_namespace n
-            WHERE c.relkind = 'r'
-            AND t.typname = 'geometry'
-            AND a.attisdropped = false
-            AND a.atttypid = t.oid
-            AND a.attrelid = c.oid
-            AND c.relnamespace = n.oid
-	    AND n.nspname NOT ILIKE 'pg_temp%'
-            AND c.oid = tbl_oid
-        LOOP
-        
-        RAISE DEBUG 'Processing table %.%.%', gcs.nspname, gcs.relname, gcs.attname;
-
-        DELETE FROM geometry_columns 
-          WHERE f_table_schema = quote_ident(gcs.nspname) 
-          AND f_table_name = quote_ident(gcs.relname)
-          AND f_geometry_column = quote_ident(gcs.attname);
-        
-        gc_is_valid := true;
-        
-        -- Try to find srid check from system tables (pg_constraint)
-        gsrid := 
-            (SELECT replace(replace(split_part(s.consrc, ' = ', 2), ')', ''), '(', '') 
-             FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s 
-             WHERE n.nspname = gcs.nspname 
-             AND c.relname = gcs.relname 
-             AND a.attname = gcs.attname 
-             AND a.attrelid = c.oid
-             AND s.connamespace = n.oid
-             AND s.conrelid = c.oid
-             AND a.attnum = ANY (s.conkey)
-             AND s.consrc LIKE '%srid(% = %');
-        IF (gsrid IS NULL) THEN 
-            -- Try to find srid from the geometry itself
-            EXECUTE 'SELECT public.srid(' || quote_ident(gcs.attname) || ') 
-                     FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gsrid := gc.srid;
-            
-            -- Try to apply srid check to column
-            IF (gsrid IS NOT NULL) THEN
-                BEGIN
-                    EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                             ADD CONSTRAINT ' || quote_ident('enforce_srid_' || gcs.attname) || ' 
-                             CHECK (srid(' || quote_ident(gcs.attname) || ') = ' || gsrid || ')';
-                EXCEPTION
-                    WHEN check_violation THEN
-                        RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not apply constraint CHECK (srid(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gsrid;
-                        gc_is_valid := false;
-                END;
-            END IF;
-        END IF;
-        
-        -- Try to find ndims check from system tables (pg_constraint)
-        gndims := 
-            (SELECT replace(split_part(s.consrc, ' = ', 2), ')', '') 
-             FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s 
-             WHERE n.nspname = gcs.nspname 
-             AND c.relname = gcs.relname 
-             AND a.attname = gcs.attname 
-             AND a.attrelid = c.oid
-             AND s.connamespace = n.oid
-             AND s.conrelid = c.oid
-             AND a.attnum = ANY (s.conkey)
-             AND s.consrc LIKE '%ndims(% = %');
-        IF (gndims IS NULL) THEN
-            -- Try to find ndims from the geometry itself
-            EXECUTE 'SELECT public.ndims(' || quote_ident(gcs.attname) || ') 
-                     FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gndims := gc.ndims;
-            
-            -- Try to apply ndims check to column
-            IF (gndims IS NOT NULL) THEN
-                BEGIN
-                    EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                             ADD CONSTRAINT ' || quote_ident('enforce_dims_' || gcs.attname) || ' 
-                             CHECK (ndims(' || quote_ident(gcs.attname) || ') = '||gndims||')';
-                EXCEPTION
-                    WHEN check_violation THEN
-                        RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not apply constraint CHECK (ndims(%) = %)', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname), quote_ident(gcs.attname), gndims;
-                        gc_is_valid := false;
-                END;
-            END IF;
-        END IF;
-        
-        -- Try to find geotype check from system tables (pg_constraint)
-        gtype := 
-            (SELECT replace(split_part(s.consrc, '''', 2), ')', '') 
-             FROM pg_class c, pg_namespace n, pg_attribute a, pg_constraint s 
-             WHERE n.nspname = gcs.nspname 
-             AND c.relname = gcs.relname 
-             AND a.attname = gcs.attname 
-             AND a.attrelid = c.oid
-             AND s.connamespace = n.oid
-             AND s.conrelid = c.oid
-             AND a.attnum = ANY (s.conkey)
-             AND s.consrc LIKE '%geometrytype(% = %');
-        IF (gtype IS NULL) THEN
-            -- Try to find geotype from the geometry itself
-            EXECUTE 'SELECT public.geometrytype(' || quote_ident(gcs.attname) || ') 
-                     FROM ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gtype := gc.geometrytype;
-            --IF (gtype IS NULL) THEN
-            --    gtype := 'GEOMETRY';
-            --END IF;
-            
-            -- Try to apply geometrytype check to column
-            IF (gtype IS NOT NULL) THEN
-                BEGIN
-                    EXECUTE 'ALTER TABLE ONLY ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                    ADD CONSTRAINT ' || quote_ident('enforce_geotype_' || gcs.attname) || ' 
-                    CHECK ((geometrytype(' || quote_ident(gcs.attname) || ') = ' || quote_literal(gtype) || ') OR (' || quote_ident(gcs.attname) || ' IS NULL))';
-                EXCEPTION
-                    WHEN check_violation THEN
-                        -- No geometry check can be applied. This column contains a number of geometry types.
-                        RAISE WARNING 'Could not add geometry type check (%) to table column: %.%.%', gtype, quote_ident(gcs.nspname),quote_ident(gcs.relname),quote_ident(gcs.attname);
-                END;
-            END IF;
-        END IF;
-                
-        IF (gsrid IS NULL) THEN             
-            RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine the srid', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-        ELSIF (gndims IS NULL) THEN
-            RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine the number of dimensions', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-        ELSIF (gtype IS NULL) THEN
-            RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine the geometry type', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-        ELSE
-            -- Only insert into geometry_columns if table constraints could be applied.
-            IF (gc_is_valid) THEN
-                INSERT INTO geometry_columns (f_table_catalog,f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) 
-                VALUES ('', gcs.nspname, gcs.relname, gcs.attname, gndims, gsrid, gtype);
-                inserted := inserted + 1;
-            END IF;
-        END IF;
-    END LOOP;
-
-    -- Add views to geometry columns table
-    FOR gcs IN 
-        SELECT n.nspname, c.relname, a.attname
-            FROM pg_class c, 
-                 pg_attribute a, 
-                 pg_type t, 
-                 pg_namespace n
-            WHERE c.relkind = 'v'
-            AND t.typname = 'geometry'
-            AND a.attisdropped = false
-            AND a.atttypid = t.oid
-            AND a.attrelid = c.oid
-            AND c.relnamespace = n.oid
-	    AND n.nspname NOT ILIKE 'pg_temp%'
-            AND c.oid = tbl_oid
-        LOOP            
-            RAISE DEBUG 'Processing view %.%.%', gcs.nspname, gcs.relname, gcs.attname;
-
-            EXECUTE 'SELECT public.ndims(' || quote_ident(gcs.attname) || ') 
-                     FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gndims := gc.ndims;
-            
-            EXECUTE 'SELECT public.srid(' || quote_ident(gcs.attname) || ') 
-                     FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gsrid := gc.srid;
-            
-            EXECUTE 'SELECT public.geometrytype(' || quote_ident(gcs.attname) || ') 
-                     FROM ' || quote_ident(gcs.nspname) || '.' || quote_ident(gcs.relname) || ' 
-                     WHERE ' || quote_ident(gcs.attname) || ' IS NOT NULL LIMIT 1' 
-                INTO gc;
-            gtype := gc.geometrytype;
-            
-	    IF (gndims IS NULL) THEN
-                RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine ndims', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-            ELSIF (gsrid IS NULL) THEN
-                RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine srid', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-            ELSIF (gtype IS NULL) THEN
-                RAISE WARNING 'Not inserting \'%\' in \'%.%\' into geometry_columns: could not determine gtype', quote_ident(gcs.attname), quote_ident(gcs.nspname), quote_ident(gcs.relname);
-            ELSE
-                query := 'INSERT INTO geometry_columns (f_table_catalog,f_table_schema, f_table_name, f_geometry_column, coord_dimension, srid, type) ' ||
-                         'VALUES ('''', ' || quote_literal(gcs.nspname) || ',' || quote_literal(gcs.relname) || ',' || quote_literal(gcs.attname) || ',' || gndims || ',' || gsrid || ',' || quote_literal(gtype) || ')';
-                EXECUTE query;
-                inserted := inserted + 1;
-            END IF;
-    END LOOP;
-    
-    RETURN inserted;
-END
-
-$$
-LANGUAGE 'plpgsql' _VOLATILE;
-
-
------------------------------------------------------------------------
--- PROBE_GEOMETRY_COLUMNS() 
------------------------------------------------------------------------
--- Fill the geometry_columns table with values probed from the system
--- catalogues. This is done by simply looking up constraints previously
--- added to a geometry column. If geometry constraints are missing, no
--- attempt is made to add the necessary constraints to the geometry 
--- column, nor is it recorded in the geometry_columns table.
--- 3d flag cannot be probed, it defaults to 2
---
--- Note that bogus records already in geometry_columns are not
--- overridden (a check for schema.table.column is performed), so
--- to have a fresh probe backup your geometry_column, delete from
--- it and probe.
------------------------------------------------------------------------
-CREATEFUNCTION probe_geometry_columns() RETURNS text AS
-$$
-DECLARE
-	inserted integer;
-	oldcount integer;
-	probed integer;
-	stale integer;
-BEGIN
-
-	SELECT count(*) INTO oldcount FROM geometry_columns;
-
-	SELECT count(*) INTO probed
-		FROM pg_class c, pg_attribute a, pg_type t, 
-			pg_namespace n,
-			pg_constraint sridcheck, pg_constraint typecheck
-
-		WHERE t.typname = 'geometry'
-		AND a.atttypid = t.oid
-		AND a.attrelid = c.oid
-		AND c.relnamespace = n.oid
-		AND sridcheck.connamespace = n.oid
-		AND typecheck.connamespace = n.oid
-		AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE '(srid('||a.attname||') = %)'
-		AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-		'((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))'
-		;
-
-	INSERT INTO geometry_columns SELECT
-		''::varchar as f_table_catalogue,
-		n.nspname::varchar as f_table_schema,
-		c.relname::varchar as f_table_name,
-		a.attname::varchar as f_geometry_column,
-		2 as coord_dimension,
-		trim(both  ' =)' from 
-			replace(replace(split_part(
-				sridcheck.consrc, ' = ', 2), ')', ''), '(', ''))::integer AS srid,
-		trim(both ' =)''' from substr(typecheck.consrc, 
-			strpos(typecheck.consrc, '='),
-			strpos(typecheck.consrc, '::')-
-			strpos(typecheck.consrc, '=')
-			))::varchar as type
-		FROM pg_class c, pg_attribute a, pg_type t, 
-			pg_namespace n,
-			pg_constraint sridcheck, pg_constraint typecheck
-		WHERE t.typname = 'geometry'
-		AND a.atttypid = t.oid
-		AND a.attrelid = c.oid
-		AND c.relnamespace = n.oid
-		AND sridcheck.connamespace = n.oid
-		AND typecheck.connamespace = n.oid
-		AND sridcheck.conrelid = c.oid
-		AND sridcheck.consrc LIKE '(st_srid('||a.attname||') = %)'
-		AND typecheck.conrelid = c.oid
-		AND typecheck.consrc LIKE
-		'((geometrytype('||a.attname||') = ''%''::text) OR (% IS NULL))'
-
-                AND NOT EXISTS (
-                        SELECT oid FROM geometry_columns gc
-                        WHERE c.relname::varchar = gc.f_table_name
-                        AND n.nspname::varchar = gc.f_table_schema
-                        AND a.attname::varchar = gc.f_geometry_column
-                );
-
-	GET DIAGNOSTICS inserted = ROW_COUNT;
-
-	IF oldcount > probed THEN
-		stale = oldcount-probed;
-	ELSE
-		stale = 0;
-	END IF;
-
-        RETURN 'probed:'||probed::text||
-		' inserted:'||inserted::text||
-		' conflicts:'||(probed-inserted)::text||
-		' stale:'||stale::text;
-END
-
-$$
-LANGUAGE 'plpgsql' _VOLATILE;
-
------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN
---   <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim>
------------------------------------------------------------------------
---
--- Type can be one of GEOMETRY, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Geometry types (except GEOMETRY) are checked for consistency using a CHECK constraint.
--- Uses an ALTER TABLE command to add the geometry column to the table.
--- Addes a row to geometry_columns.
--- Addes a constraint on the table that all the geometries MUST have the same 
--- SRID. Checks the coord_dimension to make sure its between 0 and 3.
--- Should also check the precision grid (future expansion).
---
------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	catalog_name alias for $1;
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	new_srid alias for $5;
-	new_type alias for $6;
-	new_dim alias for $7;
-	rec RECORD;
-	sr varchar;
-	real_schema name;
-	sql text;
-
-BEGIN
-
-	-- Verify geometry type
-	IF ( NOT ( (new_type = 'GEOMETRY') OR
-			   (new_type = 'GEOMETRYCOLLECTION') OR
-			   (new_type = 'POINT') OR
-			   (new_type = 'MULTIPOINT') OR
-			   (new_type = 'POLYGON') OR
-			   (new_type = 'MULTIPOLYGON') OR
-			   (new_type = 'LINESTRING') OR
-			   (new_type = 'MULTILINESTRING') OR
-			   (new_type = 'GEOMETRYCOLLECTIONM') OR
-			   (new_type = 'POINTM') OR
-			   (new_type = 'MULTIPOINTM') OR
-			   (new_type = 'POLYGONM') OR
-			   (new_type = 'MULTIPOLYGONM') OR
-			   (new_type = 'LINESTRINGM') OR
-			   (new_type = 'MULTILINESTRINGM') OR
-			   (new_type = 'CIRCULARSTRING') OR
-			   (new_type = 'CIRCULARSTRINGM') OR
-			   (new_type = 'COMPOUNDCURVE') OR
-			   (new_type = 'COMPOUNDCURVEM') OR
-			   (new_type = 'CURVEPOLYGON') OR
-			   (new_type = 'CURVEPOLYGONM') OR
-			   (new_type = 'MULTICURVE') OR
-			   (new_type = 'MULTICURVEM') OR
-			   (new_type = 'MULTISURFACE') OR
-			   (new_type = 'MULTISURFACEM')) )
-	THEN
-		RAISE EXCEPTION 'Invalid type name - valid ones are:
-	POINT, MULTIPOINT,
-	LINESTRING, MULTILINESTRING,
-	POLYGON, MULTIPOLYGON,
-	CIRCULARSTRING, COMPOUNDCURVE, MULTICURVE,
-	CURVEPOLYGON, MULTISURFACE,
-	GEOMETRY, GEOMETRYCOLLECTION,
-	POINTM, MULTIPOINTM,
-	LINESTRINGM, MULTILINESTRINGM,
-	POLYGONM, MULTIPOLYGONM,
-	CIRCULARSTRINGM, COMPOUNDCURVEM, MULTICURVEM
-	CURVEPOLYGONM, MULTISURFACEM,
-	or GEOMETRYCOLLECTIONM';
-		RETURN 'fail';
-	END IF;
-
-
-	-- Verify dimension
-	IF ( (new_dim >4) OR (new_dim <0) ) THEN
-		RAISE EXCEPTION 'invalid dimension';
-		RETURN 'fail';
-	END IF;
-
-	IF ( (new_type LIKE '%M') AND (new_dim!=3) ) THEN
-		RAISE EXCEPTION 'TypeM needs 3 dimensions';
-		RETURN 'fail';
-	END IF;
-
-
-	-- Verify SRID
-	IF ( new_srid != -1 ) THEN
-		SELECT SRID INTO sr FROM spatial_ref_sys WHERE SRID = new_srid;
-		IF NOT FOUND THEN
-			RAISE EXCEPTION 'AddGeometryColumns() - invalid SRID';
-			RETURN 'fail';
-		END IF;
-	END IF;
-
-
-	-- Verify schema
-	IF ( schema_name IS NOT NULL AND schema_name != '' ) THEN
-		sql := 'SELECT nspname FROM pg_namespace ' ||
-			'WHERE text(nspname) = ' || quote_literal(schema_name) ||
-			'LIMIT 1';
-		RAISE DEBUG '%', sql;
-		EXECUTE sql INTO real_schema;
-
-		IF ( real_schema IS NULL ) THEN
-			RAISE EXCEPTION 'Schema % is not a valid schemaname', quote_literal(schema_name);
-			RETURN 'fail';
-		END IF;
-	END IF;
-
-	IF ( real_schema IS NULL ) THEN
-		RAISE DEBUG 'Detecting schema';
-		sql := 'SELECT n.nspname AS schemaname ' ||
-			'FROM pg_catalog.pg_class c ' ||
-			  'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' ||
-			'WHERE c.relkind = ' || quote_literal('r') ||
-			' AND n.nspname NOT IN (' || quote_literal('pg_catalog') || ', ' || quote_literal('pg_toast') || ')' ||
-			' AND pg_catalog.pg_table_is_visible(c.oid)' ||
-			' AND c.relname = ' || quote_literal(table_name);
-		RAISE DEBUG '%', sql;
-		EXECUTE sql INTO real_schema;
-
-		IF ( real_schema IS NULL ) THEN
-			RAISE EXCEPTION 'Table % does not occur in the search_path', quote_literal(table_name);
-			RETURN 'fail';
-		END IF;
-	END IF;
-	
-
-	-- Add geometry column to table
-	sql := 'ALTER TABLE ' ||
-		quote_ident(real_schema) || '.' || quote_ident(table_name)
-		|| ' ADD COLUMN ' || quote_ident(column_name) ||
-		' geometry ';
-	RAISE DEBUG '%', sql;
-	EXECUTE sql;
-
-
-	-- Delete stale record in geometry_column (if any)
-	sql := 'DELETE FROM geometry_columns WHERE
-		f_table_catalog = ' || quote_literal('') ||
-		' AND f_table_schema = ' ||
-		quote_literal(real_schema) ||
-		' AND f_table_name = ' || quote_literal(table_name) ||
-		' AND f_geometry_column = ' || quote_literal(column_name);
-	RAISE DEBUG '%', sql;
-	EXECUTE sql;
-
-
-	-- Add record in geometry_column
-	sql := 'INSERT INTO geometry_columns (f_table_catalog,f_table_schema,f_table_name,' ||
-										  'f_geometry_column,coord_dimension,srid,type)' ||
-		' VALUES (' ||
-		quote_literal('') || ',' ||
-		quote_literal(real_schema) || ',' ||
-		quote_literal(table_name) || ',' ||
-		quote_literal(column_name) || ',' ||
-		new_dim::text || ',' ||
-		new_srid::text || ',' ||
-		quote_literal(new_type) || ')';
-	RAISE DEBUG '%', sql;
-	EXECUTE sql;
-
-
-	-- Add table CHECKs
-	sql := 'ALTER TABLE ' ||
-		quote_ident(real_schema) || '.' || quote_ident(table_name)
-		|| ' ADD CONSTRAINT '
-		|| quote_ident('enforce_srid_' || column_name)
-		|| ' CHECK (ST_SRID(' || quote_ident(column_name) ||
-		') = ' || new_srid::text || ')' ;
-	RAISE DEBUG '%', sql;
-	EXECUTE sql;
-
-	sql := 'ALTER TABLE ' ||
-		quote_ident(real_schema) || '.' || quote_ident(table_name)
-		|| ' ADD CONSTRAINT '
-		|| quote_ident('enforce_dims_' || column_name)
-		|| ' CHECK (ST_NDims(' || quote_ident(column_name) ||
-		') = ' || new_dim::text || ')' ;
-	RAISE DEBUG '%', sql;
-	EXECUTE sql;
-
-	IF ( NOT (new_type = 'GEOMETRY')) THEN
-		sql := 'ALTER TABLE ' ||
-			quote_ident(real_schema) || '.' || quote_ident(table_name) || ' ADD CONSTRAINT ' ||
-			quote_ident('enforce_geotype_' || column_name) ||
-			' CHECK (GeometryType(' ||
-			quote_ident(column_name) || ')=' ||
-			quote_literal(new_type) || ' OR (' ||
-			quote_ident(column_name) || ') is null)';
-		RAISE DEBUG '%', sql;
-		EXECUTE sql;
-	END IF;
-
-	RETURN
-		real_schema || '.' ||
-		table_name || '.' || column_name ||
-		' SRID:' || new_srid::text ||
-		' TYPE:' || new_type ||
-		' DIMS:' || new_dim::text || ' ';
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
-----------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
-----------------------------------------------------------------------------
---
--- This is a wrapper to the real AddGeometryColumn, for use
--- when catalogue is undefined
---
-----------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS $$ 
-DECLARE
-	ret  text;
-BEGIN
-	SELECT AddGeometryColumn('',$1,$2,$3,$4,$5,$6) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _STABLE_STRICT; -- WITH (isstrict);
-
-----------------------------------------------------------------------------
--- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> )
-----------------------------------------------------------------------------
---
--- This is a wrapper to the real AddGeometryColumn, for use
--- when catalogue and schema are undefined
---
-----------------------------------------------------------------------------
-CREATEFUNCTION AddGeometryColumn(varchar,varchar,integer,varchar,integer) RETURNS text AS $$ 
-DECLARE
-	ret  text;
-BEGIN
-	SELECT AddGeometryColumn('','',$1,$2,$3,$4,$5) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <catalogue>, <schema>, <table>, <column>
------------------------------------------------------------------------
---
--- Removes geometry column reference from geometry_columns table.
--- Drops the column with pgsql >= 73.
--- Make some silly enforcements on it for pgsql < 73
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	myrec RECORD;
-	okay boolean;
-	real_schema name;
-
-BEGIN
-
-
-	-- Find, check or fix schema_name
-	IF ( schema_name != '' ) THEN
-		okay = 'f';
-
-		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-			okay := 't';
-		END LOOP;
-
-		IF ( okay <> 't' ) THEN
-			RAISE NOTICE 'Invalid schema name - using current_schema()';
-			SELECT current_schema() into real_schema;
-		ELSE
-			real_schema = schema_name;
-		END IF;
-	ELSE
-		SELECT current_schema() into real_schema;
-	END IF;
-
- 	-- Find out if the column is in the geometry_columns table
-	okay = 'f';
-	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
-		okay := 't';
-	END LOOP; 
-	IF (okay <> 't') THEN 
-		RAISE EXCEPTION 'column not found in geometry_columns table';
-		RETURN 'f';
-	END IF;
-
-	-- Remove ref from geometry_columns table
-	EXECUTE 'delete from geometry_columns where f_table_schema = ' ||
-		quote_literal(real_schema) || ' and f_table_name = ' ||
-		quote_literal(table_name)  || ' and f_geometry_column = ' ||
-		quote_literal(column_name);
-	
-	-- Remove table column
-	EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) || '.' ||
-		quote_ident(table_name) || ' DROP COLUMN ' ||
-		quote_ident(column_name);
-
-	RETURN real_schema || '.' || table_name || '.' || column_name ||' effectively removed.';
-	
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <schema>, <table>, <column>
------------------------------------------------------------------------
---
--- This is a wrapper to the real DropGeometryColumn, for use
--- when catalogue is undefined
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar,varchar,varchar)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	ret text;
-BEGIN
-	SELECT DropGeometryColumn('',$1,$2,$3) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYCOLUMN
---   <table>, <column>
------------------------------------------------------------------------
---
--- This is a wrapper to the real DropGeometryColumn, for use
--- when catalogue and schema is undefined. 
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryColumn(varchar,varchar)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	ret text;
-BEGIN
-	SELECT DropGeometryColumn('','',$1,$2) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <catalogue>, <schema>, <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar, varchar,varchar)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	real_schema name;
-
-BEGIN
-
-	IF ( schema_name = '' ) THEN
-		SELECT current_schema() into real_schema;
-	ELSE
-		real_schema = schema_name;
-	END IF;
-
-	-- Remove refs from geometry_columns table
-	EXECUTE 'DELETE FROM geometry_columns WHERE ' ||
-		'f_table_schema = ' || quote_literal(real_schema) ||
-		' AND ' ||
-		' f_table_name = ' || quote_literal(table_name);
-	
-	-- Remove table 
-	EXECUTE 'DROP TABLE '
-		|| quote_ident(real_schema) || '.' ||
-		quote_ident(table_name);
-
-	RETURN
-		real_schema || '.' ||
-		table_name ||' dropped.';
-	
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <schema>, <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar,varchar) RETURNS text AS 
-$$ SELECT DropGeometryTable('',$1,$2) $$ 
-LANGUAGE 'sql' WITH (isstrict);
-
------------------------------------------------------------------------
--- DROPGEOMETRYTABLE
---   <table>
------------------------------------------------------------------------
---
--- Drop a table and all its references in geometry_columns
--- For PG>=73 use current_schema()
---
------------------------------------------------------------------------
-CREATEFUNCTION DropGeometryTable(varchar) RETURNS text AS 
-$$ SELECT DropGeometryTable('','',$1) $$
-LANGUAGE 'sql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <catalogue>, <schema>, <table>, <column>, <srid>
------------------------------------------------------------------------
---
--- Change SRID of all features in a spatially-enabled table
---
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,varchar,integer)
-	RETURNS text
-	AS 
-$$
-DECLARE
-	catalog_name alias for $1; 
-	schema_name alias for $2;
-	table_name alias for $3;
-	column_name alias for $4;
-	new_srid alias for $5;
-	myrec RECORD;
-	okay boolean;
-	cname varchar;
-	real_schema name;
-
-BEGIN
-
-
-	-- Find, check or fix schema_name
-	IF ( schema_name != '' ) THEN
-		okay = 'f';
-
-		FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-			okay := 't';
-		END LOOP;
-
-		IF ( okay <> 't' ) THEN
-			RAISE EXCEPTION 'Invalid schema name';
-		ELSE
-			real_schema = schema_name;
-		END IF;
-	ELSE
-		SELECT INTO real_schema current_schema()::text;
-	END IF;
-
- 	-- Find out if the column is in the geometry_columns table
-	okay = 'f';
-	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
-		okay := 't';
-	END LOOP; 
-	IF (okay <> 't') THEN 
-		RAISE EXCEPTION 'column not found in geometry_columns table';
-		RETURN 'f';
-	END IF;
-
-	-- Update ref from geometry_columns table
-	EXECUTE 'UPDATE geometry_columns SET SRID = ' || new_srid::text || 
-		' where f_table_schema = ' ||
-		quote_literal(real_schema) || ' and f_table_name = ' ||
-		quote_literal(table_name)  || ' and f_geometry_column = ' ||
-		quote_literal(column_name);
-	
-	-- Make up constraint name
-	cname = 'enforce_srid_'  || column_name;
-
-	-- Drop enforce_srid constraint
-	EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) ||
-		'.' || quote_ident(table_name) ||
-		' DROP constraint ' || quote_ident(cname);
-
-	-- Update geometries SRID
-	EXECUTE 'UPDATE ' || quote_ident(real_schema) ||
-		'.' || quote_ident(table_name) ||
-		' SET ' || quote_ident(column_name) ||
-		' = setSRID(' || quote_ident(column_name) ||
-		', ' || new_srid::text || ')';
-
-	-- Reset enforce_srid constraint
-	EXECUTE 'ALTER TABLE ' || quote_ident(real_schema) ||
-		'.' || quote_ident(table_name) ||
-		' ADD constraint ' || quote_ident(cname) ||
-		' CHECK (srid(' || quote_ident(column_name) ||
-		') = ' || new_srid::text || ')';
-
-	RETURN real_schema || '.' || table_name || '.' || column_name ||' SRID changed to ' || new_srid::text;
-	
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <schema>, <table>, <column>, <srid>
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,varchar,integer)
-	RETURNS text
-	AS $$ 
-DECLARE
-	ret  text;
-BEGIN
-	SELECT UpdateGeometrySRID('',$1,$2,$3,$4) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- UPDATEGEOMETRYSRID
---   <table>, <column>, <srid>
------------------------------------------------------------------------
-CREATEFUNCTION UpdateGeometrySRID(varchar,varchar,integer)
-	RETURNS text
-	AS $$ 
-DECLARE
-	ret  text;
-BEGIN
-	SELECT UpdateGeometrySRID('','',$1,$2,$3) into ret;
-	RETURN ret;
-END;
-$$
-LANGUAGE 'plpgsql' _VOLATILE_STRICT; -- WITH (isstrict);
-
------------------------------------------------------------------------
--- FIND_SRID( <schema>, <table>, <geom col> )
------------------------------------------------------------------------
-CREATEFUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS
-$$
-DECLARE
-   schem text;
-   tabl text;
-   sr int4;
-BEGIN
-   IF $1 IS NULL THEN
-      RAISE EXCEPTION 'find_srid() - schema is NULL!';
-   END IF;
-   IF $2 IS NULL THEN
-      RAISE EXCEPTION 'find_srid() - table name is NULL!';
-   END IF;
-   IF $3 IS NULL THEN
-      RAISE EXCEPTION 'find_srid() - column name is NULL!';
-   END IF;
-   schem = $1;
-   tabl = $2;
--- if the table contains a . and the schema is empty
--- split the table into a schema and a table
--- otherwise drop through to default behavior
-   IF ( schem = '' and tabl LIKE '%.%' ) THEN
-     schem = substr(tabl,1,strpos(tabl,'.')-1);
-     tabl = substr(tabl,length(schem)+2);
-   ELSE
-     schem = schem || '%';
-   END IF;
-
-   select SRID into sr from geometry_columns where f_table_schema like schem and f_table_name = tabl and f_geometry_column = $3;
-   IF NOT FOUND THEN
-       RAISE EXCEPTION 'find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table?  Is there an uppercase/lowercase missmatch?';
-   END IF;
-  return sr;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable); 
-
-
----------------------------------------------------------------
--- PROJ support
----------------------------------------------------------------
-
-CREATEFUNCTION get_proj4_from_srid(integer) RETURNS text AS
-$$
-BEGIN
-	RETURN proj4text::text FROM spatial_ref_sys WHERE srid= $1;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
-
-
-
-CREATEFUNCTION transform_geometry(geometry,text,text,int)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','transform_geom'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATEFUNCTION transform(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','transform'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: transform(geometry,integer)
-CREATEFUNCTION ST_Transform(geometry,integer)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','transform'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
------------------------------------------------------------------------
--- POSTGIS_VERSION()
------------------------------------------------------------------------
-
-CREATEFUNCTION postgis_version() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_proj_version() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
---
--- IMPORTANT:
--- Starting at 1.1.0 this function is used by postgis_proc_upgrade.pl
--- to extract version of postgis being installed.
--- Do not modify this w/out also changing postgis_proc_upgrade.pl
---
-CREATEFUNCTION postgis_scripts_installed() RETURNS text
-        AS _POSTGIS_SQL_SELECT_POSTGIS_SCRIPTS_VERSION 
-        LANGUAGE 'sql' _IMMUTABLE;
-
-CREATEFUNCTION postgis_lib_version() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE; -- a new lib will require a new session
-
--- NOTE: starting at 1.1.0 this is the same of postgis_lib_version()
-CREATEFUNCTION postgis_scripts_released() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_uses_stats() RETURNS bool
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_geos_version() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
-CREATEFUNCTION postgis_scripts_build_date() RETURNS text
-        AS _POSTGIS_SQL_SELECT_POSTGIS_BUILD_DATE
-        LANGUAGE 'sql' _IMMUTABLE;
-
-CREATEFUNCTION postgis_lib_build_date() RETURNS text
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE;
-
-
-
-CREATEFUNCTION postgis_full_version() RETURNS text
-AS $$ 
-DECLARE
-	libver text;
-	projver text;
-	geosver text;
-	usestats bool;
-	dbproc text;
-	relproc text;
-	fullver text;
-BEGIN
-	SELECT postgis_lib_version() INTO libver;
-	SELECT postgis_proj_version() INTO projver;
-	SELECT postgis_geos_version() INTO geosver;
-	SELECT postgis_uses_stats() INTO usestats;
-	SELECT postgis_scripts_installed() INTO dbproc;
-	SELECT postgis_scripts_released() INTO relproc;
-
-	fullver = 'POSTGIS="' || libver || '"';
-
-	IF  geosver IS NOT NULL THEN
-		fullver = fullver || ' GEOS="' || geosver || '"';
-	END IF;
-
-	IF  projver IS NOT NULL THEN
-		fullver = fullver || ' PROJ="' || projver || '"';
-	END IF;
-
-	IF usestats THEN
-		fullver = fullver || ' USE_STATS';
-	END IF;
-
-	-- fullver = fullver || ' DBPROC="' || dbproc || '"';
-	-- fullver = fullver || ' RELPROC="' || relproc || '"';
-
-	IF dbproc != relproc THEN
-		fullver = fullver || ' (procs from ' || dbproc || ' need upgrade)';
-	END IF;
-
-	RETURN fullver;
-END
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE;
-
----------------------------------------------------------------
--- CASTS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d(geometry)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d(geometry)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d(geometry)
-        RETURNS box3d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d(geometry)
-        RETURNS box3d
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box(geometry)
-        RETURNS box
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box(geometry)
-        RETURNS box
-        AS 'MODULE_PATHNAME','LWGEOM_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box2d(box3d)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','BOX3D_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box2d(box3d)
-        RETURNS box2d
-        AS 'MODULE_PATHNAME','BOX3D_to_BOX2DFLOAT4'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box3d(box2d)
-        RETURNS box3d
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box3d(box2d)
-        RETURNS box3d
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_BOX3D'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION box(box3d)
-        RETURNS box
-        AS 'MODULE_PATHNAME','BOX3D_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_box(box3d)
-        RETURNS box
-        AS 'MODULE_PATHNAME','BOX3D_to_BOX'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION text(geometry)
-        RETURNS text
-        AS 'MODULE_PATHNAME','LWGEOM_to_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_text(geometry)
-        RETURNS text
-        AS 'MODULE_PATHNAME','LWGEOM_to_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- this is kept for backward-compatibility
--- Deprecation in 1.2.3
-CREATEFUNCTION box3dtobox(box3d)
-        RETURNS box
-        AS 'SELECT box($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(box2d)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(box2d)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','BOX2DFLOAT4_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(box3d)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(box3d)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','BOX3D_to_LWGEOM'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(text)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(text)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','parse_WKT_lwgeom'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(chip)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','CHIP_to_LWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(chip)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','CHIP_to_LWGEOM'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geometry(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_from_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geometry(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_from_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION bytea(geometry)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_to_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_bytea(geometry)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_to_bytea'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION text(bool)
-	RETURNS text
-	AS 'MODULE_PATHNAME','BOOL_to_text'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_text(bool)
-	RETURNS text
-	AS 'MODULE_PATHNAME','BOOL_to_text'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- 7.3+ explicit casting definitions
-CREATE CAST (geometry AS box2d) WITH FUNCTION ST_box2d(geometry) AS IMPLICIT;
-CREATE CAST (geometry AS box3d) WITH FUNCTION ST_box3d(geometry) AS IMPLICIT;
-CREATE CAST (geometry AS box) WITH FUNCTION ST_box(geometry) AS IMPLICIT;
-CREATE CAST (box3d AS box2d) WITH FUNCTION ST_box2d(box3d) AS IMPLICIT;
-CREATE CAST (box2d AS box3d) WITH FUNCTION ST_box3d(box2d) AS IMPLICIT;
-CREATE CAST (box2d AS geometry) WITH FUNCTION ST_geometry(box2d) AS IMPLICIT;
-CREATE CAST (box3d AS box) WITH FUNCTION ST_box(box3d) AS IMPLICIT;
-CREATE CAST (box3d AS geometry) WITH FUNCTION ST_geometry(box3d) AS IMPLICIT;
-CREATE CAST (text AS geometry) WITH FUNCTION ST_geometry(text) AS IMPLICIT;
-CREATE CAST (geometry AS text) WITH FUNCTION ST_text(geometry) AS IMPLICIT;
-CREATE CAST (chip AS geometry) WITH FUNCTION ST_geometry(chip) AS IMPLICIT;
-CREATE CAST (bytea AS geometry) WITH FUNCTION ST_geometry(bytea) AS IMPLICIT;
-CREATE CAST (geometry AS bytea) WITH FUNCTION ST_bytea(geometry) AS IMPLICIT;
-
----------------------------------------------------------------
--- Algorithms
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Simplify(geometry, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Simplify(geometry, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_simplify2d'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, xoff, yoff, xsize, ysize)
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, xsize, ysize) # offsets=0
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $3)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8, float8)
-   RETURNS geometry
-   AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $3)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, size) # xsize=ysize=size, offsets=0
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, float8)
-   RETURNS geometry
-   AS 'SELECT SnapToGrid($1, 0, 0, $2, $2)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, float8)
-   RETURNS geometry
-   AS 'SELECT ST_SnapToGrid($1, 0, 0, $2, $2)'
-   LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- SnapToGrid(input, point_offsets, xsize, ysize, zsize, msize)
--- Deprecation in 1.2.3
-CREATEFUNCTION SnapToGrid(geometry, geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SnapToGrid(geometry, geometry, float8, float8, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_snaptogrid_pointoff'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Segmentize(geometry, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Segmentize(geometry, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_segmentize2d'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
----------------------------------------------------------------
--- LRS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_interpolate_point(geometry, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_interpolate_point(geometry, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_interpolate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_substring(geometry, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_substring'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_substring(geometry, float8, float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_substring'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION line_locate_point(geometry, geometry)
-   RETURNS float8
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_line_locate_point(geometry, geometry)
-   RETURNS float8
-   AS 'MODULE_PATHNAME', 'LWGEOM_line_locate_point'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION locate_between_measures(geometry, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_locate_between_measures(geometry, float8, float8)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_locate_between_m'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATEFUNCTION locate_along_measure(geometry, float8)
-	RETURNS geometry
-	AS $$ SELECT locate_between_measures($1, $2, $2) $$
-	LANGUAGE 'sql' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_locate_along_measure(geometry, float8)
-	RETURNS geometry
-	AS $$ SELECT locate_between_measures($1, $2, $2) $$
-	LANGUAGE 'sql' _IMMUTABLE_STRICT;
-
----------------------------------------------------------------
--- GEOS
----------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION intersection(geometry,geometry)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME','intersection'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: intersection(geometry,geometry)
-CREATEFUNCTION ST_Intersection(geometry,geometry)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','intersection'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION buffer(geometry,float8)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: buffer(geometry,float8)
-CREATEFUNCTION ST_Buffer(geometry,float8)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','buffer'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION buffer(geometry,float8,integer)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_buffer(geometry,float8,integer)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME','buffer'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-   
--- Deprecation in 1.2.3
-CREATEFUNCTION convexhull(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','convexhull'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: convexhull(geometry)
-CREATEFUNCTION ST_ConvexHull(geometry)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','convexhull'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Only accepts LINESTRING as parameters.
--- Availability: 1.4.0
-CREATEFUNCTION _ST_LineCrossingDirection(geometry, geometry)
-    RETURNS integer
-    AS 'MODULE_PATHNAME', 'ST_LineCrossingDirection'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.4.0
-CREATE OR REPLACE FUNCTION ST_LineCrossingDirection(geometry, geometry)
-  RETURNS integer AS 
-  $$ SELECT CASE WHEN NOT $1 && $2 THEN 0 ELSE _ST_LineCrossingDirection($1,$2) END $$
-  LANGUAGE 'sql' IMMUTABLE;
-
-
--- Only accepts LINESTRING as parameters.
--- Availability: 1.4.0
-CREATEFUNCTION ST_LocateBetweenElevations(geometry, float8, float8)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME', 'ST_LocateBetweenElevations'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-#if POSTGIS_GEOS_VERSION >= 30
--- Requires GEOS >= 3.0.0
--- Availability: 1.3.3
-CREATEFUNCTION ST_SimplifyPreserveTopology(geometry, float8)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','topologypreservesimplify'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-#endif
-
-#if POSTGIS_GEOS_VERSION >= 31
--- Requires GEOS >= 3.1.0
--- Availability: 1.4.0
-CREATEFUNCTION ST_IsValidReason(geometry)
-    RETURNS text
-    AS 'MODULE_PATHNAME', 'isvalidreason'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION difference(geometry,geometry)
-	RETURNS geometry
-        AS 'MODULE_PATHNAME','difference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: difference(geometry,geometry)
-CREATEFUNCTION ST_Difference(geometry,geometry)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','difference'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION boundary(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','boundary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: boundary(geometry)
-CREATEFUNCTION ST_Boundary(geometry)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','boundary'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION symdifference(geometry,geometry)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','symdifference'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: symdifference(geometry,geometry)
-CREATEFUNCTION ST_SymDifference(geometry,geometry)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','symdifference'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION symmetricdifference(geometry,geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','symdifference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_symmetricdifference(geometry,geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','symdifference'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomUnion(geometry,geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','geomunion'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: GeomUnion(geometry,geometry)
-CREATEFUNCTION ST_Union(geometry,geometry)
-    RETURNS geometry
-    AS 'MODULE_PATHNAME','geomunion'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE MemGeomUnion (
-	basetype = geometry,
-	sfunc = geomunion,
-	stype = geometry
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_MemUnion (
-	basetype = geometry,
-	sfunc = ST_union,
-	stype = geometry
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION unite_garray (geometry[])
-	RETURNS geometry
-        AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_unite_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','unite_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE GeomUnion (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_unite_garray
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Union (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_unite_garray
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION relate(geometry,geometry)
-   RETURNS text
-   AS 'MODULE_PATHNAME','relate_full'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_relate(geometry,geometry)
-   RETURNS text
-   AS 'MODULE_PATHNAME','relate_full'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION relate(geometry,geometry,text)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME','relate_pattern'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: relate(geometry,geometry,text)
-CREATEFUNCTION ST_Relate(geometry,geometry,text)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','relate_pattern'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION disjoint(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-   
--- PostGIS equivalent function: disjoint(geometry,geometry)
-CREATEFUNCTION ST_Disjoint(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','disjoint'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION touches(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: touches(geometry,geometry)
-CREATEFUNCTION _ST_Touches(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','touches'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Touches(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Touches($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Availability: 1.3.4
-CREATEFUNCTION _ST_DWithin(geometry,geometry,float8)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME', 'LWGEOM_dwithin'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_DWithin(geometry, geometry, float8)
-    RETURNS boolean
-    AS 'SELECT $1 && ST_Expand($2,$3) AND $2 && ST_Expand($1,$3) AND _ST_DWithin($1, $2, $3)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION intersects(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: intersects(geometry,geometry)
-CREATEFUNCTION _ST_Intersects(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','intersects'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Intersects(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Intersects($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
--- Deprecation in 1.2.3
-CREATEFUNCTION crosses(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: crosses(geometry,geometry)
-CREATEFUNCTION _ST_Crosses(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','crosses'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Crosses(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Crosses($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION within(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: within(geometry,geometry)
-CREATEFUNCTION _ST_Within(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','within'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Within(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Within($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Contains(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: contains(geometry,geometry)
-CREATEFUNCTION _ST_Contains(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','contains'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Contains(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Contains($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
-#if POSTGIS_GEOS_VERSION >= 30
--- Availability: 1.2.2
-CREATEFUNCTION _ST_CoveredBy(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME', 'coveredby'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_CoveredBy(geometry,geometry)
-   RETURNS boolean
-   AS 'SELECT $1 && $2 AND _ST_CoveredBy($1,$2)'
-   LANGUAGE 'SQL' _IMMUTABLE; -- WITH(iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION _ST_Covers(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME', 'covers'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Covers(geometry,geometry)
-   RETURNS boolean
-   AS 'SELECT $1 && $2 AND _ST_Covers($1,$2)'
-   LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-#endif
-
-#if POSTGIS_GEOS_VERSION >= 31
--- Availability: 1.4.0
-CREATEFUNCTION _ST_ContainsProperly(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','containsproperly'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.4.0
--- Inlines index magic
-CREATEFUNCTION ST_ContainsProperly(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_ContainsProperly($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-#endif
-
--- Deprecation in 1.2.3
-CREATEFUNCTION overlaps(geometry,geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: overlaps(geometry,geometry)
-CREATEFUNCTION _ST_Overlaps(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','overlaps'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
--- Inlines index magic
-CREATEFUNCTION ST_Overlaps(geometry,geometry)
-    RETURNS boolean
-    AS 'SELECT $1 && $2 AND _ST_Overlaps($1,$2)'
-    LANGUAGE 'SQL' _IMMUTABLE; -- WITH (iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsValid(geometry)
-   RETURNS boolean
-   AS 'MODULE_PATHNAME', 'isvalid'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsValid(geometry)
--- TODO: change null returns to true
-CREATEFUNCTION ST_IsValid(geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME', 'isvalid'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GEOSnoop(geometry)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'GEOSnoop'
-   LANGUAGE 'C' _VOLATILE_STRICT; -- WITH (isstrict,iscachable);
-
--- This is also available w/out GEOS 
-CREATEFUNCTION Centroid(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: Centroid(geometry)
-CREATEFUNCTION ST_Centroid(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'centroid'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsRing(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsRing(geometry)
-CREATEFUNCTION ST_IsRing(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'isring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointOnSurface(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointOnSurface(geometry)
-CREATEFUNCTION ST_PointOnSurface(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'pointonsurface'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsSimple(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'issimple'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: IsSimple(geometry)	
-CREATEFUNCTION ST_IsSimple(geometry)
-        RETURNS boolean
-        AS 'MODULE_PATHNAME', 'issimple'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Equals(geometry,geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME','geomequals'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: Equals(geometry,geometry)
-CREATEFUNCTION ST_Equals(geometry,geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME','geomequals'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- SVG OUTPUT
------------------------------------------------------------------------
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry,int4,int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry,int4,int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry,int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry,int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsSVG(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsSVG(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','assvg_geometry'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- GML OUTPUT
------------------------------------------------------------------------
--- _ST_AsGML(version, geom, precision)
-CREATEFUNCTION _ST_AsGML(int4, geometry, int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asGML'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsGML(geom, precision) / version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsGML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsGML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsGML(geom) / precision=15 version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsGML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availabiltiy: 1.2.2
-CREATEFUNCTION ST_AsGML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML(2, $1, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGML(version, geom) / precision=15 version=2
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsGML(int4, geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML($1, $2, 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGML(version, geom, precision)
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsGML(int4, geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsGML($1, $2, $3)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- KML OUTPUT
------------------------------------------------------------------------
--- _ST_AsKML(version, geom, precision)
-CREATEFUNCTION _ST_AsKML(int4, geometry, int4)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asKML'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsKML(geom, precision) / version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), $2)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsKML(geometry, int4)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, ST_Transform($1,4326), $2)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsKML(geom) / precision=15 version=2
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(geometry) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, transform($1,4326), 15)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- AsKML(version, geom, precision)
--- Deprecation in 1.2.3
-CREATEFUNCTION AsKML(int4, geometry, int4) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, transform($2,4326), $3)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availabiltiy: 1.2.2
-CREATEFUNCTION ST_AsKML(geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML(2, ST_Transform($1,4326), 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsKML(version, geom) / precision=15 version=2
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsKML(int4, geometry)
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, ST_Transform($2,4326), 15)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsKML(version, geom, precision)
--- Availabiltiy: 1.3.2
-CREATEFUNCTION ST_AsKML(int4, geometry, int4) 
-	RETURNS TEXT
-	AS 'SELECT _ST_AsKML($1, ST_Transform($2,4326), $3)' 
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
------------------------------------------------------------------------
--- GEOJSON OUTPUT
--- Availabiltiy: 1.3.4
------------------------------------------------------------------------
--- _ST_AsGeoJson(version, geom, precision, options)
-CREATEFUNCTION _ST_AsGeoJson(int4, geometry, int4, int4)
-        RETURNS TEXT
-        AS 'MODULE_PATHNAME','LWGEOM_asGeoJson'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom, precision) / version=1 options=0
-CREATEFUNCTION ST_AsGeoJson(geometry, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, $2, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom) / precision=15 version=1 options=0
-CREATEFUNCTION ST_AsGeoJson(geometry)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, 15, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom) / precision=15 options=0
-CREATEFUNCTION ST_AsGeoJson(int4, geometry)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, 15, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom, precision) / options=0
-CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, $3, 0)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(geom, precision, options) / version=1
-CREATEFUNCTION ST_AsGeoJson(geometry, int4, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson(1, $1, $2, $3)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- ST_AsGeoJson(version, geom, precision,options)
-CREATEFUNCTION ST_AsGeoJson(int4, geometry, int4, int4)
-        RETURNS TEXT
-        AS 'SELECT _ST_AsGeoJson($1, $2, $3, $4)'
-        LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-
-------------------------------------------------------------------------
--- OGC defined
-------------------------------------------------------------------------
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumPoints(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumPoints(geometry)
-CREATEFUNCTION ST_NumPoints(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_numpoints_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumGeometries(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumGeometries(geometry)
-CREATEFUNCTION ST_NumGeometries(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_numgeometries_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: GeometryN(geometry)
-CREATEFUNCTION ST_GeometryN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_geometryn_collection'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Dimension(geometry)
-	RETURNS int4
-	AS 'MODULE_PATHNAME', 'LWGEOM_dimension'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: Dimension(geometry)
-CREATEFUNCTION ST_Dimension(geometry)
-    RETURNS int4
-    AS 'MODULE_PATHNAME', 'LWGEOM_dimension'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION ExteriorRing(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: ExteriorRing(geometry)
-CREATEFUNCTION ST_ExteriorRing(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_exteriorring_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumInteriorRings(geometry)
-	RETURNS integer
-	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: NumInteriorRings(geometry)
-CREATEFUNCTION ST_NumInteriorRings(geometry)
-	RETURNS integer
-	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION NumInteriorRing(geometry)
-	RETURNS integer
-	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_NumInteriorRing(geometry)
-	RETURNS integer
-	AS 'MODULE_PATHNAME','LWGEOM_numinteriorrings_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION InteriorRingN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: InteriorRingN(geometry)
-CREATEFUNCTION ST_InteriorRingN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_interiorringn_polygon'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryType(geometry)
-	RETURNS text
-	AS 'MODULE_PATHNAME', 'LWGEOM_getTYPE'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Not quite equivalent to GeometryType
-CREATEFUNCTION ST_GeometryType(geometry)
-    RETURNS text
-    AS $$ 
-    DECLARE
-        gtype text := geometrytype($1);
-    BEGIN
-        IF (gtype IN ('POINT', 'POINTM')) THEN
-            gtype := 'Point';
-        ELSIF (gtype IN ('LINESTRING', 'LINESTRINGM')) THEN
-            gtype := 'LineString';
-        ELSIF (gtype IN ('POLYGON', 'POLYGONM')) THEN
-            gtype := 'Polygon';
-        ELSIF (gtype IN ('MULTIPOINT', 'MULTIPOINTM')) THEN
-            gtype := 'MultiPoint';
-        ELSIF (gtype IN ('MULTILINESTRING', 'MULTILINESTRINGM')) THEN
-            gtype := 'MultiLineString';
-        ELSIF (gtype IN ('MULTIPOLYGON', 'MULTIPOLYGONM')) THEN
-            gtype := 'MultiPolygon';
-        ELSE
-            gtype := 'Geometry';
-        END IF;
-        RETURN 'ST_' || gtype;
-    END
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: PointN(geometry,integer)
-CREATEFUNCTION ST_PointN(geometry,integer)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_pointn_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION X(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_x_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: X(geometry)
-CREATEFUNCTION ST_X(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_x_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Y(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_y_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-        
--- PostGIS equivalent function: Y(geometry)
-CREATEFUNCTION ST_Y(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_y_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION Z(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: Z(geometry)
-CREATEFUNCTION SE_Z(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_Z(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_z_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION M(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_m_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_M(geometry)
-	RETURNS float8
-	AS 'MODULE_PATHNAME','LWGEOM_m_point'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION StartPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: StartPoint(geometry))
-CREATEFUNCTION ST_StartPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_startpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION EndPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: EndPoint(geometry))
-CREATEFUNCTION ST_EndPoint(geometry)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_endpoint_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsClosed(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'LWGEOM_isclosed_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: IsClosed(geometry)
-CREATEFUNCTION ST_IsClosed(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'LWGEOM_isclosed_linestring'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION IsEmpty(geometry)
-	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'LWGEOM_isempty'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- PostGIS equivalent function: IsEmpty(geometry)
-CREATEFUNCTION ST_IsEmpty(geometry)
-    RETURNS boolean
-    AS 'MODULE_PATHNAME', 'LWGEOM_isempty'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SRID(geometry) 
-	RETURNS int4
-	AS 'MODULE_PATHNAME','LWGEOM_getSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: getSRID(geometry)
-CREATEFUNCTION ST_SRID(geometry) 
-    RETURNS int4
-    AS 'MODULE_PATHNAME','LWGEOM_getSRID'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION SetSRID(geometry,int4) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_SetSRID(geometry,int4) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_setSRID'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);	
-	
--- Deprecation in 1.2.3
-CREATEFUNCTION AsBinary(geometry)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: AsBinary(geometry)
-CREATEFUNCTION ST_AsBinary(geometry)
-    RETURNS bytea
-    AS 'MODULE_PATHNAME','LWGEOM_asBinary'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsBinary(geometry,text)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_AsBinary(geometry,text)
-	RETURNS bytea
-	AS 'MODULE_PATHNAME','LWGEOM_asBinary'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION AsText(geometry)
-	RETURNS TEXT
-	AS 'MODULE_PATHNAME','LWGEOM_asText'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: AsText(geometry)
-CREATEFUNCTION ST_AsText(geometry)
-    RETURNS TEXT
-    AS 'MODULE_PATHNAME','LWGEOM_asText'
-    LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryFromText(text)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeometryFromText(text)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeometryFromText(text, int4)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeometryFromText(text, int4)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromText(text)
-	RETURNS geometry AS 'SELECT geometryfromtext($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromText(text)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromText(text, int4)
-	RETURNS geometry AS 'SELECT geometryfromtext($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: ST_GeometryFromText(text, int4)
-CREATEFUNCTION ST_GeomFromText(text, int4)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME','LWGEOM_from_text'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POINT''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POINT''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointFromText(text, int4)
--- TODO: improve this ... by not duplicating constructor time.
-CREATEFUNCTION ST_PointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POINT''
-	THEN ST_GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''LINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''LINESTRING''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: LineFromText(text, int4)
-CREATEFUNCTION ST_LineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''LINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT LineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT LineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''POLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''POLYGON''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''POLYGON''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-        
--- PostGIS equivalent function: ST_PolygonFromText(text, int4)
-CREATEFUNCTION ST_PolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''POLYGON''
-	THEN ST_GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT PolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT ST_PolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MLineFromText(text, int4)
-CREATEFUNCTION ST_MLineFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTILINESTRING''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MLineFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT ST_MLineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineStringFromText(text)
-	RETURNS geometry
-	AS 'SELECT ST_MLineFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineStringFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MLineFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPointFromText(text, int4)
-CREATEFUNCTION ST_MPointFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOINT''
-	THEN GeomFromText($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOINT''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPointFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT ST_MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPointFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPolyFromText(text, int4)
-CREATEFUNCTION ST_MPolyFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromText($1)) = ''MULTIPOLYGON''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---Availability: 1.2.2
-CREATEFUNCTION ST_MPolyFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromText($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolygonFromText(text, int4)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1, $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolygonFromText(text)
-	RETURNS geometry
-	AS 'SELECT MPolyFromText($1)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromText(text, int4)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(ST_GeomFromText($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromText($1,$2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromText($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromText(text)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(ST_GeomFromText($1)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromText($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromWKB(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_from_WKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomFromWKB(bytea)
-	RETURNS geometry
-	AS 'MODULE_PATHNAME','LWGEOM_from_WKB'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomFromWKB(bytea, int)
-	RETURNS geometry
-	AS 'SELECT setSRID(GeomFromWKB($1), $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: GeomFromWKB(bytea, int)
-CREATEFUNCTION ST_GeomFromWKB(bytea, int)
-	RETURNS geometry
-	AS 'SELECT ST_SetSRID(ST_GeomFromWKB($1), $2)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PointFromWKB(bytea, int)
-CREATEFUNCTION ST_PointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POINT''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POINT''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: LineFromWKB(bytea, int)
-CREATEFUNCTION ST_LineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LinestringFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LinestringFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''LINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION LinestringFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_LinestringFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''LINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: PolyFromWKB(text, int)
-CREATEFUNCTION ST_PolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''POLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''POLYGON''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION PolygonFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_PolygonFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''POLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPointFromWKB(text, int)
-CREATEFUNCTION ST_MPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1,$2)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPointFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOINT''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION MultiLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MLineFromWKB(text, int)
-CREATEFUNCTION ST_MLineFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MLineFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTILINESTRING''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- PostGIS equivalent function: MPolyFromWKB(bytea, int)
-CREATEFUNCTION ST_MPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolyFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1, $2)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION MultiPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_MultiPolyFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE WHEN geometrytype(ST_GeomFromWKB($1)) = ''MULTIPOLYGON''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromWKB(bytea, int)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1, $2)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1, $2)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION GeomCollFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
-	THEN GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_GeomCollFromWKB(bytea)
-	RETURNS geometry
-	AS '
-	SELECT CASE
-	WHEN geometrytype(ST_GeomFromWKB($1)) = ''GEOMETRYCOLLECTION''
-	THEN ST_GeomFromWKB($1)
-	ELSE NULL END
-	'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
---
--- SFSQL 1.1
---
--- BdPolyFromText(multiLineStringTaggedText String, SRID Integer): Polygon
---
---  Construct a Polygon given an arbitrary
---  collection of closed linestrings as a
---  MultiLineString text representation.
---
--- This is a PLPGSQL function rather then an SQL function
--- To avoid double call of BuildArea (one to get GeometryType
--- and another to actual return, in a CASE WHEN construct).
--- Also, we profit from plpgsql to RAISE exceptions.
---
--- Deprecation in 1.2.3
-CREATE OR REPLACE FUNCTION BdPolyFromText(text, integer)
-RETURNS geometry
-AS $$ 
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION 'Input is not a MultiLinestring';
-	END IF;
-
-	geom := BuildArea(mline);
-
-	IF GeometryType(geom) != 'POLYGON'
-	THEN
-		RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead';
-	END IF;
-
-	RETURN geom;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATE OR REPLACE FUNCTION ST_BdPolyFromText(text, integer)
-RETURNS geometry
-AS $$ 
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := ST_MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION 'Input is not a MultiLinestring';
-	END IF;
-
-	geom := ST_BuildArea(mline);
-
-	IF GeometryType(geom) != 'POLYGON'
-	THEN
-		RAISE EXCEPTION 'Input returns more then a single polygon, try using BdMPolyFromText instead';
-	END IF;
-
-	RETURN geom;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
---
--- SFSQL 1.1
---
--- BdMPolyFromText(multiLineStringTaggedText String, SRID Integer): MultiPolygon
---
---  Construct a MultiPolygon given an arbitrary
---  collection of closed linestrings as a
---  MultiLineString text representation.
---
--- This is a PLPGSQL function rather then an SQL function
--- To raise an exception in case of invalid input.
---
--- Deprecation in 1.2.3
-CREATEFUNCTION BdMPolyFromText(text, integer)
-RETURNS geometry
-AS $$ 
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION 'Input is not a MultiLinestring';
-	END IF;
-
-	geom := multi(BuildArea(mline));
-
-	RETURN geom;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_BdMPolyFromText(text, integer)
-RETURNS geometry
-AS $$ 
-DECLARE
-	geomtext alias for $1;
-	srid alias for $2;
-	mline geometry;
-	geom geometry;
-BEGIN
-	mline := ST_MultiLineStringFromText(geomtext, srid);
-
-	IF mline IS NULL
-	THEN
-		RAISE EXCEPTION 'Input is not a MultiLinestring';
-	END IF;
-
-	geom := multi(ST_BuildArea(mline));
-
-	RETURN geom;
-END;
-$$
-LANGUAGE 'plpgsql' _IMMUTABLE_STRICT; 
-
-#include "long_xact.sql.in"
-#include "sqlmm.sql.in"
-
----------------------------------------------------------------
--- SQL-MM
----------------------------------------------------------------
-
---
--- SQL-MM
---
--- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
---
--- Converts a given geometry to a linear geometry.  Each curveed
--- geometry or segment is converted into a linear approximation using
--- the given number of segments per quarter circle.
-CREATEFUNCTION ST_CurveToLine(geometry, integer)
-   RETURNS geometry
-   AS 'MODULE_PATHNAME', 'LWGEOM_curve_segmentize'
-   LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
---
--- SQL-MM
---
--- ST_CurveToLine(Geometry geometry, SegmentsPerQuarter integer)
---
--- Converts a given geometry to a linear geometry.  Each curveed
--- geometry or segment is converted into a linear approximation using
--- the default value of 32 segments per quarter circle
-CREATEFUNCTION ST_CurveToLine(geometry)
-	RETURNS geometry AS 'SELECT ST_CurveToLine($1, 32)'
-	LANGUAGE 'SQL' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
-
-CREATEFUNCTION ST_HasArc(geometry)
- 	RETURNS boolean
-	AS 'MODULE_PATHNAME', 'LWGEOM_has_arc'
-	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
-
-CREATEFUNCTION ST_LineToCurve(geometry)
-        RETURNS geometry
-        AS 'MODULE_PATHNAME', 'LWGEOM_line_desegmentize'
-        LANGUAGE 'C' _IMMUTABLE_STRICT; 
----------------------------------------------------------------
--- END
----------------------------------------------------------------
-
-COMMIT;
-

Copied: trunk/lwgeom/postgis.sql.in.c (from rev 3529, trunk/lwgeom/lwpostgis.sql.in.c)


Property changes on: trunk/lwgeom/postgis.sql.in.c
___________________________________________________________________
Name: svn:keywords
   + Id
Name: svn:mergeinfo
   + 

Modified: trunk/lwgeom/sqldefines.h.in
===================================================================
--- trunk/lwgeom/sqldefines.h.in	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/lwgeom/sqldefines.h.in	2009-01-15 18:35:06 UTC (rev 3534)
@@ -2,7 +2,7 @@
 #define _LWPGIS_DEFINES
 
 /*
- * Define just the version numbers; otherwise we get some strange substitutions in lwpostgis.sql.in
+ * Define just the version numbers; otherwise we get some strange substitutions in postgis.sql.in
  */
 #define POSTGIS_PGSQL_VERSION @POSTGIS_PGSQL_VERSION@
 #define POSTGIS_GEOS_VERSION @POSTGIS_GEOS_VERSION@

Modified: trunk/regress/Makefile.in
===================================================================
--- trunk/regress/Makefile.in	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/regress/Makefile.in	2009-01-15 18:35:06 UTC (rev 3534)
@@ -68,7 +68,7 @@
 all: test 
 
 test check: ../lwgeom/liblwgeom.so ../loader/pgsql2shp ../loader/shp2pgsql $(PREPROC)
-	cp ../lwgeom/lwpostgis.sql .
+	cp ../lwgeom/postgis.sql .
 	@USE_VERSION="$(POSTGIS_PGSQL_VERSION)" ./run_test $(TESTS)
 
 ../lwgeom/liblwgeom.so:
@@ -85,4 +85,4 @@
 	@dropdb postgis_reg > /dev/null
 
 clean:
-	rm -f lwpostgis.sql $(PREPROC)
+	rm -f postgis.sql $(PREPROC)

Modified: trunk/regress/run_test
===================================================================
--- trunk/regress/run_test	2009-01-15 18:24:49 UTC (rev 3533)
+++ trunk/regress/run_test	2009-01-15 18:35:06 UTC (rev 3534)
@@ -386,7 +386,7 @@
 
 		createdb "${DB}" > ${TMPDIR}/regress_log
 		createlang plpgsql "${DB}" >> ${TMPDIR}/regress_log
-		${PSQL} -f lwpostgis.sql "${DB}" >> ${TMPDIR}/regress_log 2>&1
+		${PSQL} -f postgis.sql "${DB}" >> ${TMPDIR}/regress_log 2>&1
 	else
 
 		echo "Database ${DB} does not exist" >&2



More information about the postgis-commits mailing list