From 5a5691b5b76a02615ed08f4912f219034f589feb Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Tue, 6 Jun 2017 23:46:44 +0200 Subject: [PATCH] force update of linker when linkee is updates Potential name changes need to be added to the linker's name hstore. Fixes #170. --- sql/functions.sql | 14 ++++++++ test/bdd/db/update/linked_places.feature | 44 ++++++++++++++++++++++++ test/bdd/steps/db_ops.py | 8 ++++- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/sql/functions.sql b/sql/functions.sql index 9dbc6fe0..a49ba02b 100644 --- a/sql/functions.sql +++ b/sql/functions.sql @@ -2167,6 +2167,20 @@ BEGIN update location_property_osmline p set indexed_status = 2 from planet_osm_ways w where p.linegeo && NEW.geometry and p.osm_id = w.id and NEW.osm_id = any(w.nodes); END IF; + -- linked places should get potential new naming and addresses + IF existingplacex.linked_place_id is not NULL THEN + update placex x set + name = p.name, + extratags = p.extratags, + indexed_status = 2 + from place p + where x.place_id = existingplacex.linked_place_id + and x.indexed_status = 0 + and x.osm_type = p.osm_type + and x.osm_id = p.osm_id + and x.class = p.class; + END IF; + END IF; -- Abort the add (we modified the existing place instead) diff --git a/test/bdd/db/update/linked_places.feature b/test/bdd/db/update/linked_places.feature index 17ca8003..6c31bd89 100644 --- a/test/bdd/db/update/linked_places.feature +++ b/test/bdd/db/update/linked_places.feature @@ -89,3 +89,47 @@ Feature: Updates of linked places | osm_type | | R | + Scenario: Update linking relation when linkee name is updated + Given the places + | osm | class | type | name | admin | geometry | + | R1 | boundary | administrative | rel | 8 | poly-area:0.1 | + And the places + | osm | class | type | name+name:de | admin | geometry | + | N3 | place | city | pnt | 30 | 0.00001 0 | + And the relations + | id | members | + | 1 | N3:label | + When importing + Then placex contains + | object | linked_place_id | name+name:de | + | R1 | - | pnt | + | N3 | R1 | pnt | + When updating places + | osm | class | type | name+name:de | admin | geometry | + | N3 | place | city | newname | 30 | 0.00001 0 | + Then placex contains + | object | linked_place_id | name+name:de | + | N3 | R1 | newname | + | R1 | - | newname | + + Scenario: Updating linkee extratags keeps linker's extratags + Given the named places + | osm | class | type | extra+wikidata | admin | geometry | + | R1 | boundary | administrative | 34 | 8 | poly-area:0.1 | + And the named places + | osm | class | type | geometry | + | N3 | place | city | 0.00001 0 | + And the relations + | id | members | + | 1 | N3:label | + When importing + Then placex contains + | object | extratags | + | R1 | 'wikidata' : '34', 'place' : 'city' | + When updating places + | osm | class | type | name | extra+oneway | admin | geometry | + | N3 | place | city | newname | yes | 30 | 0.00001 0 | + Then placex contains + | object | extratags | + | R1 | 'wikidata' : '34', 'oneway' : 'yes', 'place' : 'city' | + diff --git a/test/bdd/steps/db_ops.py b/test/bdd/steps/db_ops.py index 48abfd13..fa8cd0de 100644 --- a/test/bdd/steps/db_ops.py +++ b/test/bdd/steps/db_ops.py @@ -348,7 +348,13 @@ def check_placex_contents(context, exact): if exact: expected_content.add((res['osm_type'], res['osm_id'], res['class'])) for h in row.headings: - if h.startswith('name'): + if h in ('extratags', 'address'): + if row[h] == '-': + assert_is_none(res[h]) + else: + vdict = eval('{' + row[h] + '}') + assert_equals(vdict, res[h]) + elif h.startswith('name'): name = h[5:] if h.startswith('name+') else 'name' assert_in(name, res['name']) eq_(res['name'][name], row[h])