From: Sandro Santilli Date: Fri, 20 Jun 2014 10:37:22 +0000 (+0000) Subject: Implement ST_MemSize(raster) X-Git-Tag: 2.2.0rc1~1078 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=23898d4d5188d8cde837297327b79203df30647a;p=postgis Implement ST_MemSize(raster) Closes #2770 Includes testcases, but no documentation git-svn-id: http://svn.osgeo.org/postgis/trunk@12630 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/NEWS b/NEWS index 302a27428..15732178a 100644 --- a/NEWS +++ b/NEWS @@ -17,6 +17,7 @@ PostGIS 2.2.0 * New Features * + - #2770, ST_MemSize(raster) - Add postgis_noop(raster) - Added missing variants of ST_TPI(), ST_TRI() and ST_Roughness() - Added GUC postgis.gdal_enabled_drivers to specify GDAL config diff --git a/raster/rt_pg/rtpg_utility.c b/raster/rt_pg/rtpg_utility.c index 7b3ae06b5..31e05a606 100644 --- a/raster/rt_pg/rtpg_utility.c +++ b/raster/rt_pg/rtpg_utility.c @@ -133,3 +133,15 @@ Datum RASTER_minPossibleValue(PG_FUNCTION_ARGS) PG_RETURN_FLOAT8(pixsize); } +/** find the detoasted size of a value */ +Datum RASTER_memsize(PG_FUNCTION_ARGS); +PG_FUNCTION_INFO_V1(RASTER_memsize); +Datum RASTER_memsize(PG_FUNCTION_ARGS) +{ + void *detoasted = PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + size_t size = VARSIZE(detoasted); + PG_FREE_IF_COPY(detoasted,0); + PG_RETURN_INT32(size); +} + + diff --git a/raster/rt_pg/rtpostgis.sql.in b/raster/rt_pg/rtpostgis.sql.in index a0fa29f8f..a805150df 100644 --- a/raster/rt_pg/rtpostgis.sql.in +++ b/raster/rt_pg/rtpostgis.sql.in @@ -279,6 +279,12 @@ CREATE OR REPLACE FUNCTION st_summary(rast raster) END; $$ LANGUAGE 'plpgsql' STABLE STRICT; +-- Availability: 2.2.0 +CREATE OR REPLACE FUNCTION ST_MemSize(raster) + RETURNS int4 + AS 'MODULE_PATHNAME', 'RASTER_memsize' + LANGUAGE 'c' IMMUTABLE STRICT; + ----------------------------------------------------------------------- -- Constructor ST_MakeEmptyRaster ----------------------------------------------------------------------- diff --git a/raster/test/regress/rt_utility.sql b/raster/test/regress/rt_utility.sql index aa31b20c0..61b1a2dc8 100644 --- a/raster/test/regress/rt_utility.sql +++ b/raster/test/regress/rt_utility.sql @@ -433,3 +433,6 @@ SELECT ST_Summary(rast) FROM raster_outdb_template ORDER BY rid; + +SELECT 'ms1', ST_MemSize(ST_MakeEmptyRaster(10, 10, 0, 0, 1, -1, 0, 0, 0)); +SELECT 'ms2', ST_MemSize(rast) from raster_outdb_template order by rid; diff --git a/raster/test/regress/rt_utility_expected b/raster/test/regress/rt_utility_expected index ec528479b..fc714cafd 100644 --- a/raster/test/regress/rt_utility_expected +++ b/raster/test/regress/rt_utility_expected @@ -51,3 +51,8 @@ Skewed raster of 10x10 pixels has 1 band and extent of BOX(0 -10,10 0.0001) 4|Raster of 90x90 pixels has 2 bands and extent of BOX(0 -90,90 0) band 1 of pixtype 8BUI is out-db with NODATA value of 255 band 2 of pixtype 8BUI is in-db with NODATA value of 0 +ms1|64 +ms2|280 +ms2|280 +ms2|8240 +ms2|8240