]> granicus.if.org Git - postgis/commitdiff
Moved AddGeometryColumn and DropGeometryColumn from USE_VERSION
authorSandro Santilli <strk@keybit.net>
Mon, 22 Mar 2004 09:39:38 +0000 (09:39 +0000)
committerSandro Santilli <strk@keybit.net>
Mon, 22 Mar 2004 09:39:38 +0000 (09:39 +0000)
blocks to the end of file. Here, differences between versions
are handled on a minimun-diff basis, making it easier to understand
the differences and to modify the code. Also, diffs have been
splitted between pgsql < 73 and >= 73.
Added reduced-parameters wrappers to both functions.

git-svn-id: http://svn.osgeo.org/postgis/trunk@491 b70326c6-7e19-0410-871a-916f4a2858ee

postgis.sql.in

index 4266708febea04e66ea6a50a4e8d03decd938607..2e0d34f73ed4d78241957285b3c25690e24e7e1d 100644 (file)
@@ -759,8 +759,9 @@ CREATE FUNCTION postgis_version() RETURNS text
 AS 'SELECT 'POSTGIS_VERSION'::text AS version'
 LANGUAGE 'sql';
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
+-----------------------------------------------------------------------
 -- FIND_SRID( <schema>, <table>, <geom col> )
+-----------------------------------------------------------------------
 
 CREATE FUNCTION find_srid(varchar,varchar,varchar) RETURNS int4 AS
 'DECLARE
