From b1337f7bc2eb61a360f40a231f719c0cb22e4085 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Fri, 27 May 2011 00:02:59 +0000 Subject: [PATCH] - Added default values for function parameters of ST_ValueCount and ST_ValuePercent. Removed duplicative functions of the same. - Tweaked the regression tests for ST_ValueCount and ST_ValuePercent as one question for each function type was too ambiguous. git-svn-id: http://svn.osgeo.org/postgis/trunk@7264 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/rtpostgis.sql.in.c | 132 +++++------------------- raster/test/regress/rt_valuecount.sql | 2 +- raster/test/regress/rt_valuepercent.sql | 2 +- 3 files changed, 28 insertions(+), 108 deletions(-) diff --git a/raster/rt_pg/rtpostgis.sql.in.c b/raster/rt_pg/rtpostgis.sql.in.c index 19a35ef3f..2f2dc4e85 100644 --- a/raster/rt_pg/rtpostgis.sql.in.c +++ b/raster/rt_pg/rtpostgis.sql.in.c @@ -910,62 +910,42 @@ CREATE TYPE valuecount AS ( -- None of the "searchvaleus" functions can be strict as "searchvalues" and "roundto" can be NULL -- Allowing "searchvalues" to be NULL instructs the function to count all values -CREATE OR REPLACE FUNCTION _st_valuecount(rast raster, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision) +CREATE OR REPLACE FUNCTION _st_valuecount(rast raster, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0) RETURNS SETOF valuecount AS 'MODULE_PATHNAME', 'RASTER_valueCount' LANGUAGE 'C' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, $2, TRUE, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalues double precision[], OUT value double precision, OUT count integer) - RETURNS SETOF record - AS $$ SELECT value, count FROM _st_valuecount($1, $2, TRUE, $3, 0) $$ - LANGUAGE 'sql' IMMUTABLE; - -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count integer) RETURNS SETOF record AS $$ SELECT value, count FROM _st_valuecount($1, 1, TRUE, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalues double precision[], OUT value double precision, OUT count integer) - RETURNS SETOF record - AS $$ SELECT value, count FROM _st_valuecount($1, 1, TRUE, $2, 0) $$ - LANGUAGE 'sql' IMMUTABLE; - -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision DEFAULT 0, OUT count integer) RETURNS integer AS $$ SELECT count FROM _st_valuecount($1, $2, $3, ARRAY[$4]::double precision[], $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalue double precision, roundto double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalue double precision, roundto double precision DEFAULT 0, OUT count integer) RETURNS integer AS $$ SELECT count FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalue double precision, OUT count integer) - RETURNS integer - AS $$ SELECT count FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], 0) $$ - LANGUAGE 'sql' IMMUTABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalue double precision, roundto double precision, OUT count integer) +CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalue double precision, roundto double precision DEFAULT 0, OUT count integer) RETURNS integer AS $$ SELECT count FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalue double precision, OUT count integer) - RETURNS integer - AS $$ SELECT count FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], 0) $$ - LANGUAGE 'sql' IMMUTABLE STRICT; - -CREATE OR REPLACE FUNCTION _st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision) +CREATE OR REPLACE FUNCTION _st_valuecount(rastertable text, rastercolumn text, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0) RETURNS SETOF valuecount AS $$ DECLARE @@ -1031,107 +1011,67 @@ CREATE OR REPLACE FUNCTION _st_valuecount(rastertable text, rastercolumn text, n END; $$ LANGUAGE 'plpgsql' STABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT value, sum(count) AS count FROM _st_valuecount($1, $2, $3, $4, $5, $6) GROUP BY 1 ORDER BY 1 $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT value, count FROM st_valuecount($1, $2, $3, TRUE, $4, $5) $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], OUT value double precision, OUT count bigint) - RETURNS SETOF record - AS $$ SELECT value, count FROM st_valuecount($1, $2, $3, TRUE, $4, 0) $$ - LANGUAGE 'sql' STABLE; - -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision, OUT value double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT count bigint) RETURNS SETOF record AS $$ SELECT value, count FROM st_valuecount($1, $2, 1, TRUE, $3, $4) $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalues double precision[], OUT value double precision, OUT count bigint) - RETURNS SETOF record - AS $$ SELECT value, count FROM st_valuecount($1, $2, 1, TRUE, $3, 0) $$ - LANGUAGE 'sql' STABLE; - -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision DEFAULT 0, OUT count bigint) RETURNS bigint AS $$ SELECT count FROM st_valuecount($1, $2, $3, $4, ARRAY[$5]::double precision[], $6) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision DEFAULT 0, OUT count bigint) RETURNS bigint AS $$ SELECT count FROM st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, OUT count bigint) - RETURNS bigint - AS $$ SELECT count FROM st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], 0) $$ - LANGUAGE 'sql' STABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision, OUT count bigint) +CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision DEFAULT 0, OUT count bigint) RETURNS bigint AS $$ SELECT count FROM st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalue double precision, OUT count bigint) - RETURNS bigint - AS $$ SELECT count FROM st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], 0) $$ - LANGUAGE 'sql' STABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, $3, $4, $5) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, $2, TRUE, $3, $4) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalues double precision[], OUT value double precision, OUT percent double precision) - RETURNS SETOF record - AS $$ SELECT value, percent FROM _st_valuecount($1, $2, TRUE, $3, 0) $$ - LANGUAGE 'sql' IMMUTABLE; - -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM _st_valuecount($1, 1, TRUE, $2, $3) $$ LANGUAGE 'sql' IMMUTABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalues double precision[], OUT value double precision, OUT percent double precision) - RETURNS SETOF record - AS $$ SELECT value, percent FROM _st_valuecount($1, 1, TRUE, $2, 0) $$ - LANGUAGE 'sql' IMMUTABLE; - -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM _st_valuecount($1, $2, $3, ARRAY[$4]::double precision[], $5) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], $4) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalue double precision, OUT percent double precision) - RETURNS double precision - AS $$ SELECT percent FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], 0) $$ - LANGUAGE 'sql' IMMUTABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], $3) $$ LANGUAGE 'sql' IMMUTABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalue double precision, OUT percent double precision) - RETURNS double precision - AS $$ SELECT percent FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], 0) $$ - LANGUAGE 'sql' IMMUTABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer DEFAULT 1, hasnodata boolean DEFAULT TRUE, searchvalues double precision[] DEFAULT NULL, roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT @@ -1152,51 +1092,31 @@ CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, ORDER BY 1 $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM st_valuepercent($1, $2, $3, TRUE, $4, $5) $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalues double precision[], OUT value double precision, OUT percent double precision) - RETURNS SETOF record - AS $$ SELECT value, percent FROM st_valuepercent($1, $2, $3, TRUE, $4, 0) $$ - LANGUAGE 'sql' STABLE; - -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision, OUT value double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalues double precision[], roundto double precision DEFAULT 0, OUT value double precision, OUT percent double precision) RETURNS SETOF record AS $$ SELECT value, percent FROM st_valuepercent($1, $2, 1, TRUE, $3, $4) $$ LANGUAGE 'sql' STABLE; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalues double precision[], OUT value double precision, OUT percent double precision) - RETURNS SETOF record - AS $$ SELECT value, percent FROM st_valuepercent($1, $2, 1, TRUE, $3, 0) $$ - LANGUAGE 'sql' STABLE; - -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM st_valuepercent($1, $2, $3, $4, ARRAY[$5]::double precision[], $6) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM st_valuepercent($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalue double precision, OUT percent double precision) - RETURNS double precision - AS $$ SELECT percent FROM st_valuepercent($1, $2, $3, TRUE, ARRAY[$4]::double precision[], 0) $$ - LANGUAGE 'sql' STABLE STRICT; - -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision, OUT percent double precision) +CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision DEFAULT 0, OUT percent double precision) RETURNS double precision AS $$ SELECT percent FROM st_valuepercent($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4) $$ LANGUAGE 'sql' STABLE STRICT; -CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalue double precision, OUT percent double precision) - RETURNS double precision - AS $$ SELECT percent FROM st_valuepercent($1, $2, 1, TRUE, ARRAY[$3]::double precision[], 0) $$ - LANGUAGE 'sql' STABLE STRICT; - ----------------------------------------------------------------------- -- ST_Reclass ----------------------------------------------------------------------- diff --git a/raster/test/regress/rt_valuecount.sql b/raster/test/regress/rt_valuecount.sql index ad5daa6f9..7b4102fdd 100644 --- a/raster/test/regress/rt_valuecount.sql +++ b/raster/test/regress/rt_valuecount.sql @@ -242,5 +242,5 @@ SELECT count FROM st_valuecount('test', 'rast', 1, TRUE, NULL::double precision, SELECT count FROM st_valuecount('test', 'rast', 1, 3.14, 1); SELECT count FROM st_valuecount('test', 'rast', 1, -1); SELECT count FROM st_valuecount('test', 'rast', 3.1, 0.1); -SELECT count FROM st_valuecount('test', 'rast', -9); +SELECT count FROM st_valuecount('test', 'rast', -9.); ROLLBACK; diff --git a/raster/test/regress/rt_valuepercent.sql b/raster/test/regress/rt_valuepercent.sql index 1cf0d668f..a13e8bb4b 100644 --- a/raster/test/regress/rt_valuepercent.sql +++ b/raster/test/regress/rt_valuepercent.sql @@ -242,5 +242,5 @@ SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, TRUE, SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, 3.14, 1); SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, -1); SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 3.1, 0.1); -SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', -9); +SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', -9.); ROLLBACK; -- 2.50.1