]> granicus.if.org Git - postgis/commitdiff
Added spatial_index column to raster_columns view. Ticket #2361
authorBborie Park <bkpark at ucdavis.edu>
Thu, 20 Jun 2013 15:57:44 +0000 (15:57 +0000)
committerBborie Park <bkpark at ucdavis.edu>
Thu, 20 Jun 2013 15:57:44 +0000 (15:57 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@11553 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
raster/rt_pg/rtpostgis.sql.in
raster/test/regress/check_raster_columns.sql

diff --git a/NEWS b/NEWS
index af4b9f07a234d284865d94fd77b7792568c6f911..066ed9adcfd3831904dfd1df097a3c27a1327c70 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,7 @@ PostGIS 2.2.0
  * Enhancements *
 
   - Added missing variants of ST_TPI(), ST_TRI() and ST_Roughness()
+  - #2361, Added spatial_index column to raster_columns view
 
  * Bug Fixes *
 
index 4a31cd08818248f1b308d9c15c19bf3839ea0e33..bcafac3e927bd2425610af6b8efe5871428fcb58 100644 (file)
@@ -7504,6 +7504,31 @@ CREATE OR REPLACE FUNCTION _drop_raster_constraint_out_db(rastschema name, rastt
        LANGUAGE 'sql' VOLATILE STRICT
        COST 100;
 
+CREATE OR REPLACE FUNCTION _raster_constraint_info_index(rastschema name, rasttable name, rastcolumn name)
+       RETURNS boolean AS $$
+               SELECT
+                       TRUE
+               FROM pg_catalog.pg_class c
+               JOIN pg_catalog.pg_index i
+                       ON i.indexrelid = c.oid
+               JOIN pg_catalog.pg_class c2
+                       ON i.indrelid = c2.oid
+               JOIN pg_catalog.pg_namespace n
+                       ON n.oid = c.relnamespace
+               JOIN pg_am am
+                       ON c.relam = am.oid
+               JOIN pg_attribute att
+                       ON att.attrelid = c2.oid
+                               AND pg_catalog.format_type(att.atttypid, att.atttypmod) = 'raster'
+               WHERE c.relkind IN ('i')
+                       AND n.nspname = $1
+                       AND c2.relname = $2
+                       AND att.attname = $3
+                       AND am.amname = 'gist'
+                       AND strpos(pg_catalog.pg_get_expr(i.indexprs, i.indrelid), att.attname) > 0;
+       $$ LANGUAGE sql STABLE STRICT
+  COST 100;
+
 ------------------------------------------------------------------------------
 -- AddRasterConstraints
 ------------------------------------------------------------------------------
@@ -8019,7 +8044,8 @@ CREATE OR REPLACE VIEW raster_columns AS
                _raster_constraint_info_pixel_types(n.nspname, c.relname, a.attname) AS pixel_types,
                _raster_constraint_info_nodata_values(n.nspname, c.relname, a.attname) AS nodata_values,
                _raster_constraint_info_out_db(n.nspname, c.relname, a.attname) AS out_db,
-               _raster_constraint_info_extent(n.nspname, c.relname, a.attname) AS extent
+               _raster_constraint_info_extent(n.nspname, c.relname, a.attname) AS extent,
+               COALESCE(_raster_constraint_info_index(n.nspname, c.relname, a.attname), FALSE) AS spatial_index
        FROM
                pg_class c,
                pg_attribute a,
index 2222ed7670f3b24b715aa80b4fdeb6cad6ee0bd5..518ee6eba388b0a6d33370baf2fbccd87fb8725a 100644 (file)
@@ -2,7 +2,7 @@
 -- $Id$
 --
 -- Copyright (c) 2010 Mateusz Loskot <mateusz@loskot.net>
--- Copyright (C) 2011 Regents of the University of California
+-- Copyright (C) 2011 - 2013 Regents of the University of California
 --   <bkpark@ucdavis.edu>
 --
 -- This is free software; you can redistribute and/or modify it under
@@ -106,6 +106,26 @@ SELECT make_test_raster(0, 3, 3, 1, 0);
 SELECT DropRasterConstraints(current_schema(), 'test_raster_columns', 'rast'::name, 'regular_blocking');
 SELECT r_table_name, r_raster_column, srid, scale_x, scale_y, blocksize_x, blocksize_y, same_alignment, regular_blocking, num_bands, pixel_types, nodata_values, ST_AsEWKT(extent) FROM raster_columns WHERE r_table_name = 'test_raster_columns';
 
+-- check spatial_index
+SELECT
+       CASE
+               WHEN spatial_index IS FALSE
+                       THEN NULL
+               ELSE FALSE
+       END
+FROM raster_columns WHERE r_table_name = 'test_raster_columns';
+CREATE INDEX test_raster_columns_rast_gist
+       ON test_raster_columns
+       USING gist
+       (st_convexhull(rast));
+SELECT
+       CASE
+               WHEN spatial_index IS FALSE
+                       THEN FALSE
+               ELSE NULL
+       END
+FROM raster_columns WHERE r_table_name = 'test_raster_columns';
+
 -- ticket #2215
 CREATE TABLE test_raster_columns_2 AS
        SELECT rid, rast FROM test_raster_columns;