@@ -2080,169 +2081,6 @@ END;
 '
 LANGUAGE 'plpgsql' ;
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( 
---      <catalog>, <schema>, <table name>, <column name>, 
---      <srid>, <type>, <dim> )
---
--- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Types (except geometry) are checked for consistency using a CHECK constraint
--- uses SQL 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).
--- Calls fix_geometry_columns() at the end.
---
-CREATE FUNCTION 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;
-
-BEGIN
-
-       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'')) )
-       THEN
-               RAISE EXCEPTION ''Invalid type name - valid ones are: 
-                       GEOMETRY, GEOMETRYCOLLECTION, POINT, 
-                       MULTIPOINT, POLYGON, MULTIPOLYGON, 
-                       LINESTRING, or MULTILINESTRING '';
-               return ''fail'';
-       END IF;
-
-       IF ( (new_dim >3) or (new_dim <0) ) THEN
-               RAISE EXCEPTION ''invalid dimension'';
-               return ''fail'';
-       END IF;
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(table_name) || 
-               '' ADD COLUMN '' || quote_ident(column_name) || 
-               '' geometry '';
-
-       EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
-               quote_literal('''') || '','' ||
-               quote_literal('''') || '','' ||
-               quote_literal(table_name) || '','' ||
-               quote_literal(column_name) || '','' ||
-               new_dim || '','' || new_srid || '','' ||
-               quote_literal(new_type) || '')'';
-
-       EXECUTE ''select fix_geometry_columns()'';
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-               '' ADD CHECK (SRID('' || quote_ident(column_name) ||
-               '') = '' || new_srid || '')'' ;
-
-       IF (not(new_type = ''GEOMETRY'')) THEN
-               EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-               '' ADD CHECK (geometrytype('' ||
-               quote_ident(column_name) || '')='' ||
-               quote_literal(new_type) || '' OR ('' ||
-               quote_ident(column_name) || '') is null)'';
-       END IF;
-
-       return ''Geometry column '' || column_name || '' added to table ''
-               || table_name || '' WITH a SRID of '' || new_srid ||
-               '' and type '' || new_type;
-END;
-' LANGUAGE 'plpgsql' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-CREATE FUNCTION 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' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- DROPGEOMETRYCOLUMN( <schema name>, <table name>, <column name> )
---
--- There is no ALTER TABLE DROP COLUMN command in postgresql
--- There is no ALTER TABLE DROP CONSTRAINT command in postgresql
--- So, we:
---   1. remove the unwanted geom column reference from the 
---      geometry_columns table
---   2. update the table so that the geometry column is all NULLS
---      This is okay since the CHECK srid(geometry) = <srid> is not
---      checked if geometry is NULL (the isstrict attribute on srid())
---   3. add another constraint that the geometry column must be NULL
--- This, effectively kills the geometry column 
---   (a) its not in the geometry_column table
---   (b) it only has nulls in it
---   (c) you cannot add anything to the geom column because it must be NULL
--- 
--- This will screw up if you put a NOT NULL constraint on the geometry 
--- column, so the first thing we must do is remove this constraint (its a 
--- modification of the pg_attribute system table)
---
--- We also check to see if the table/column exists in the geometry_columns 
--- table 
-
-CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
-       RETURNS text
-       AS 
-'
-DECLARE
-       schema_name alias for $1;
-       table_name alias for $2;
-       column_name alias for $3;
-       myrec RECORD;
-       okay boolean;
-BEGIN
-       -- first we find out if the column is in the geometry_columns table
-       okay = ''f'';
-       FOR myrec IN SELECT * from geometry_columns where f_table_schema = schema_name 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;
-       
-       -- ensure the geometry column does not have a NOT NULL attribute
-       EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
-
-       -- remove ref from geometry_columns table
-       EXECUTE ''delete from geometry_columns where f_table_schema = '' || quote_literal(database_name) ||
-                '' and f_table_name = '' || quote_literal(table_name) || 
-                '' and f_geometry_column = '' || quote_literal(column_name );
-
-       -- update the given table/column so that it it all NULLS
-
-       EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
-
-       -- add = NULL constraint to given table/column
-
-       EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
-
-       RETURN table_name || ''.'' || column_name ||'' effectively removed.'';
-       
-END;
-'
-LANGUAGE 'plpgsql' WITH (isstrict);
-
 #elif USE_VERSION == 72
 
 -- - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -2552,169 +2390,6 @@ END;
 '
 LANGUAGE 'plpgsql' ;
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( 
---      <catalog>, <schema>, <table name>, <column name>, 
---      <srid>, <type>, <dim> )
---
--- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Types (except geometry) are checked for consistency using a CHECK constraint
--- uses SQL 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).
--- Calls fix_geometry_columns() at the end.
---
-CREATE FUNCTION 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;
-
-BEGIN
-
-       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'')) )
-       THEN
-               RAISE EXCEPTION ''Invalid type name - valid ones are: 
-                       GEOMETRY, GEOMETRYCOLLECTION, POINT, 
-                       MULTIPOINT, POLYGON, MULTIPOLYGON, 
-                       LINESTRING, or MULTILINESTRING '';
-               return ''fail'';
-       END IF;
-
-       IF ( (new_dim >3) or (new_dim <0) ) THEN
-               RAISE EXCEPTION ''invalid dimension'';
-               return ''fail'';
-       END IF;
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(table_name) || 
-               '' ADD COLUMN '' || quote_ident(column_name) || 
-               '' geometry '';
-
-       EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
-               quote_literal('''') || '','' ||
-               quote_literal('''') || '','' ||
-               quote_literal(table_name) || '','' ||
-               quote_literal(column_name) || '','' ||
-               new_dim || '','' || new_srid || '','' ||
-               quote_literal(new_type) || '')'';
-
-       EXECUTE ''select fix_geometry_columns()'';
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-               '' ADD CHECK (SRID('' || quote_ident(column_name) ||
-               '') = '' || new_srid || '')'' ;
-
-       IF (not(new_type = ''GEOMETRY'')) THEN
-               EXECUTE ''ALTER TABLE '' || quote_ident(table_name) ||
-               '' ADD CHECK (geometrytype('' ||
-               quote_ident(column_name) || '')='' ||
-               quote_literal(new_type) || '' OR ('' ||
-               quote_ident(column_name) || '') is null)'';
-       END IF;
-
-       return ''Geometry column '' || column_name || '' added to table ''
-               || table_name || '' WITH a SRID of '' || new_srid ||
-               '' and type '' || new_type;
-END;
-' LANGUAGE 'plpgsql' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-CREATE FUNCTION 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' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- DROPGEOMETRYCOLUMN( <schema name>, <table name>, <column name> )
---
--- There is no ALTER TABLE DROP COLUMN command in postgresql
--- There is no ALTER TABLE DROP CONSTRAINT command in postgresql
--- So, we:
---   1. remove the unwanted geom column reference from the 
---      geometry_columns table
---   2. update the table so that the geometry column is all NULLS
---      This is okay since the CHECK srid(geometry) = <srid> is not
---      checked if geometry is NULL (the isstrict attribute on srid())
---   3. add another constraint that the geometry column must be NULL
--- This, effectively kills the geometry column 
---   (a) its not in the geometry_column table
---   (b) it only has nulls in it
---   (c) you cannot add anything to the geom column because it must be NULL
--- 
--- This will screw up if you put a NOT NULL constraint on the geometry 
--- column, so the first thing we must do is remove this constraint (its a 
--- modification of the pg_attribute system table)
---
--- We also check to see if the table/column exists in the geometry_columns 
--- table 
-
-CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
-       RETURNS text
-       AS 
-'
-DECLARE
-       schema_name alias for $1;
-       table_name alias for $2;
-       column_name alias for $3;
-       myrec RECORD;
-       okay boolean;
-BEGIN
-       -- first we find out if the column is in the geometry_columns table
-       okay = ''f'';
-       FOR myrec IN SELECT * from geometry_columns where f_table_schema = schema_name 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;
-       
-       -- ensure the geometry column does not have a NOT NULL attribute
-       EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
-
-       -- remove ref from geometry_columns table
-       EXECUTE ''delete from geometry_columns where f_table_schema = '' || quote_literal(database_name) ||
-                '' and f_table_name = '' || quote_literal(table_name) || 
-                '' and f_geometry_column = '' || quote_literal(column_name );
-
-       -- update the given table/column so that it it all NULLS
-
-       EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
-
-       -- add = NULL constraint to given table/column
-
-       EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
-
-       RETURN table_name || ''.'' || column_name ||'' effectively removed.'';
-       
-END;
-'
-LANGUAGE 'plpgsql' WITH (isstrict);
-
 #elif USE_VERSION == 73
 
 --
