From: Bborie Park Date: Mon, 15 Oct 2012 03:34:15 +0000 (+0000) Subject: Changed how ST_MapAlgebra regression test runs on PostgreSQL 9.0 as X-Git-Tag: 2.1.0beta2~538 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9d2003cf480c2e051571bb2fdb35a55090e27ff3;p=postgis Changed how ST_MapAlgebra regression test runs on PostgreSQL 9.0 as usage of "GROUP BY raster" does not work. Ticket is #2048. git-svn-id: http://svn.osgeo.org/postgis/trunk@10429 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/raster/rt_pg/rt_pg.c b/raster/rt_pg/rt_pg.c index 640f6ec56..d9789ea59 100644 --- a/raster/rt_pg/rt_pg.c +++ b/raster/rt_pg/rt_pg.c @@ -14146,11 +14146,11 @@ Datum RASTER_nMapAlgebra(PG_FUNCTION_ARGS) elog(NOTICE, "Function provided is VOLATILE. Unless required and for best performance, function should be IMMUTABLE or STABLE"); /* prep function call data */ - #if POSTGIS_PGSQL_VERSION > 90 - InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, InvalidOid, NULL, NULL); - #else - InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, NULL, NULL); - #endif +#if POSTGIS_PGSQL_VERSION > 90 + InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, InvalidOid, NULL, NULL); +#else + InitFunctionCallInfoData(arg->callback.ufc_info, &(arg->callback.ufl_info), arg->callback.ufl_info.fn_nargs, NULL, NULL); +#endif memset(arg->callback.ufc_info.argnull, FALSE, arg->callback.ufl_info.fn_nargs); diff --git a/raster/test/regress/rt_mapalgebra.sql b/raster/test/regress/rt_mapalgebra.sql index 770fc618d..96167deed 100644 --- a/raster/test/regress/rt_mapalgebra.sql +++ b/raster/test/regress/rt_mapalgebra.sql @@ -110,78 +110,194 @@ INSERT INTO raster_nmapalgebra_in SELECT 18, ST_AddBand(ST_MakeEmptyRaster(2, 2, 4, -4, 1, -1, 0, 0, 0), 1, '16BUI', 300, 0) AS rast ; -WITH foo AS ( +DO $$ DECLARE r record; +BEGIN +-- this ONLY works for PostgreSQL version 9.1 or higher +IF array_to_string(regexp_matches(split_part(version(), ' ', 2), E'([0-9]+)\.([0-9]+)'), '')::int > 90 THEN + WITH foo AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1 + ) AS rast + FROM raster_nmapalgebra_in t1 + CROSS JOIN raster_nmapalgebra_in t2 + WHERE t1.rid = 10 + AND t2.rid BETWEEN 10 AND 18 + AND ST_Intersects(t1.rast, t2.rast) + GROUP BY t1.rid, t1.rast + ) SELECT - t1.rid, - ST_MapAlgebra( - ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], - 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, - '32BUI', - 'CUSTOM', t1.rast, - 1, 1 - ) AS rast - FROM raster_nmapalgebra_in t1 - CROSS JOIN raster_nmapalgebra_in t2 - WHERE t1.rid = 10 - AND t2.rid BETWEEN 10 AND 18 - AND ST_Intersects(t1.rast, t2.rast) - GROUP BY t1.rid, t1.rast -) -SELECT - rid, - (ST_Metadata(rast)), - (ST_BandMetadata(rast, 1)), - ST_Value(rast, 1, 1, 1) -FROM foo; - -WITH foo AS ( + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM foo; + RAISE NOTICE 'record = %', r; + + WITH foo AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1 + ) AS rast + FROM raster_nmapalgebra_in t1 + CROSS JOIN raster_nmapalgebra_in t2 + WHERE t1.rid = 14 + AND t2.rid BETWEEN 10 AND 18 + AND ST_Intersects(t1.rast, t2.rast) + GROUP BY t1.rid, t1.rast + ) SELECT - t1.rid, - ST_MapAlgebra( - ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], - 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, - '32BUI', - 'CUSTOM', t1.rast, - 1, 1 - ) AS rast - FROM raster_nmapalgebra_in t1 - CROSS JOIN raster_nmapalgebra_in t2 - WHERE t1.rid = 14 - AND t2.rid BETWEEN 10 AND 18 - AND ST_Intersects(t1.rast, t2.rast) - GROUP BY t1.rid, t1.rast -) -SELECT - rid, - (ST_Metadata(rast)), - (ST_BandMetadata(rast, 1)), - ST_Value(rast, 1, 1, 1) -FROM foo; - -WITH foo AS ( + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM foo; + RAISE NOTICE 'record = %', r; + + WITH foo AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1, + '1000' + ) AS rast + FROM raster_nmapalgebra_in t1 + CROSS JOIN raster_nmapalgebra_in t2 + WHERE t1.rid = 17 + AND t2.rid BETWEEN 10 AND 18 + AND ST_Intersects(t1.rast, t2.rast) + GROUP BY t1.rid, t1.rast + ) SELECT - t1.rid, - ST_MapAlgebra( - ARRAY[ROW(ST_Union(t2.rast), 1)]::rastbandarg[], - 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, - '32BUI', - 'CUSTOM', t1.rast, - 1, 1, - '1000' - ) AS rast - FROM raster_nmapalgebra_in t1 - CROSS JOIN raster_nmapalgebra_in t2 - WHERE t1.rid = 17 - AND t2.rid BETWEEN 10 AND 18 - AND ST_Intersects(t1.rast, t2.rast) - GROUP BY t1.rid, t1.rast -) -SELECT - rid, - (ST_Metadata(rast)), - (ST_BandMetadata(rast, 1)), - ST_Value(rast, 1, 1, 1) -FROM foo; + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM foo; + RAISE NOTICE 'record = %', r; + +ELSE + + WITH foo AS ( + SELECT + t1.rid, + ST_Union(t2.rast) AS rast + FROM raster_nmapalgebra_in t1 + JOIN raster_nmapalgebra_in t2 + ON ST_Intersects(t1.rast, t2.rast) + AND t2.rid BETWEEN 10 AND 18 + WHERE t1.rid = 10 + GROUP BY t1.rid + ), bar AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(t2.rast, 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1 + ) AS rast + FROM raster_nmapalgebra_in t1 + JOIN foo t2 + ON t1.rid = t2.rid + ) + SELECT + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM bar; + RAISE NOTICE 'record = %', r; + + WITH foo AS ( + SELECT + t1.rid, + ST_Union(t2.rast) AS rast + FROM raster_nmapalgebra_in t1 + JOIN raster_nmapalgebra_in t2 + ON ST_Intersects(t1.rast, t2.rast) + AND t2.rid BETWEEN 10 AND 18 + WHERE t1.rid = 14 + GROUP BY t1.rid + ), bar AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(t2.rast, 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1 + ) AS rast + FROM raster_nmapalgebra_in t1 + JOIN foo t2 + ON t1.rid = t2.rid + ) + SELECT + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM bar; + RAISE NOTICE 'record = %', r; + + WITH foo AS ( + SELECT + t1.rid, + ST_Union(t2.rast) AS rast + FROM raster_nmapalgebra_in t1 + JOIN raster_nmapalgebra_in t2 + ON ST_Intersects(t1.rast, t2.rast) + AND t2.rid BETWEEN 10 AND 18 + WHERE t1.rid = 17 + GROUP BY t1.rid + ), bar AS ( + SELECT + t1.rid, + ST_MapAlgebra( + ARRAY[ROW(t2.rast, 1)]::rastbandarg[], + 'raster_nmapalgebra_test(double precision[], int[], text[])'::regprocedure, + '32BUI', + 'CUSTOM', t1.rast, + 1, 1, + '1000' + ) AS rast + FROM raster_nmapalgebra_in t1 + JOIN foo t2 + ON t1.rid = t2.rid + ) + SELECT + rid, + (ST_Metadata(rast)), + (ST_BandMetadata(rast, 1)), + ST_Value(rast, 1, 1, 1) + INTO r + FROM bar; + RAISE NOTICE 'record = %', r; + +END IF; + +END $$; INSERT INTO raster_nmapalgebra_in SELECT 20, ST_AddBand(ST_MakeEmptyRaster(2, 2, 0, 0, 1, -1, 0, 0, 0), 1, '16BUI', 1, 0) AS rast UNION ALL diff --git a/raster/test/regress/rt_mapalgebra_expected b/raster/test/regress/rt_mapalgebra_expected index f7309c7ca..d2251f402 100644 --- a/raster/test/regress/rt_mapalgebra_expected +++ b/raster/test/regress/rt_mapalgebra_expected @@ -98,7 +98,7 @@ NOTICE: userargs = NOTICE: value = {{{1,1,2},{1,1,2},{10,10,20}}} NOTICE: pos = [0:1][1:2]={{2,2},{2,2}} NOTICE: userargs = -10|(0,0,2,2,1,-1,0,0,0,1)|(32BUI,0,f,)|255 +NOTICE: record = (10,"(0,0,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",255) NOTICE: value = {{{1,2,2},{10,20,20},{10,20,20}}} NOTICE: pos = [0:1][1:2]={{1,1},{3,3}} NOTICE: userargs = @@ -111,7 +111,7 @@ NOTICE: userargs = NOTICE: value = {{{20,20,30},{20,20,30},{200,200,300}}} NOTICE: pos = [0:1][1:2]={{2,2},{4,4}} NOTICE: userargs = -14|(2,-2,2,2,1,-1,0,0,0,1)|(32BUI,0,f,)|255 +NOTICE: record = (14,"(2,-2,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",255) NOTICE: value = {{{10,20,20},{100,200,200},{100,200,200}}} NOTICE: pos = [0:1][1:2]={{1,1},{3,3}} NOTICE: userargs = {1000} @@ -124,7 +124,8 @@ NOTICE: userargs = {1000} NOTICE: value = {{{200,200,300},{200,200,300},{NULL,NULL,NULL}}} NOTICE: pos = [0:1][1:2]={{2,2},{4,4}} NOTICE: userargs = {1000} -17|(2,-4,2,2,1,-1,0,0,0,1)|(32BUI,0,f,)|1000 +NOTICE: record = (17,"(2,-4,2,2,1,-1,0,0,0,1)","(32BUI,0,f,)",1000) +DO NOTICE: value = {{{1}},{{2}}} NOTICE: pos = [0:2][1:2]={{1,1},{2,2},{1,1}} NOTICE: userargs =