From: Regina Obe Date: Sun, 27 May 2012 18:28:48 +0000 (+0000) Subject: #1843 - logic to add the new settings table, a get and set function, and changed... X-Git-Tag: 2.1.0beta2~968 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3f2e10f8794f4e9ae59f2574025906944523131f;p=postgis #1843 - logic to add the new settings table, a get and set function, and changed debug variables in various functions to lookup value from table git-svn-id: http://svn.osgeo.org/postgis/trunk@9823 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/extras/tiger_geocoder/tiger_2011/create_geocode.sql b/extras/tiger_geocoder/tiger_2011/create_geocode.sql index b3b5c67c2..68f13f91c 100644 --- a/extras/tiger_geocoder/tiger_2011/create_geocode.sql +++ b/extras/tiger_geocoder/tiger_2011/create_geocode.sql @@ -18,6 +18,7 @@ \i utility/set_search_path.sql; SELECT tiger.SetSearchPathForInstall('tiger'); \i tables/lookup_tables_2011.sql +\i geocode_settings.sql --SET search_path TO tiger,public; BEGIN; -- Type used to pass around a normalized address between functions diff --git a/extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql b/extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql index e6e86f28b..6f98f3a85 100644 --- a/extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql +++ b/extras/tiger_geocoder/tiger_2011/geocode/geocode_address.sql @@ -9,7 +9,7 @@ DECLARE stmt VARCHAR; in_statefp VARCHAR; exact_street boolean := false; - var_debug boolean := false; + var_debug boolean := get_geocode_setting('debug_geocode_address')::boolean; var_sql text := ''; var_n integer := 0; var_restrict_geom geometry := NULL; diff --git a/extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql b/extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql index b740f9610..838c76e61 100644 --- a/extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql +++ b/extras/tiger_geocoder/tiger_2011/geocode/geocode_intersection.sql @@ -20,7 +20,7 @@ DECLARE var_sql text := ''; var_zip varchar(5)[]; in_statefp varchar(2) ; - var_debug boolean := false; + var_debug boolean := get_geocode_setting('debug_geocode_intersection')::boolean; results record; BEGIN IF COALESCE(roadway1,'') = '' OR COALESCE(roadway2,'') = '' THEN diff --git a/extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql b/extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql index 482a82703..5a8454a85 100644 --- a/extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql +++ b/extras/tiger_geocoder/tiger_2011/geocode/reverse_geocode.sql @@ -25,7 +25,7 @@ DECLARE var_place varchar; var_county varchar; var_stmt text; - var_debug boolean = false; + var_debug boolean = get_geocode_setting('debug_reverse_geocode')::boolean; var_zip varchar := NULL; var_primary_fullname varchar := ''; BEGIN diff --git a/extras/tiger_geocoder/tiger_2011/geocode_settings.sql b/extras/tiger_geocoder/tiger_2011/geocode_settings.sql new file mode 100644 index 000000000..3d888f699 --- /dev/null +++ b/extras/tiger_geocoder/tiger_2011/geocode_settings.sql @@ -0,0 +1,55 @@ +--$Id$ +-- +-- PostGIS - Spatial Types for PostgreSQL +-- http://www.postgis.org +-- +-- Copyright (C) 2010, 2011 Regina Obe and Leo Hsu +-- +-- This is free software; you can redistribute and/or modify it under +-- the terms of the GNU General Public Licence. See the COPYING file. +-- +-- Author: Regina Obe and Leo Hsu +-- +-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +-- +SELECT tiger.SetSearchPathForInstall('tiger'); + +CREATE OR REPLACE FUNCTION install_geocode_settings() + RETURNS void AS +$$ +DECLARE var_temp text; +BEGIN + var_temp := tiger.SetSearchPathForInstall('tiger'); /** set setach path to have tiger in front **/ + IF NOT EXISTS(SELECT table_name FROM information_schema.columns WHERE table_schema = 'tiger' AND table_name = 'geocode_settings') THEN + CREATE TABLE geocode_settings(name text primary key, setting text, unit text, category text, short_desc text); + END IF; + --add missing settings + INSERT INTO geocode_settings(name,setting,unit,category,short_desc) + SELECT f.* + FROM + (VALUES ('debug_geocode_address', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries when geocode_addresss is called if true') + , ('debug_geocode_intersection', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries when geocode_intersection is called if true') + , ('debug_normalize_address', 'false', 'boolean','debug', 'outputs debug information in notice log such as queries and intermediate expressions when normalize_address is called if true') + , ('debug_reverse_geocode', 'false', 'boolean','debug', 'if true, outputs debug information in notice log such as queries and intermediate expressions when reverse_geocode') + ) f(name,setting,unit,category,short_desc) + WHERE f.name NOT IN(SELECT name FROM geocode_settings); +END; +$$ +language plpgsql; + +SELECT install_geocode_settings(); /** create the table if it doesn't exist **/ + +CREATE OR REPLACE FUNCTION get_geocode_setting(setting_name text) +RETURNS text AS +$$ +SELECT setting FROM geocode_settings WHERE name = $1; +$$ +language sql STABLE; + +CREATE OR REPLACE FUNCTION set_geocode_setting(setting_name text, setting_value text) +RETURNS text AS +$$ +UPDATE geocode_settings SET setting = $2 WHERE name = $1 + RETURNING setting; +$$ +language sql VOLATILE; diff --git a/extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql b/extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql index 2fb8f1299..a93f0a90d 100644 --- a/extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql +++ b/extras/tiger_geocoder/tiger_2011/normalize/normalize_address.sql @@ -56,7 +56,7 @@ CREATE OR REPLACE FUNCTION normalize_address(in_rawinput character varying) RETURNS norm_addy AS $$ DECLARE - debug_flag boolean := false; + debug_flag boolean := get_geocode_setting('debug_normalize_address')::boolean; result norm_addy; addressString VARCHAR; zipString VARCHAR; diff --git a/extras/tiger_geocoder/tiger_2011/upgrade_geocode.sql b/extras/tiger_geocoder/tiger_2011/upgrade_geocode.sql index 2167b4394..0c2cda640 100644 --- a/extras/tiger_geocoder/tiger_2011/upgrade_geocode.sql +++ b/extras/tiger_geocoder/tiger_2011/upgrade_geocode.sql @@ -19,6 +19,8 @@ -- the below call will put tiger schema in front so all objects in this script -- will get created in search path SELECT tiger.SetSearchPathForInstall('tiger'); +--this is used currently for debugging +\i geocode_settings.sql --this will fail if the column already exists which is fine ALTER TABLE state_lookup ADD COLUMN statefp char(2); UPDATE state_lookup SET statefp = lpad(st_code::text,2,'0') WHERE statefp IS NULL; @@ -40,7 +42,7 @@ DROP FUNCTION IF EXISTS interpolate_from_address(integer, character varying, cha DROP FUNCTION IF EXISTS interpolate_from_address(integer, integer, integer, geometry); /**don't need this since got collapes into varchar version **/ -- this will fail if already exists, that is fine. can't use IF NOT EXISTS until 9.1 - +SELECT tiger.SetSearchPathForInstall('tiger'); CREATE TABLE addrfeat ( gid serial not null primary key, @@ -223,7 +225,8 @@ INSERT INTO street_type_lookup (name, abbrev, is_hw) SELECT name, abbrev, false FROM temp_types As t WHERE t.name NOT IN(SELECT name FROM street_type_lookup); - + +SELECT tiger.SetSearchPathForInstall('tiger'); -- new census loader \i census_loader.sql --create parent tables for census