update classtype tables for special phrases along with the places

This commit is contained in:
Sarah Hoffmann
2012-02-19 10:33:21 +00:00
parent c186a4ead0
commit 01f4723b7b
2 changed files with 24 additions and 3 deletions

View File

@@ -875,6 +875,7 @@ DECLARE
country_code VARCHAR(2); country_code VARCHAR(2);
default_language VARCHAR(10); default_language VARCHAR(10);
diameter FLOAT; diameter FLOAT;
classtable TEXT;
BEGIN BEGIN
-- RAISE WARNING '%',NEW.osm_id; -- RAISE WARNING '%',NEW.osm_id;
@@ -1148,6 +1149,17 @@ BEGIN
END IF; 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 -- IF NEW.rank_search < 26 THEN
-- RAISE WARNING 'placex insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type; -- RAISE WARNING 'placex insert: % % % %',NEW.osm_type,NEW.osm_id,NEW.class,NEW.type;
-- END IF; -- END IF;
@@ -1558,6 +1570,7 @@ CREATE OR REPLACE FUNCTION placex_delete() RETURNS TRIGGER
AS $$ AS $$
DECLARE DECLARE
b BOOLEAN; b BOOLEAN;
classtable TEXT;
BEGIN BEGIN
IF OLD.rank_address < 30 THEN IF OLD.rank_address < 30 THEN
@@ -1584,6 +1597,13 @@ BEGIN
DELETE FROM place_addressline where place_id = OLD.place_id; 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; RETURN OLD;
END; END;

View File

@@ -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) foreach($aPairs as $aPair)
{ {
if ($aPair[1] == 'highway') continue; 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 "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 "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"; 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 "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 "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";
} }