]> git.openstreetmap.org Git - nominatim.git/blobdiff - sql/functions.sql
update ref for postcode boundaries
[nominatim.git] / sql / functions.sql
index 49a6e97288fc0666538e8647fe23dd8162beabb3..a102078ee0fee47c036f904be4b003183f83d419 100644 (file)
@@ -2045,6 +2045,8 @@ BEGIN
 
   -- Just block these - lots and pointless
   IF NEW.class in ('landuse','natural') and NEW.name is null THEN
+    -- if the name tag was removed, older versions might still be lurking in the place table
+    DELETE FROM place where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type;
     RETURN null;
   END IF;
 
@@ -2092,7 +2094,7 @@ BEGIN
 
   -- To paraphrase, if there isn't an existing item, OR if the admin level has changed
   IF existingplacex.osm_type IS NULL OR
-     coalesce(existingplacex.admin_level, 15) != coalesce(NEW.admin_level, 15)
+    (coalesce(existingplacex.admin_level, 15) != coalesce(NEW.admin_level, 15) AND existingplacex.class = 'boundary' AND existingplacex.type = 'administrative')
   THEN
 
     IF existingplacex.osm_type IS NOT NULL THEN
@@ -2256,6 +2258,16 @@ BEGIN
       geometry = NEW.geometry
       where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type;
 
+    IF NEW.class in ('place','boundary') AND NEW.type in ('postcode','postal_code') THEN
+        IF NEW.postcode IS NULL THEN
+            -- postcode was deleted, no longer retain in placex
+            DELETE FROM placex where place_id = existingplacex.place_id;
+            RETURN NULL;
+        END IF;
+
+        NEW.name := hstore('ref', NEW.postcode);
+    END IF;
+
     update placex set 
       name = NEW.name,
       housenumber = NEW.housenumber,