]> git.openstreetmap.org Git - nominatim.git/commitdiff
remove linked_place from extratags when updating
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 13 Aug 2020 14:59:11 +0000 (16:59 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 13 Aug 2020 14:59:11 +0000 (16:59 +0200)
Before updating an admin boundary we need to make sure that any
artificially generated 'linked_place' entry is removed from the
extratags column. This ensures that the place designation does
not linger when a linked place disappears and that it is updated
when the linking changes.

sql/functions/placex_triggers.sql
test/bdd/db/update/linked_places.feature

index f9d5b60f4bbcf1d45b9b0b2d51ccc07c0e9587ca..ccee3c826b40cf9e2813bce758d07e9e8387bdd3 100644 (file)
@@ -574,6 +574,8 @@ BEGIN
          where linked_place_id = NEW.place_id;
   -- update not necessary for osmline, cause linked_place_id does not exist
 
          where linked_place_id = NEW.place_id;
   -- update not necessary for osmline, cause linked_place_id does not exist
 
+  NEW.extratags := NEW.extratags - 'linked_place'::TEXT;
+
   IF NEW.linked_place_id is not null THEN
     --DEBUG: RAISE WARNING 'place already linked to %', NEW.linked_place_id;
     RETURN NEW;
   IF NEW.linked_place_id is not null THEN
     --DEBUG: RAISE WARNING 'place already linked to %', NEW.linked_place_id;
     RETURN NEW;
@@ -925,10 +927,14 @@ DECLARE
 BEGIN
   -- RAISE WARNING 'placex_delete % %',OLD.osm_type,OLD.osm_id;
 
 BEGIN
   -- RAISE WARNING 'placex_delete % %',OLD.osm_type,OLD.osm_id;
 
-  update placex set linked_place_id = null, indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
-  --DEBUG: RAISE WARNING 'placex_delete:01 % %',OLD.osm_type,OLD.osm_id;
-  update placex set linked_place_id = null where linked_place_id = OLD.place_id;
-  --DEBUG: RAISE WARNING 'placex_delete:02 % %',OLD.osm_type,OLD.osm_id;
+  IF OLD.linked_place_id is null THEN
+    update placex set linked_place_id = null, indexed_status = 2 where linked_place_id = OLD.place_id and indexed_status = 0;
+    --DEBUG: RAISE WARNING 'placex_delete:01 % %',OLD.osm_type,OLD.osm_id;
+    update placex set linked_place_id = null where linked_place_id = OLD.place_id;
+    --DEBUG: RAISE WARNING 'placex_delete:02 % %',OLD.osm_type,OLD.osm_id;
+  ELSE
+    update placex set indexed_status = 2 where place_id = OLD.linked_place_id and indexed_status = 0;
+  END IF;
 
   IF OLD.rank_address < 30 THEN
 
 
   IF OLD.rank_address < 30 THEN
 
index 647d5eafa1ea37db93585603af4be09a65fd38ea..42e62de57dc27955ab1fca4ddee1ca176c2c2c8f 100644 (file)
@@ -133,3 +133,36 @@ Feature: Updates of linked places
          | object | extratags |
          | R1     | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |
 
          | object | extratags |
          | R1     | 'wikidata' : '34', 'oneway' : 'yes', 'linked_place' : 'city' |
 
+    Scenario: Remove linked_place info when linkee is removed
+        Given the places
+            | osm | class | type | name | geometry |
+            | N1  | place | city | foo  | 0 0 |
+        And the places
+            | osm | class    | type           | name | admin | geometry |
+            | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
+        When importing
+        Then placex contains
+            | object | extratags |
+            | R1     | 'linked_place' : 'city' |
+        When marking for delete N1
+        Then placex contains
+            | object | extratags |
+            | R1     |  |
+
+    Scenario: Update linked_place info when linkee type changes
+        Given the places
+            | osm | class | type | name | geometry |
+            | N1  | place | city | foo  | 0 0 |
+        And the places
+            | osm | class    | type           | name | admin | geometry |
+            | R1  | boundary | administrative | foo  | 8     | poly-area:0.1 |
+        When importing
+        Then placex contains
+            | object | extratags |
+            | R1     | 'linked_place' : 'city' |
+        When updating places
+            | osm | class | type | name | geometry |
+            | N1  | place | town | foo  | 0 0 |
+        Then placex contains
+            | object | extratags |
+            | R1     | 'linked_place' : 'town' |