From: Sandro Santilli Date: Wed, 1 Feb 2012 11:39:36 +0000 (+0000) Subject: Keep initial value when an expression eveluates to null (#1523) X-Git-Tag: 2.0.0alpha3~8 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=59b4fce3b132ccf8976cdf3962533cf263ecd23d;p=postgis Keep initial value when an expression eveluates to null (#1523) git-svn-id: http://svn.osgeo.org/postgis/trunk@8995 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 7561d2b4f..45a0852a1 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -2847,7 +2847,13 @@ Datum RASTER_mapAlgebraExpr(PG_FUNCTION_ARGS) tuptable = SPI_tuptable; tuple = tuptable->vals[0]; - newval = atof(SPI_getvalue(tuple, tupdesc, 1)); + newexpr = SPI_getvalue(tuple, tupdesc, 1); + if ( ! newexpr ) { + POSTGIS_RT_DEBUG(3, "Constant expression evaluated to NULL, keeping initvalue"); + newval = newinitialvalue; + } else { + newval = atof(newexpr); + } SPI_freetuptable(tuptable); @@ -2985,7 +2991,13 @@ Datum RASTER_mapAlgebraExpr(PG_FUNCTION_ARGS) tuptable = SPI_tuptable; tuple = tuptable->vals[0]; - newval = atof(SPI_getvalue(tuple, tupdesc, 1)); + tmp = SPI_getvalue(tuple, tupdesc, 1); + if ( tmp ) { + newval = atof(tmp); + } else { + POSTGIS_RT_DEBUGF(3, "Expression for pixel %d,%d (value %g) evaluated to NULL, skip setting", x+1,y+1,r); + newval = newinitialvalue; + } SPI_freetuptable(tuptable); diff --git a/raster/test/regress/rt_mapalgebraexpr.sql b/raster/test/regress/rt_mapalgebraexpr.sql index 78a87e945..be0dc1a05 100644 --- a/raster/test/regress/rt_mapalgebraexpr.sql +++ b/raster/test/regress/rt_mapalgebraexpr.sql @@ -29,3 +29,7 @@ FROM ST_TestRaster(0, 0, 10) rast, generate_series(6, 8) as x, generate_series(2, 4) as y ORDER BY x, y; + +-- Test evaluations to null (see #1523) +SELECT 'T11.1', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, 'g from (select NULL as g) as foo', 2), 1, 1) FROM ST_TestRaster(0, 0, 10) rast; +SELECT 'T11.2', ST_Value(rast, 1, 1), ST_Value(ST_MapAlgebraExpr(rast, 1, NULL, 'g from (select RAST,NULL as g) as foo', 2), 1, 1) FROM ST_TestRaster(0, 0, 10) rast; diff --git a/raster/test/regress/rt_mapalgebraexpr_expected b/raster/test/regress/rt_mapalgebraexpr_expected index 3aa67d4a7..d89238726 100644 --- a/raster/test/regress/rt_mapalgebraexpr_expected +++ b/raster/test/regress/rt_mapalgebraexpr_expected @@ -22,3 +22,5 @@ T10.7.4|10|28 T10.8.2|10|50 T10.8.3|10|37 T10.8.4|10|30 +T11.1|10|2 +T11.2|10|2