From 8fc328f3bf344d194480d8cd7b0ffc94fd6e2f39 Mon Sep 17 00:00:00 2001 From: Bborie Park Date: Sun, 1 Jan 2012 21:04:21 +0000 Subject: [PATCH] Added legacy.sql which adds renamed and removed columns to raster_columns and raster_overviews. This will allow 3rd party software that hasn't been updated to the current structures of raster_columns and raster_overviews to still operate successfully. git-svn-id: http://svn.osgeo.org/postgis/trunk@8643 b70326c6-7e19-0410-871a-916f4a2858ee --- raster/rt_pg/.svnignore | 3 + raster/rt_pg/Makefile.in | 4 +- raster/rt_pg/legacy.sql.in.c | 122 +++++++++++++++++++++++++++++++++++ 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 raster/rt_pg/legacy.sql.in.c diff --git a/raster/rt_pg/.svnignore b/raster/rt_pg/.svnignore index 816d02cd2..f565428a9 100644 --- a/raster/rt_pg/.svnignore +++ b/raster/rt_pg/.svnignore @@ -7,3 +7,6 @@ rtpostgis_upgrade.sql rtpostgis_upgrade_20_minor.sql rtpostgis_upgrade_cleanup.sql rtpostgis_upgrade_cleanup.sql.in +uninstall_rtpostgis.sql +legacy.sql +legacy.sql.in diff --git a/raster/rt_pg/Makefile.in b/raster/rt_pg/Makefile.in index c432299e3..9fb58cc37 100644 --- a/raster/rt_pg/Makefile.in +++ b/raster/rt_pg/Makefile.in @@ -14,11 +14,11 @@ MODULE_big=rtpostgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ MODULEDIR=contrib/postgis-@POSTGIS_MAJOR_VERSION@.@POSTGIS_MINOR_VERSION@ # Files to be copied to the contrib/ directory -DATA_built=rtpostgis.sql rtpostgis_drop.sql rtpostgis_upgrade_20_minor.sql rtpostgis_upgrade_cleanup.sql uninstall_rtpostgis.sql +DATA_built=rtpostgis.sql rtpostgis_drop.sql rtpostgis_upgrade_20_minor.sql rtpostgis_upgrade_cleanup.sql uninstall_rtpostgis.sql legacy.sql DATA= # SQL objects (files requiring C pre-processing) -SQL_OBJS=rtpostgis.sql.in rtpostgis_drop.sql.in rtpostgis_upgrade_cleanup.sql.in +SQL_OBJS=rtpostgis.sql.in rtpostgis_drop.sql.in rtpostgis_upgrade_cleanup.sql.in legacy.sql.in # Objects to build using PGXS OBJS=rt_pg.o diff --git a/raster/rt_pg/legacy.sql.in.c b/raster/rt_pg/legacy.sql.in.c new file mode 100644 index 000000000..aedbf27ac --- /dev/null +++ b/raster/rt_pg/legacy.sql.in.c @@ -0,0 +1,122 @@ +------------------------------------------------------------------------------- +-- +-- $Id$ +-- +-- PostGIS Raster - Raster Type for PostGIS +-- http://trac.osgeo.org/postgis/wiki/WKTRaster +-- +-- Copyright (C) 2012 Regents of the University of California +-- +-- +-- This is free software; you can redistribute and/or modify it under +-- the terms of the GNU General Public Licence. See the COPYING file. +-- +------------------------------------------------------------------------------- + +-- +-- For legacy access to OLD versions of raster_columns AND raster_overviews +-- + +-- raster_columns and raster_overviews tables no longer exist +-- if tables found, rename tables +DROP FUNCTION IF EXISTS _rename_raster_tables(); +CREATE OR REPLACE FUNCTION _rename_raster_tables() + RETURNS void AS $$ + DECLARE + cnt int; + BEGIN + SELECT count(*) INTO cnt + FROM pg_class c + JOIN pg_namespace n + ON c.relnamespace = n.oid + WHERE c.relname = 'raster_columns' + AND c.relkind = 'r'::char + AND NOT pg_is_other_temp_schema(c.relnamespace); + + IF cnt > 0 THEN + EXECUTE 'ALTER TABLE raster_columns RENAME TO deprecated_raster_columns'; + END IF; + + SELECT count(*) INTO cnt + FROM pg_class c + JOIN pg_namespace n + ON c.relnamespace = n.oid + WHERE c.relname = 'raster_overviews' + AND c.relkind = 'r'::char + AND NOT pg_is_other_temp_schema(c.relnamespace); + + IF cnt > 0 THEN + EXECUTE 'ALTER TABLE raster_overviews RENAME TO deprecated_raster_overviews'; + END IF; + + END; + $$ LANGUAGE 'plpgsql' VOLATILE; +SELECT _rename_raster_tables(); +DROP FUNCTION _rename_raster_tables(); + +-- drop raster_columns and raster_overviews views +DROP VIEW IF EXISTS raster_overviews; +DROP VIEW IF EXISTS raster_columns; + +CREATE OR REPLACE VIEW raster_columns AS + SELECT + current_database() AS r_table_catalog, + n.nspname AS r_table_schema, + c.relname AS r_table_name, + a.attname AS r_raster_column, + COALESCE(_raster_constraint_info_srid(n.nspname, c.relname, a.attname), (SELECT ST_SRID('POINT(0 0)'::geometry))) AS srid, + _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'x') AS scale_x, + _raster_constraint_info_scale(n.nspname, c.relname, a.attname, 'y') AS scale_y, + _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'width') AS blocksize_x, + _raster_constraint_info_blocksize(n.nspname, c.relname, a.attname, 'height') AS blocksize_y, + COALESCE(_raster_constraint_info_alignment(n.nspname, c.relname, a.attname), FALSE) AS same_alignment, + COALESCE(_raster_constraint_info_regular_blocking(n.nspname, c.relname, a.attname), FALSE) AS regular_blocking, + _raster_constraint_info_num_bands(n.nspname, c.relname, a.attname) AS num_bands, + _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_extent(n.nspname, c.relname, a.attname) AS extent, + a.attname AS r_column, + FALSE AS out_db + FROM + pg_class c, + pg_attribute a, + pg_type t, + pg_namespace n + WHERE t.typname = 'raster'::name + AND a.attisdropped = false + AND a.atttypid = t.oid + AND a.attrelid = c.oid + AND c.relnamespace = n.oid + AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") + AND NOT pg_is_other_temp_schema(c.relnamespace); + +CREATE OR REPLACE VIEW raster_overviews AS + SELECT + current_database() AS o_table_catalog, + n.nspname AS o_table_schema, + c.relname AS o_table_name, + a.attname AS o_raster_column, + current_database() AS r_table_catalog, + split_part(split_part(s.consrc, '''::name', 1), '''', 2)::name AS r_table_schema, + split_part(split_part(s.consrc, '''::name', 2), '''', 2)::name AS r_table_name, + split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_raster_column, + trim(both from split_part(s.consrc, ',', 2))::integer AS overview_factor, + a.attname AS o_column, + split_part(split_part(s.consrc, '''::name', 3), '''', 2)::name AS r_column, + FALSE AS out_db + FROM + pg_class c, + pg_attribute a, + pg_type t, + pg_namespace n, + pg_constraint s + WHERE t.typname = 'raster'::name + AND a.attisdropped = false + AND a.atttypid = t.oid + AND a.attrelid = c.oid + AND c.relnamespace = n.oid + AND (c.relkind = 'r'::"char" OR c.relkind = 'v'::"char") + AND s.connamespace = n.oid + AND s.conrelid = c.oid + AND s.consrc LIKE '%_overview_constraint(%' + AND NOT pg_is_other_temp_schema(c.relnamespace); -- 2.40.0