]> git.openstreetmap.org Git - nominatim.git/blobdiff - sql/functions.sql
update classtype tables for special phrases along with the places
[nominatim.git] / sql / functions.sql
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;