@@ -2932,212 +2607,24 @@ END;
 '
 LANGUAGE 'plpgsql' ;
 
+
+#elif USE_VERSION == 74
+
 -- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( 
---      <catalog>, <schema>, <table name>, <column name>, 
---      <srid>, <type>, <dim> )
---
--- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Types (except geometry) are checked for consistency using a CHECK constraint
--- uses SQL 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).
--- Calls fix_geometry_columns() at the end.
---
-CREATE FUNCTION 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;
-       schema_ok bool;
-       real_schema name;
-BEGIN
-
-       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'')) )
-       THEN
-               RAISE EXCEPTION ''Invalid type name - valid ones are: 
-                       GEOMETRY, GEOMETRYCOLLECTION, POINT, 
-                       MULTIPOINT, POLYGON, MULTIPOLYGON, 
-                       LINESTRING, or MULTILINESTRING '';
-               RETURN ''fail'';
-       END IF;
-
-       IF ( (new_dim >3) or (new_dim <0) ) THEN
-               RAISE EXCEPTION ''invalid dimension'';
-               RETURN ''fail'';
-       END IF;
-
-       IF ( schema_name != '''' ) THEN
-               schema_ok = ''f'';
-               FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-                       schema_ok := ''t'';
-               END LOOP;
-
-               if ( schema_ok <> ''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;
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD COLUMN '' || quote_ident(column_name) || 
-               '' geometry '';
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD CHECK (SRID('' || quote_ident(column_name) ||
-               '') = '' || new_srid || '')'' ;
-
-       IF (not(new_type = ''GEOMETRY'')) THEN
-               EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-                       ''.'' || quote_ident(table_name) || 
-                       '' ADD CHECK (geometrytype('' ||
-                       quote_ident(column_name) || '')='' ||
-                       quote_literal(new_type) || '' OR ('' ||
-                       quote_ident(column_name) || '') is null)'';
-       END IF;
-
-       EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
-               quote_literal('''') || '','' ||
-               quote_literal(real_schema) || '','' ||
-               quote_literal(table_name) || '','' ||
-               quote_literal(column_name) || '','' ||
-               new_dim || '','' || new_srid || '','' ||
-               quote_literal(new_type) || '')'';
-
-       EXECUTE ''select fix_geometry_columns()'';
-       --SELECT fix_geometry_columns();
-
-       return ''Geometry column '' || column_name || '' added to table ''
-               || real_schema || ''.'' || table_name || '' WITH a SRID of '' || new_srid ||
-               '' and type '' || new_type;
-END;
-' LANGUAGE 'plpgsql' WITH (isstrict);
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-CREATE FUNCTION 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' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- DROPGEOMETRYCOLUMN( <schema name>, <table name>, <column name> )
---
--- Removes geometry column reference from geometry_columns table,
--- and actually drops the column.
---
-CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
-       RETURNS text
-       AS 
-'
-DECLARE
-       schema_name alias for $1;
-       table_name alias for $2;
-       column_name alias for $3;
-       
-       myrec RECORD;
-       real_schema name;
-       okay boolean;
-       query text;
-
-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;
-
-       -- first we 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' WITH (isstrict);
-
-#elif USE_VERSION == 74
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
---  WKB
-
--- this has been moved here at _end from _start 
--- because we need the definition of function bytea
--- found in _common 
-CREATE TYPE wkb (
-       internallength = variable,
-       input = wkb_in,
-       output = wkb_out,
-       storage = extended,
-       send = bytea,
-       receive = wkb_recv
-);
-
+--  WKB
+
+-- this has been moved here at _end from _start 
+-- because we need the definition of function bytea
+-- found in _common 
+CREATE TYPE wkb (
+       internallength = variable,
+       input = wkb_in,
+       output = wkb_out,
+       storage = extended,
+       send = bytea,
+       receive = wkb_recv
+);
+
 --
 -- 7.3 explicit casting definitions
 --
