]> git.openstreetmap.org Git - nominatim.git/commitdiff
make sure old data gets deleted on place type change
authorSarah Hoffmann <lonvia@denofr.de>
Fri, 18 Jun 2021 08:58:41 +0000 (10:58 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Fri, 18 Jun 2021 08:58:41 +0000 (10:58 +0200)
When changing from some other place type to place=postcode
make sure that the old place type entry in the place table
is deleted.

lib-sql/functions/place_triggers.sql
test/bdd/db/update/postcode.feature

index 1538921560eed9a1a8e8c4c7d446d6cb4f25b496..014c8cd75ea4502373ce12575a99819aa857ceae 100644 (file)
@@ -92,6 +92,13 @@ 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;
 
+    -- 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
+    IF existing.osm_type IS NULL THEN
+      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
@@ -113,13 +120,6 @@ BEGIN
       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
-    IF existing.osm_type IS NULL THEN
-      DELETE FROM place where osm_type = NEW.osm_type and osm_id = NEW.osm_id and class = NEW.class;
-    END IF;
-
     {% if debug %}RAISE WARNING 'Existing: %',existing.osm_id;{% endif %}
     {% if debug %}RAISE WARNING 'Existing PlaceX: %',existingplacex.place_id;{% endif %}
 
index e25e286711809b3621c0d235de8403b20a7d2ad0..94550ffd6b3f764a0687a8ae628eb154feacdb75 100644 (file)
@@ -84,6 +84,9 @@ Feature: Update of postcode
         Then placex contains
            | object | addr+housenumber | geometry |
            | N34    | 1                | country:de|
+        And place contains exactly
+           | object | class | type  |
+           | N34    | place | house |
         When updating postcodes
         Then location_postcode contains exactly
            | country | postcode | geometry |
@@ -104,3 +107,13 @@ Feature: Update of postcode
            | osm | class | type     | addr+postcode |  geometry |
            | N34 | place | postcode | 01982         | country:de |
         Then placex has no entry for N34
+        And place contains exactly
+           | object | class | type     |
+           | N34    | place | postcode |
+        When updating postcodes
+        Then location_postcode contains exactly
+           | country | postcode | geometry |
+           | de      | 01982    | country:de |
+        And word contains
+           | word  | class | type |
+           | 01982 | place | postcode |