]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib-sql/functions/place_triggers.sql
US TIGER data 2021 released
[nominatim.git] / lib-sql / functions / place_triggers.sql
index 43bae85631b1cbffc5d003a9fecd7d354f7a6c14..014c8cd75ea4502373ce12575a99819aa857ceae 100644 (file)
@@ -92,16 +92,6 @@ BEGIN
     -- Get the existing place_id
     select * from placex where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type INTO existingplacex;
 
-    -- Pure postcodes are never queried from placex so we don't add them.
-    -- location_postcodes is filled from the place table directly.
-    IF NEW.class = 'place' AND NEW.type = 'postcode' THEN
-      -- Remove old placex entry if the type changed to postcode.
-      IF existingplacex.type IS NOT NULL AND existingplacex.type != 'postcode' THEN
-        DELETE FROM placex where osm_type = NEW.osm_type and osm_id = NEW.osm_id;
-      END IF;
-      RETURN NEW;
-    END IF;
-
     -- Handle a place changing type by removing the old data
     -- My generated 'place' types are causing havok because they overlap with real keys
     -- TODO: move them to their own special purpose key/class to avoid collisions
@@ -109,6 +99,27 @@ BEGIN
       DELETE FROM place where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class;
     END IF;
 
+    -- Pure postcodes are never queried from placex so we don't add them.
+    -- location_postcodes is filled from the place table directly.
+    IF NEW.class = 'place' AND NEW.type = 'postcode' THEN
+      -- Remove old placex entry.
+      DELETE FROM placex where osm_type = NEW.osm_type and osm_id = NEW.osm_id;
+
+      IF existing.osm_type IS NOT NULL THEN
+        IF coalesce(existing.address, ''::hstore) != coalesce(NEW.address, ''::hstore)
+           OR existing.geometry::text != NEW.geometry::text
+        THEN
+
+          update place set address = NEW.address, geometry = NEW.geometry
+            where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class and type = NEW.type;
+        END IF;
+
+        RETURN NULL;
+      END IF;
+
+      RETURN NEW;
+    END IF;
+
     {% if debug %}RAISE WARNING 'Existing: %',existing.osm_id;{% endif %}
     {% if debug %}RAISE WARNING 'Existing PlaceX: %',existingplacex.place_id;{% endif %}