@@ -3364,195 +2851,6 @@ END;
 '
 LANGUAGE 'plpgsql' ;
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( 
---      <catalog>, <schema>, <table name>, <column name>, 
---      <srid>, <type>, <dim> )
---
--- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
--- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
---
--- Types (except geometry) are checked for consistency using a CHECK constraint
--- uses SQL 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).
--- Calls fix_geometry_columns() at the end.
---
-CREATE FUNCTION 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;
-       schema_ok bool;
-       real_schema name;
-BEGIN
-
-       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'')) )
-       THEN
-               RAISE EXCEPTION ''Invalid type name - valid ones are: 
-                       GEOMETRY, GEOMETRYCOLLECTION, POINT, 
-                       MULTIPOINT, POLYGON, MULTIPOLYGON, 
-                       LINESTRING, or MULTILINESTRING '';
-               RETURN ''fail'';
-       END IF;
-
-       IF ( (new_dim >3) or (new_dim <0) ) THEN
-               RAISE EXCEPTION ''invalid dimension'';
-               RETURN ''fail'';
-       END IF;
-
-       IF ( schema_name != '''' ) THEN
-               schema_ok = ''f'';
-               FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
-                       schema_ok := ''t'';
-               END LOOP;
-
-               if ( schema_ok <> ''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;
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD COLUMN '' || quote_ident(column_name) || 
-               '' geometry '';
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD CHECK (SRID('' || quote_ident(column_name) ||
-               '') = '' || new_srid || '')'' ;
-
-       IF (not(new_type = ''GEOMETRY'')) THEN
-               EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-                       ''.'' || quote_ident(table_name) || 
-                       '' ADD CHECK (geometrytype('' ||
-                       quote_ident(column_name) || '')='' ||
-                       quote_literal(new_type) || '' OR ('' ||
-                       quote_ident(column_name) || '') is null)'';
-       END IF;
-
-       EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
-               quote_literal('''') || '','' ||
-               quote_literal(real_schema) || '','' ||
-               quote_literal(table_name) || '','' ||
-               quote_literal(column_name) || '','' ||
-               new_dim || '','' || new_srid || '','' ||
-               quote_literal(new_type) || '')'';
-
-       EXECUTE ''select fix_geometry_columns()'';
-       --SELECT fix_geometry_columns();
-
-       return ''Geometry column '' || column_name || '' added to table ''
-               || real_schema || ''.'' || table_name || '' WITH a SRID of '' || new_srid ||
-               '' and type '' || new_type;
-END;
-' LANGUAGE 'plpgsql' WITH (isstrict);
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-CREATE FUNCTION 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' WITH (isstrict);
-
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- DROPGEOMETRYCOLUMN( <schema name>, <table name>, <column name> )
---
--- Removes geometry column reference from geometry_columns table,
--- and actually drops the column.
---
-CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
-       RETURNS text
-       AS 
-'
-DECLARE
-       schema_name alias for $1;
-       table_name alias for $2;
-       column_name alias for $3;
-       
-       myrec RECORD;
-       real_schema name;
-       okay boolean;
-       query text;
-
-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;
-
-       -- first we 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' WITH (isstrict);
-
 #elif USE_VERSION == 75
 
 -- - - - - - - - - - - - - - - - - - - - - - - - - - - -
