]> git.openstreetmap.org Git - nominatim.git/commitdiff
update classtype tables for special phrases along with the places
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 19 Feb 2012 10:33:21 +0000 (10:33 +0000)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 19 Feb 2012 10:33:21 +0000 (10:33 +0000)
sql/functions.sql
utils/specialphrases.php

index 3029d01588ab6a8f696b095f6232ed129f7ac191..af9c47bbdcce5ed5fa555167f8f53143a01fff4d 100644 (file)
@@ -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;
index 7751a2f79bbf9fd631b531f38712c9fb300713df..d928d3c2cea5bbb7835b9a7b266671e5e54f8d66 100755 (executable)
                        }
                }
 
-        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";
                        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";
        }