-- test line
-- test polygon smaller than pixel
-- test and optimize raster totally included in polygon
+
+-----------------------------------------------------------------------
+-- ST_Clip
+-----------------------------------------------------------------------
+
CREATE OR REPLACE FUNCTION ST_Clip(rast raster, band int, geom geometry, nodata float8 DEFAULT null, trimraster boolean DEFAULT false)
RETURNS raster AS
$$
-- $Id$
--
-- Copyright (c) 2010 Mateusz Loskot <mateusz@loskot.net>
+-- Copyright (C) 2011 Regents of the University of California
+-- <bkpark@ucdavis.edu>
--
-- This is free software; you can redistribute and/or modify it under
-- the terms of the GNU General Public Licence. See the COPYING file.
-----------------------------------------------------------------------
-----------------------------------------------------------------------
---- Test RASTER_COLUMNS table
+--- Test RASTER_COLUMNS
-----------------------------------------------------------------------
-- Check table exists
SELECT c.relname FROM pg_class c, pg_views v
WHERE c.relname = v.viewname
- AND v.viewname = 'raster_columns'
+ AND v.viewname = 'raster_columns';
+
+-----------------------------------------------------------------------
+--- Test AddRasterConstraints and DropRasterConstraints
+-----------------------------------------------------------------------
+
+DROP TABLE IF EXISTS test_raster_columns;
+CREATE TABLE test_raster_columns (
+ rid integer,
+ rast raster
+);
+CREATE OR REPLACE FUNCTION make_test_raster(
+ rid integer,
+ width integer DEFAULT 2,
+ height integer DEFAULT 2,
+ ul_x double precision DEFAULT 0,
+ ul_y double precision DEFAULT 0,
+ skew_x double precision DEFAULT 0,
+ skew_y double precision DEFAULT 0,
+ initvalue double precision DEFAULT 1,
+ nodataval double precision DEFAULT 0
+)
+ RETURNS void
+ AS $$
+ DECLARE
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0);
+ rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval);
+
+
+ INSERT INTO test_raster_columns VALUES (rid, rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+-- no skew
+SELECT make_test_raster(0, 2, 2, -2, -2);
+SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2);
+SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3);
+SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4);
+SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5);
+
+SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name);
+SELECT * FROM raster_columns;
+
+SELECT DropRasterConstraints(current_schema(),'test_raster_columns', 'rast'::name);
+SELECT * FROM raster_columns;
+
+SELECT AddRasterConstraints('test_raster_columns', 'rast', 'srid', 'extent', 'blocksize');
+SELECT * FROM raster_columns;
+
+SELECT DropRasterConstraints('test_raster_columns', 'rast', 'scale');
+SELECT * FROM raster_columns;
+
+SELECT AddRasterConstraints('test_raster_columns', 'rast', FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE);
+SELECT * FROM raster_columns;
+
+SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast', 'scale');
+SELECT * FROM raster_columns;
+
+DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision);
+DROP TABLE IF EXISTS test_raster_columns;
raster_columns
+NOTICE: table "test_raster_columns" does not exist, skipping
+NOTICE: Adding SRID constraint
+NOTICE: Adding scale-X constraint
+NOTICE: Adding scale-Y constraint
+NOTICE: Adding blocksize-X constraint
+NOTICE: Adding blocksize-Y constraint
+NOTICE: Adding alignment constraint
+NOTICE: Adding number of bands constraint
+NOTICE: Adding pixel type constraint
+NOTICE: Adding nodata value constraint
+NOTICE: Adding maximum extent constraint
+t
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+NOTICE: Dropping SRID constraint
+NOTICE: Dropping scale-X constraint
+NOTICE: Dropping scale-Y constraint
+NOTICE: Dropping blocksize-X constraint
+NOTICE: Dropping blocksize-Y constraint
+NOTICE: Dropping alignment constraint
+NOTICE: Dropping regular blocking constraint
+NOTICE: The constraint "enforce_regular_blocking_rast" does not exist. Skipping
+PL/pgSQL function "droprasterconstraints" line 48 at RETURN
+NOTICE: Dropping number of bands constraint
+NOTICE: Dropping pixel type constraint
+NOTICE: Dropping nodata value constraint
+NOTICE: Dropping maximum extent constraint
+t
+postgis_reg|userland|test_raster_columns|rast|0|||||f|f||||
+NOTICE: Adding SRID constraint
+NOTICE: Adding maximum extent constraint
+NOTICE: Adding blocksize-X constraint
+NOTICE: Adding blocksize-Y constraint
+t
+postgis_reg|userland|test_raster_columns|rast|0|||2|2|f|f||||0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+NOTICE: Dropping scale-X constraint
+NOTICE: The constraint "enforce_scalex_rast" does not exist. Skipping
+PL/pgSQL function "droprasterconstraints" line 65 at assignment
+NOTICE: Dropping scale-Y constraint
+NOTICE: The constraint "enforce_scaley_rast" does not exist. Skipping
+PL/pgSQL function "droprasterconstraints" line 67 at assignment
+t
+postgis_reg|userland|test_raster_columns|rast|0|||2|2|f|f||||0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+NOTICE: Adding scale-X constraint
+NOTICE: Adding scale-Y constraint
+NOTICE: Adding alignment constraint
+NOTICE: Adding number of bands constraint
+NOTICE: Adding nodata value constraint
+NOTICE: Adding maximum extent constraint
+NOTICE: The constraint "enforce_max_extent_rast" already exists. To replace the existing constraint, delete the constraint and call ApplyRasterConstraints again
+PL/pgSQL function "addrasterconstraints" line 96 at assignment
+PL/pgSQL function "addrasterconstraints" line 48 at RETURN
+t
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1||{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+ERROR: The table 'userland' does not occur in the search_path
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1||{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
-- $Id$
--
-- Copyright (c) 2010 Mateusz Loskot <mateusz@loskot.net>
+-- Copyright (C) 2011 Regents of the University of California
+-- <bkpark@ucdavis.edu>
--
-- This is free software; you can redistribute and/or modify it under
-- the terms of the GNU General Public Licence. See the COPYING file.
-----------------------------------------------------------------------
-----------------------------------------------------------------------
---- Test RASTER_OVERVIEWS table
+--- Test RASTER_OVERVIEWS
-----------------------------------------------------------------------
-- Check table exists
SELECT c.relname FROM pg_class c, pg_views v
WHERE c.relname = v.viewname
- AND v.viewname = 'raster_overviews'
+ AND v.viewname = 'raster_overviews';
+
+-----------------------------------------------------------------------
+--- Test AddOverviewConstraints and DropOverviewConstraints
+-----------------------------------------------------------------------
+
+DROP TABLE IF EXISTS test_raster_columns;
+CREATE TABLE test_raster_columns (
+ rid integer,
+ rast raster
+);
+DROP TABLE IF EXISTS test_raster_overviews;
+CREATE OR REPLACE FUNCTION make_test_raster(
+ rid integer,
+ width integer DEFAULT 2,
+ height integer DEFAULT 2,
+ ul_x double precision DEFAULT 0,
+ ul_y double precision DEFAULT 0,
+ skew_x double precision DEFAULT 0,
+ skew_y double precision DEFAULT 0,
+ initvalue double precision DEFAULT 1,
+ nodataval double precision DEFAULT 0
+)
+ RETURNS void
+ AS $$
+ DECLARE
+ x int;
+ y int;
+ rast raster;
+ BEGIN
+ rast := ST_MakeEmptyRaster(width, height, ul_x, ul_y, 1, 1, skew_x, skew_y, 0);
+ rast := ST_AddBand(rast, 1, '8BUI', initvalue, nodataval);
+
+
+ INSERT INTO test_raster_columns VALUES (rid, rast);
+
+ RETURN;
+ END;
+ $$ LANGUAGE 'plpgsql';
+-- no skew
+SELECT make_test_raster(0, 2, 2, -2, -2);
+SELECT make_test_raster(1, 2, 2, 0, 0, 0, 0, 2);
+SELECT make_test_raster(2, 2, 2, 1, -1, 0, 0, 3);
+SELECT make_test_raster(3, 2, 2, 1, 1, 0, 0, 4);
+SELECT make_test_raster(4, 2, 2, 2, 2, 0, 0, 5);
+
+SELECT *
+INTO test_raster_overviews
+FROM test_raster_columns;
+SELECT * FROM raster_columns;
+SELECT * FROM raster_overviews;
+
+SELECT AddRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name);
+SELECT * FROM raster_columns;
+SELECT * FROM raster_overviews;
+
+SELECT AddOverviewConstraints('test_raster_overviews', 'rast', 'test_raster_columns', 'rast', 1);
+SELECT * FROM raster_columns;
+SELECT * FROM raster_overviews;
+
+SELECT DropOverviewConstraints(current_schema(), 'test_raster_overviews', 'rast');
+SELECT * FROM raster_columns;
+SELECT * FROM raster_overviews;
+
+SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name);
+SELECT * FROM raster_columns;
+SELECT * FROM raster_overviews;
+
+DROP FUNCTION make_test_raster(integer, integer, integer, double precision, double precision, double precision, double precision, double precision, double precision);
+DROP TABLE IF EXISTS test_raster_overviews;
+DROP TABLE IF EXISTS test_raster_columns;
raster_overviews
+NOTICE: table "test_raster_columns" does not exist, skipping
+NOTICE: table "test_raster_overviews" does not exist, skipping
+postgis_reg|userland|test_raster_columns|rast|0|||||f|f||||
+postgis_reg|userland|test_raster_overviews|rast|0|||||f|f||||
+NOTICE: Adding SRID constraint
+NOTICE: Adding scale-X constraint
+NOTICE: Adding scale-Y constraint
+NOTICE: Adding blocksize-X constraint
+NOTICE: Adding blocksize-Y constraint
+NOTICE: Adding alignment constraint
+NOTICE: Adding number of bands constraint
+NOTICE: Adding pixel type constraint
+NOTICE: Adding nodata value constraint
+NOTICE: Adding maximum extent constraint
+t
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+postgis_reg|userland|test_raster_overviews|rast|0|||||f|f||||
+t
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+postgis_reg|userland|test_raster_overviews|rast|0|||||f|f||||
+postgis_reg|userland|test_raster_overviews|rast|postgis_reg|userland|test_raster_columns|rast|1
+t
+postgis_reg|userland|test_raster_columns|rast|0|1|1|2|2|t|f|1|{8BUI}|{0}|0103000000010000000800000000000000000000C000000000000000C000000000000000C000000000000000000000000000000040000000000000104000000000000010400000000000001040000000000000104000000000000000400000000000000840000000000000F0BF000000000000000000000000000000C000000000000000C000000000000000C0
+postgis_reg|userland|test_raster_overviews|rast|0|||||f|f||||
+NOTICE: Dropping SRID constraint
+NOTICE: Dropping scale-X constraint
+NOTICE: Dropping scale-Y constraint
+NOTICE: Dropping blocksize-X constraint
+NOTICE: Dropping blocksize-Y constraint
+NOTICE: Dropping alignment constraint
+NOTICE: Dropping regular blocking constraint
+NOTICE: The constraint "enforce_regular_blocking_rast" does not exist. Skipping
+PL/pgSQL function "droprasterconstraints" line 48 at RETURN
+NOTICE: Dropping number of bands constraint
+NOTICE: Dropping pixel type constraint
+NOTICE: Dropping nodata value constraint
+NOTICE: Dropping maximum extent constraint
+t
+postgis_reg|userland|test_raster_columns|rast|0|||||f|f||||
+postgis_reg|userland|test_raster_overviews|rast|0|||||f|f||||