@@ -3763,10 +3061,21 @@ END;
 '
 LANGUAGE 'plpgsql' ;
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- ADDGEOMETRYCOLUMN ( 
---      <catalog>, <schema>, <table name>, <column name>, 
---      <srid>, <type>, <dim> )
+
+#endif // USE_VERSION == ...
+
+
+---------------------------------------------
+--
+-- THIS part has been compressed to easly
+-- see the differences between pgsql versions
+--  
+---------------------------------------------
+
+-----------------------------------------------------------------------
+-- ADDGEOMETRYCOLUMN
+--   <catalogue>, <schema>, <table>, <column>, <srid>, <type>, <dim>
+-----------------------------------------------------------------------
 --
 -- Type can be one of geometry, GEOMETRYCOLLECTION, POINT, MULTIPOINT, POLYGON,
 -- MULTIPOLYGON, LINESTRING, or MULTILINESTRING.
@@ -3779,6 +3088,7 @@ LANGUAGE 'plpgsql' ;
 -- Should also check the precision grid (future expansion).
 -- Calls fix_geometry_columns() at the end.
 --
+-----------------------------------------------------------------------
 CREATE FUNCTION AddGeometryColumn(varchar,varchar,varchar,varchar,integer,varchar,integer)
        RETURNS text
        AS 
@@ -3791,10 +3101,12 @@ DECLARE
        new_srid alias for $5;
        new_type alias for $6;
        new_dim alias for $7;
-
+#if USE_VERSION >= 73
        rec RECORD;
        schema_ok bool;
        real_schema name;
