]> granicus.if.org Git - postgis/commitdiff
Changed how ST_MapAlgebra regression test runs on PostgreSQL 9.0 as
authorBborie Park <bkpark at ucdavis.edu>
Mon, 15 Oct 2012 03:34:15 +0000 (03:34 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Mon, 15 Oct 2012 03:34:15 +0000 (03:34 +0000)
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

raster/rt_pg/rt_pg.c
raster/test/regress/rt_mapalgebra.sql
raster/test/regress/rt_mapalgebra_expected

index 640f6ec569c94a2cc4c2d0ebeaabdcc6b74f242f..d9789ea5992f48e215148f1332ca3a943116153f 100644 (file)
@@ -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);
                
 
index 770fc618dd5df7e890806cb06c083b035cf73788..96167deed4b2fdc895d8edf2627307472264384a 100644 (file)
@@ -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
index f7309c7caa2d085d6ebbde1884797ff0ab53956f..d2251f402ca40386f945d9bcf6b62f69e86ae1a9 100644 (file)
@@ -98,7 +98,7 @@ NOTICE:  userargs = <NULL>
 NOTICE:  value = {{{1,1,2},{1,1,2},{10,10,20}}}
 NOTICE:  pos = [0:1][1:2]={{2,2},{2,2}}
 NOTICE:  userargs = <NULL>
-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 = <NULL>
@@ -111,7 +111,7 @@ NOTICE:  userargs = <NULL>
 NOTICE:  value = {{{20,20,30},{20,20,30},{200,200,300}}}
 NOTICE:  pos = [0:1][1:2]={{2,2},{4,4}}
 NOTICE:  userargs = <NULL>
-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 = <NULL>