diff --git a/postgis/postgis.sql.in b/postgis/postgis.sql.in index ca48d09740efe6d81a2ef9e6288bfca84488c94a..4a431910ab9779e43008a1558fbe0de3b1937c67 100644 --- a/postgis/postgis.sql.in +++ b/postgis/postgis.sql.in @@ -2287,7 +2287,8 @@ DECLARE sql text; new_srid integer; count integer; - + compat text; + condition bool; BEGIN -- Verify geometry type @@ -2342,7 +2343,14 @@ BEGIN END IF; -- Verify schema - IF ( schema_name IS NOT NULL) THEN + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := schema_name IS NOT NULL; + ELSE + condition := schema_name IS NOT NULL AND schema_name != ''; + END IF; + + IF (condition) THEN sql := 'SELECT count(*) FROM pg_namespace ' || 'WHERE text(nspname) = ' || quote_literal(schema_name) || 'LIMIT 1'; @@ -2500,11 +2508,19 @@ DECLARE myrec RECORD; okay boolean; real_schema name; + compat text; + condition bool; BEGIN + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := schema_name IS NOT NULL; + ELSE + condition := schema_name IS NOT NULL AND schema_name != ''; + END IF; -- Find, check or fix schema_name - IF ( schema_name IS NOT NULL ) THEN + IF ( condition ) THEN okay = false; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP @@ -2601,10 +2617,18 @@ $$ DECLARE real_schema name; sqlstr text; + compat text; + condition bool; BEGIN + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := schema_name IS NULL; + ELSE + condition := schema_name IS NULL OR schema_name = ''; + END IF; - IF ( schema_name IS NULL ) THEN + IF ( condition ) THEN SELECT current_schema() into real_schema; ELSE real_schema = schema_name; @@ -2670,11 +2694,19 @@ DECLARE gcoord_dimension integer; sql text; count integer; + compat text; + condition bool; BEGIN + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := schema_name IS NOT NULL; + ELSE + condition := schema_name IS NOT NULL AND schema_name != ''; + END IF; -- Find, check or fix schema_name - IF ( schema_name IS NOT NULL ) THEN + IF ( condition ) THEN okay = false; FOR myrec IN SELECT nspname FROM pg_namespace WHERE text(nspname) = schema_name LOOP @@ -2809,6 +2841,8 @@ DECLARE schem varchar = $1; tabl varchar = $2; sr int4; + compat text; + condition bool; BEGIN -- if the table contains a . and the schema is empty -- split the table into a schema and a table @@ -2818,7 +2852,14 @@ BEGIN tabl = substr(tabl,length(schem)+2); END IF; - select SRID into sr from @extschema@.geometry_columns where (f_table_schema = schem or schem IS NULL) and f_table_name = tabl and f_geometry_column = $3; + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := schem IS NULL; + ELSE + condition := schem IS NULL OR schem = ''; + END IF; + + select SRID into sr from @extschema@.geometry_columns where (f_table_schema = schem or condition) and f_table_name = tabl and f_geometry_column = $3; IF NOT FOUND THEN RAISE EXCEPTION 'find_srid() - could not find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table? Is there an uppercase/lowercase mismatch?'; END IF; @@ -4861,7 +4902,7 @@ CREATE OR REPLACE FUNCTION ST_AsGML(geom geometry, maxdecimaldigits int4 DEFAULT -- Changed: 2.0.0 to use default and named args -- ST_AsGML(version, geom, precision, option, prefix, id) -- Availability: 2.1.0 -CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT 'gml', id text DEFAULT '') +CREATE OR REPLACE FUNCTION ST_AsGML(version int4, geom geometry, maxdecimaldigits int4 DEFAULT 15, options int4 DEFAULT 0, nprefix text DEFAULT 'gml', id text DEFAULT null) RETURNS TEXT AS 'MODULE_PATHNAME','LWGEOM_asGML' LANGUAGE 'c' IMMUTABLE _PARALLEL diff --git a/raster/rt_pg/rtpostgis.sql.in b/raster/rt_pg/rtpostgis.sql.in index 18be823c50397d6556a612e0ec738f7d7f88449b..0641ebc92f4c53df2eba33a807b25d3513420336 100644 --- a/raster/rt_pg/rtpostgis.sql.in +++ b/raster/rt_pg/rtpostgis.sql.in @@ -6945,12 +6945,13 @@ CREATE OR REPLACE FUNCTION _raster_constraint_info_scale(rastschema name, rastta AND s.connamespace = n.oid AND s.conrelid = c.oid AND a.attnum = ANY (s.conkey) - AND s.consrc LIKE '%st_scale' || $4 || '(% = %') + AND s.consrc LIKE '%st_scale' || $4 || '(% = %'), + dbcompt AS (SELECT datcompatibility = 'A' AS isA FROM pg_database WHERE datname = current_catalog) -- if it is a comma separated list of two numbers then need to use round - SELECT CASE WHEN split_part(c.val,',', 2) > 0 + SELECT CASE WHEN split_part(c.val,',', 2) > CASE WHEN dbcompt.isA THEN '0' ELSE '' END THEN round( split_part(c.val, ',',1)::numeric, split_part(c.val,',',2)::integer )::float8 ELSE c.val::float8 END - FROM c; + FROM c, dbcompt; $$ LANGUAGE sql STABLE STRICT COST 100; @@ -7823,6 +7824,8 @@ CREATE OR REPLACE FUNCTION AddRasterConstraints ( kw text; rtn boolean; schema_num int; + compat text; + condition bool; BEGIN cnt := 0; max := array_length(constraints, 1); @@ -7833,7 +7836,15 @@ CREATE OR REPLACE FUNCTION AddRasterConstraints ( -- validate schema schema := NULL; - IF $1 != ' ' THEN + + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := $1 != ' '; + ELSE + condition := $1 != ' ' AND $1 != ''; + END IF; + + IF condition THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; @@ -8077,6 +8088,8 @@ CREATE OR REPLACE FUNCTION DropRasterConstraints ( rtn boolean; cnt int; schema_num int; + compat text; + condition boolean; BEGIN cnt := 0; max := array_length(constraints, 1); @@ -8087,7 +8100,15 @@ CREATE OR REPLACE FUNCTION DropRasterConstraints ( -- validate schema schema := NULL; - IF $1 != ' ' THEN + + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := $1 != ' '; + ELSE + condition := $1 != ' ' AND $1 != ''; + END IF; + + IF condition THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; @@ -8485,6 +8506,8 @@ CREATE OR REPLACE FUNCTION AddOverviewConstraints ( sql text; rtn boolean; schema_num int; + compat text; + condition boolean; BEGIN FOR x IN 1..2 LOOP s := ' '; @@ -8499,7 +8522,14 @@ CREATE OR REPLACE FUNCTION AddOverviewConstraints ( -- validate user-provided schema --IF length(s) > 0 THEN - IF s != ' ' THEN + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := s != ' '; + ELSE + condition := s != ' ' AND s != ''; + END IF; + + IF condition THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal(s) || 'LIMIT 1'; @@ -8513,7 +8543,7 @@ CREATE OR REPLACE FUNCTION AddOverviewConstraints ( -- no schema, determine what it could be using the table --IF length(s) < 1 THEN - IF s = ' ' THEN + IF NOT condition THEN sql := 'SELECT count(*) ' || 'FROM pg_catalog.pg_class c ' || 'JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace ' @@ -8589,10 +8619,20 @@ CREATE OR REPLACE FUNCTION DropOverviewConstraints ( sql text; rtn boolean; schema_num int; + compat text; + condition boolean; BEGIN -- validate schema schema := NULL; - IF $1 != ' ' THEN + + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := $1 != ' '; + ELSE + condition := $1 != ' ' AND $1 != ''; + END IF; + + IF condition THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; @@ -8671,10 +8711,20 @@ CREATE OR REPLACE FUNCTION _UpdateRasterSRID( srid integer; ct boolean; schema_num int; + compat text; + condition boolean; BEGIN -- validate schema schema := NULL; - IF $1 != ' ' THEN + + SELECT datcompatibility INTO compat FROM pg_database WHERE datname = current_catalog; + IF compat = 'A' THEN + condition := $1 != ' '; + ELSE + condition := $1 != ' ' AND $1 != ''; + END IF; + + IF condition THEN sql := 'SELECT nspname FROM pg_namespace ' || 'WHERE nspname = ' || quote_literal($1) || 'LIMIT 1'; @@ -8736,7 +8786,7 @@ CREATE OR REPLACE FUNCTION _UpdateRasterSRID( PERFORM @extschema@.DropRasterConstraints(schema, $2, $3, 'extent', 'alignment', 'srid'); fqtn := ''; - IF $1 != ' ' THEN + IF condition THEN fqtn := quote_ident($1) || '.'; END IF; fqtn := fqtn || quote_ident($2); diff --git a/regress/core/regress_index.sql b/regress/core/regress_index.sql index de57944d18e499c35f5f440e8e8b3bdefee0b6bd..b89261063cd3a902e32ebd30ff307e9fd8656657 100644 --- a/regress/core/regress_index.sql +++ b/regress/core/regress_index.sql @@ -47,7 +47,7 @@ CREATE FUNCTION estimate_error(qry text, tol int) RETURNS text LANGUAGE 'plpgsql' VOLATILE AS $$ DECLARE - anl TEXT; -- analisys + anl TEXT := ''; -- analisys err INT; -- absolute difference between planned and actual rows est INT; -- estimated count act INT; -- actual count