+#endif
+
 BEGIN
 
        IF ( not ( (new_type =''GEOMETRY'') or
@@ -3810,14 +3122,15 @@ BEGIN
                        GEOMETRY, GEOMETRYCOLLECTION, POINT, 
                        MULTIPOINT, POLYGON, MULTIPOLYGON, 
                        LINESTRING, or MULTILINESTRING '';
-               RETURN ''fail'';
+               return ''fail'';
        END IF;
 
        IF ( (new_dim >3) or (new_dim <0) ) THEN
                RAISE EXCEPTION ''invalid dimension'';
-               RETURN ''fail'';
+               return ''fail'';
        END IF;
 
+#if USE_VERSION >= 73
        IF ( schema_name != '''' ) THEN
                schema_ok = ''f'';
                FOR rec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP
@@ -3834,45 +3147,73 @@ BEGIN
        ELSE
                SELECT current_schema() into real_schema;
        END IF;
+#endif
 
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD COLUMN '' || quote_ident(column_name) || 
-               '' geometry '';
-
-       EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-               ''.'' || quote_ident(table_name) || 
-               '' ADD CHECK (SRID('' || quote_ident(column_name) ||
-               '') = '' || new_srid || '')'' ;
 
-       IF (not(new_type = ''GEOMETRY'')) THEN
-               EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) ||
-                       ''.'' || quote_ident(table_name) || 
-                       '' ADD CHECK (geometrytype('' ||
-                       quote_ident(column_name) || '')='' ||
-                       quote_literal(new_type) || '' OR ('' ||
-                       quote_ident(column_name) || '') is null)'';
-       END IF;
+       EXECUTE ''ALTER TABLE '' ||
+#if USE_VERSION >= 73
+               quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+               quote_ident(table_name)
+#endif
+               || '' ADD COLUMN '' || quote_ident(column_name) || 
+               '' geometry '';
 
        EXECUTE ''INSERT INTO geometry_columns VALUES ('' ||
                quote_literal('''') || '','' ||
+#if USE_VERSION >= 73
                quote_literal(real_schema) || '','' ||
+#else
+               quote_literal('''') || '','' ||
+#endif
                quote_literal(table_name) || '','' ||
                quote_literal(column_name) || '','' ||
                new_dim || '','' || new_srid || '','' ||
                quote_literal(new_type) || '')'';
 
+       EXECUTE ''ALTER TABLE '' || 
+#if USE_VERSION >= 73
+               quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+               quote_ident(table_name)
+#endif
+               || '' ADD CHECK (SRID('' || quote_ident(column_name) ||
+               '') = '' || new_srid || '')'' ;
+
+       IF (not(new_type = ''GEOMETRY'')) THEN
+               EXECUTE ''ALTER TABLE '' || 
+#if USE_VERSION >= 73
+               quote_ident(real_schema) || ''.'' || quote_ident(table_name)
+#else
+               quote_ident(table_name)
+#endif
+               || '' ADD CHECK (geometrytype('' ||
+               quote_ident(column_name) || '')='' ||
+               quote_literal(new_type) || '' OR ('' ||
+               quote_ident(column_name) || '') is null)'';
+       END IF;
+
        EXECUTE ''select fix_geometry_columns()'';
-       --SELECT fix_geometry_columns();
 
        return ''Geometry column '' || column_name || '' added to table ''
-               || real_schema || ''.'' || table_name || '' WITH a SRID of '' || new_srid ||
+#if USE_VERSION >= 73
+               || real_schema || ''.'' || table_name
+#else
+               || table_name
+#endif
+               || '' WITH a SRID of '' || new_srid ||
                '' and type '' || new_type;
 END;
 ' LANGUAGE 'plpgsql' WITH (isstrict);
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+----------------------------------------------------------------------------
 -- ADDGEOMETRYCOLUMN ( <schema>, <table>, <column>, <srid>, <type>, <dim> )
--- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+----------------------------------------------------------------------------
+--
+-- This is a wrapper to the real AddGeometryColumn, for use
+-- when catalogue is undefined
+--
+----------------------------------------------------------------------------
 CREATE FUNCTION AddGeometryColumn(varchar,varchar,varchar,integer,varchar,integer) RETURNS text AS '
 DECLARE
        ret  text;
@@ -3882,29 +3223,50 @@ BEGIN
 END;
 ' LANGUAGE 'plpgsql' WITH (isstrict);
 
--- - - - - - - - - - - - - - - - - - - - - - - - - - - -
--- DROPGEOMETRYCOLUMN( <schema name>, <table name>, <column name> )
+----------------------------------------------------------------------------
+-- ADDGEOMETRYCOLUMN ( <table>, <column>, <srid>, <type>, <dim> )
+----------------------------------------------------------------------------
 --
--- Removes geometry column reference from geometry_columns table,
--- and actually drops the column.
+-- This is a wrapper to the real AddGeometryColumn, for use
+-- when catalogue and schema are undefined
 --
-CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
+----------------------------------------------------------------------------
+CREATE FUNCTION 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' 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
+--
+-----------------------------------------------------------------------
+CREATE FUNCTION DropGeometryColumn(varchar, varchar,varchar,varchar)
        RETURNS text
        AS 
 '
 DECLARE
-       schema_name alias for $1;
-       table_name alias for $2;
-       column_name alias for $3;
-       
+       catalog_name alias for $1; 
+       schema_name alias for $2;
+       table_name alias for $3;
+       column_name alias for $4;
        myrec RECORD;
-       real_schema name;
        okay boolean;
-       query text;
+       real_schema name;
 
 BEGIN
 
 
+#if USE_VERSION >= 73
        -- Find, check or fix schema_name
        IF ( schema_name != '''' ) THEN
                okay = ''f'';
@@ -3922,8 +3284,11 @@ BEGIN
        ELSE
                SELECT current_schema() into real_schema;
        END IF;
+#else
+       real_schema = schema_name;
+#endif // USE_VERSION >= 73
 
-       -- first we find out if the column is in the geometry_columns table
+       -- 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'';
@@ -3933,17 +3298,25 @@ BEGIN
                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);
-
+       
+#if USE_VERSION < 73
+       -- Remove not-null constraint to table column 
+       EXECUTE ''update pg_attribute set attnotnull = false from pg_class where pg_attribute.attrelid = pg_class.oid and pg_class.relname = '' || quote_literal(table_name) ||'' and pg_attribute.attname = '' || quote_literal(column_name);
+       -- update the given table/column so that it it all NULLS
+       EXECUTE ''update "''||table_name||''" set "''||column_name||''"= NULL'';
+       -- add = NULL constraint to given table/column
+       EXECUTE ''ALTER TABLE "''||table_name||''" ADD CHECK ("''||column_name||''" IS NULL)'';
+#else
        -- Remove table column
        EXECUTE ''ALTER TABLE '' || quote_ident(real_schema) || ''.'' ||
                quote_ident(table_name) || '' DROP COLUMN '' ||
                quote_ident(column_name);
+#endif 
 
 
        RETURN real_schema || ''.'' || table_name || ''.'' || column_name ||'' effectively removed.'';
@@ -3952,7 +3325,48 @@ END;
 '
 LANGUAGE 'plpgsql' WITH (isstrict);
 
+-----------------------------------------------------------------------
+-- DROPGEOMETRYCOLUMN
+--   <schema>, <table>, <column>
+-----------------------------------------------------------------------
+--
+-- This is a wrapper to the real DropGeometryColumn, for use
+-- when catalogue is undefined
+--
+-----------------------------------------------------------------------
+CREATE FUNCTION DropGeometryColumn(varchar,varchar,varchar)
+       RETURNS text
+       AS 
+'
+DECLARE
+       ret text;
+BEGIN
+       SELECT DropGeometryColumn('''',$1,$2,$3) into ret;
+       RETURN ret;
+END;
+' LANGUAGE 'plpgsql' WITH (isstrict);
+
+-----------------------------------------------------------------------
+-- DROPGEOMETRYCOLUMN
+--   <table>, <column>
+-----------------------------------------------------------------------
+--
+-- This is a wrapper to the real DropGeometryColumn, for use
+-- when catalogue and schema is undefined. 
+--
+-----------------------------------------------------------------------
+CREATE FUNCTION DropGeometryColumn(varchar,varchar)
+       RETURNS text
+       AS 
+'
+DECLARE
+       ret text;
+BEGIN
+       SELECT DropGeometryColumn('''','''',$1,$2) into ret;
+       RETURN ret;
+END;
+' LANGUAGE 'plpgsql' WITH (isstrict);
 
-#endif // USE_VERSION == ...
+-----------------------------------------------------------------------
 
 END TRANSACTION;