LANGUAGE 'sql' IMMUTABLE STRICT;
-----------------------------------------------------------------------
--- ST_ValueCount
+-- ST_ValueCount and ST_ValuePercent
-----------------------------------------------------------------------
CREATE TYPE valuecount AS (
value double precision,
count integer,
- proportion double precision
+ percent double precision
);
--- None of the functions can be strict as "searchvalues" and "roundto" can be NULL
+-- 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)
RETURNS SETOF valuecount
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 value double precision, OUT count integer)
- RETURNS record
- AS $$ SELECT value, count FROM _st_valuecount($1, $2, $3, ARRAY[$4]::double precision[], $5) $$
- LANGUAGE 'sql' IMMUTABLE;
+CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, 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 value double precision, OUT count integer)
- RETURNS record
- AS $$ SELECT value, count FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], $4) $$
- LANGUAGE 'sql' IMMUTABLE;
+CREATE OR REPLACE FUNCTION st_valuecount(rast raster, nband integer, searchvalue double precision, roundto double precision, 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 value double precision, OUT count integer)
- RETURNS record
- AS $$ SELECT value, count FROM _st_valuecount($1, $2, TRUE, ARRAY[$3]::double precision[], 0) $$
- LANGUAGE 'sql' IMMUTABLE;
+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 value double precision, OUT count integer)
- RETURNS record
- AS $$ SELECT value, count FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], $3) $$
- LANGUAGE 'sql' IMMUTABLE;
+CREATE OR REPLACE FUNCTION st_valuecount(rast raster, searchvalue double precision, roundto double precision, 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 value double precision, OUT count integer)
- RETURNS record
- AS $$ SELECT value, count FROM _st_valuecount($1, 1, TRUE, ARRAY[$2]::double precision[], 0) $$
- LANGUAGE 'sql' IMMUTABLE;
+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)
RETURNS SETOF valuecount
AS $$ SELECT value, count FROM st_valuecount($1, $2, 1, TRUE, $3, 0) $$
LANGUAGE 'sql' IMMUTABLE;
-CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT value double precision, OUT count bigint)
- RETURNS record
- AS $$ SELECT value, count FROM st_valuecount($1, $2, $3, $4, ARRAY[$5]::double precision[], $6) $$
+CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT count bigint)
+ RETURNS bigint
+ AS $$ SELECT count FROM st_valuecount($1, $2, $3, $4, ARRAY[$5]::double precision[], $6) $$
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision, OUT count bigint)
+ RETURNS bigint
+ AS $$ SELECT count FROM st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5) $$
+ LANGUAGE 'sql' IMMUTABLE 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' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision, OUT count bigint)
+ RETURNS bigint
+ AS $$ SELECT count FROM st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4) $$
+ LANGUAGE 'sql' IMMUTABLE 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' IMMUTABLE 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)
+ RETURNS SETOF record
+ AS $$ SELECT value, percent FROM _st_valuecount($1, $2, $3, $4, $5) $$
LANGUAGE 'sql' IMMUTABLE;
-CREATE OR REPLACE FUNCTION st_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision, OUT value double precision, OUT count bigint)
- RETURNS record
- AS $$ SELECT value, count FROM st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5) $$
+CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, nband integer, searchvalues double precision[], roundto double precision, 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_valuecount(rastertable text, rastercolumn text, nband integer, searchvalue double precision, OUT value double precision, OUT count bigint)
- RETURNS record
- AS $$ SELECT value, count FROM st_valuecount($1, $2, $3, TRUE, ARRAY[$4]::double precision[], 0) $$
+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_valuecount(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision, OUT value double precision, OUT count bigint)
- RETURNS record
- AS $$ SELECT value, count FROM st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4) $$
+CREATE OR REPLACE FUNCTION st_valuepercent(rast raster, searchvalues double precision[], roundto double precision, 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_valuecount(rastertable text, rastercolumn text, searchvalue double precision, OUT value double precision, OUT count bigint)
- RETURNS record
- AS $$ SELECT value, count FROM st_valuecount($1, $2, 1, TRUE, ARRAY[$3]::double precision[], 0) $$
+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)
+ 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)
+ 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)
+ 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)
+ RETURNS SETOF record
+ AS $$
+ SELECT
+ value,
+ CASE
+ WHEN sum(count) != 0
+ THEN sum(count) / sum(
+ CASE
+ WHEN percent != 0
+ THEN (count / percent)
+ ELSE 0
+ END
+ )
+ ELSE 0
+ END AS percent
+ FROM _st_valuecount($1, $2, $3, $4, $5, $6)
+ GROUP BY 1
+ ORDER BY 1
+ $$ LANGUAGE 'sql' IMMUTABLE;
+
+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)
+ RETURNS SETOF record
+ AS $$ SELECT value, percent FROM st_valuepercent($1, $2, $3, TRUE, $4, $5) $$
+ LANGUAGE 'sql' IMMUTABLE;
+
+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' IMMUTABLE;
+
+CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalues double precision[], roundto 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, $4) $$
+ LANGUAGE 'sql' IMMUTABLE;
+
+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' IMMUTABLE;
+
+CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, hasnodata boolean, searchvalue double precision, roundto double precision, OUT percent double precision)
+ RETURNS double precision
+ AS $$ SELECT percent FROM st_valuepercent($1, $2, $3, $4, ARRAY[$5]::double precision[], $6) $$
+ LANGUAGE 'sql' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, nband integer, searchvalue double precision, roundto double precision, OUT percent double precision)
+ RETURNS double precision
+ AS $$ SELECT percent FROM st_valuepercent($1, $2, $3, TRUE, ARRAY[$4]::double precision[], $5) $$
+ LANGUAGE 'sql' IMMUTABLE 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' IMMUTABLE STRICT;
+
+CREATE OR REPLACE FUNCTION st_valuepercent(rastertable text, rastercolumn text, searchvalue double precision, roundto double precision, OUT percent double precision)
+ RETURNS double precision
+ AS $$ SELECT percent FROM st_valuepercent($1, $2, 1, TRUE, ARRAY[$3]::double precision[], $4) $$
+ LANGUAGE 'sql' IMMUTABLE 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' IMMUTABLE STRICT;
+
-----------------------------------------------------------------------
-- ST_Reclass
-----------------------------------------------------------------------
--- /dev/null
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, TRUE, ARRAY[]::double precision[], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, TRUE, NULL::double precision[], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, FALSE, NULL::double precision[], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, TRUE, NULL::double precision[], 0.1);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, ARRAY[3.1], 0.1);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, ARRAY[-10]);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, ARRAY[-10], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, ARRAY[-10, 3]);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, TRUE, 3.14, 0.19);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, FALSE, 3.14, 0.01);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, -10, 0.1);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 1, -10);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, -10., 10);
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent(
+ ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ )
+, 3.14159);
+BEGIN;
+CREATE TEMP TABLE test
+ ON COMMIT DROP AS
+ SELECT
+ rast.rast
+ FROM (
+ SELECT ST_SetValue(
+ ST_SetValue(
+ ST_SetValue(
+ ST_AddBand(
+ ST_MakeEmptyRaster(10, 10, 10, 10, 2, 2, 0, 0,-1)
+ , 1, '64BF', 0, 0
+ )
+ , 1, 1, 1, -10
+ )
+ , 1, 5, 4, 0
+ )
+ , 1, 5, 5, 3.14159
+ ) AS rast
+ ) AS rast
+ FULL JOIN (
+ SELECT generate_series(1, 10) AS id
+ ) AS id
+ ON 1 = 1;
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, FALSE, NULL::double precision[], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, ARRAY[-10]::double precision[], 0);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, ARRAY[1]::double precision[]);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', NULL::double precision[], 0.1);
+SELECT round(value::numeric, 3), round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', ARRAY[-1, 3.1]::double precision[], 0.1);
+
+SELECT round(percent::numeric, 3) FROM ST_ValuePercent('test', 'rast', 1, TRUE, NULL::double precision, 0);
+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);
+ROLLBACK;