From: Sarah Hoffmann Date: Sun, 19 Feb 2012 10:33:21 +0000 (+0000) Subject: update classtype tables for special phrases along with the places X-Git-Tag: v2.0.0~111 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/01f4723b7bcd74bda121d8268d6655940dea061f update classtype tables for special phrases along with the places --- diff --git a/sql/functions.sql b/sql/functions.sql index 3029d015..af9c47bb 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -875,6 +875,7 @@ DECLARE country_code VARCHAR(2); default_language VARCHAR(10); diameter FLOAT; + classtable TEXT; BEGIN -- RAISE WARNING '%',NEW.osm_id; @@ -1148,6 +1149,17 @@ BEGIN END IF; + -- add to tables for special search + -- Note: won't work on initial import because the classtype tables + -- do not yet exist. It won't hurt either. + classtable := 'place_classtype_' || NEW.class || '_' || NEW.type; + SELECT count(*)>0 FROM pg_tables WHERE tablename = classtable INTO result; + IF result THEN + EXECUTE 'INSERT INTO ' || classtable::regclass || ' (place_id, centroid) VALUES ($1,$2)' + USING NEW.place_id, ST_Centroid(NEW.geometry); + END IF; + + -- IF NEW.rank_search < 26 THEN -- RAISE WARNING 'placex insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type; -- END IF; @@ -1558,6 +1570,7 @@ CREATE OR REPLACE FUNCTION placex_delete() RETURNS TRIGGER AS $$ DECLARE b BOOLEAN; + classtable TEXT; BEGIN IF OLD.rank_address < 30 THEN @@ -1584,6 +1597,13 @@ BEGIN DELETE FROM place_addressline where place_id = OLD.place_id; + -- remove from tables for special search + classtable := 'place_classtype_' || OLD.class || '_' || OLD.type; + SELECT count(*)>0 FROM pg_tables WHERE tablename = classtable INTO b; + IF b THEN + EXECUTE 'DELETE FROM ' || classtable::regclass || ' WHERE place_id = $1' USING OLD.place_id; + END IF; + RETURN OLD; END; diff --git a/utils/specialphrases.php b/utils/specialphrases.php index 7751a2f7..d928d3c2 100755 --- a/utils/specialphrases.php +++ b/utils/specialphrases.php @@ -91,12 +91,13 @@ } } - echo "create index idx_placex_classtype on placex (class, type);"; + echo "create index idx_placex_classtype on placex (class, type);\n"; foreach($aPairs as $aPair) { if ($aPair[1] == 'highway') continue; + echo "drop table if exists place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1]).";\n"; echo "create table place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." as "; echo "select place_id as place_id,st_centroid(geometry) as centroid from placex where "; echo "class = '".pg_escape_string($aPair[0])."' and type = '".pg_escape_string($aPair[1])."';\n"; @@ -107,9 +108,9 @@ echo "CREATE INDEX idx_place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])."_place_id "; echo "ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." USING btree(place_id);\n"; - echo "GRANT SELECT ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." TO \"www-data\";"; + echo "GRANT SELECT ON place_classtype_".pg_escape_string($aPair[0])."_".pg_escape_string($aPair[1])." TO \"www-data\";\n"; } - echo "drop index idx_placex_classtype;"; + echo "drop index idx_placex_classtype;\n"; }