From: Sarah Hoffmann Date: Fri, 12 Aug 2022 09:42:03 +0000 (+0200) Subject: Merge pull request #2798 from lonvia/more-rank-change-fixes X-Git-Tag: v4.2.0~37 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/67cfad6a2c3300783695e7cd9f6f4191d5630e5b?hp=18f525ac5409ca951c999656015bc110956aa317 Merge pull request #2798 from lonvia/more-rank-change-fixes Invalidations when boundaries and places change their rank --- diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index 70071b2f..bb34883a 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -916,7 +916,8 @@ BEGIN LATERAL compute_place_rank(country_code, 'A', class, type, admin_level, False, null) prank WHERE osm_type = 'R' - and prank.address_rank = NEW.rank_address + and ((class = 'place' and prank.address_rank = NEW.rank_address) + or (class = 'boundary' and rank_address = NEW.rank_address)) and geometry && NEW.centroid and _ST_Covers(geometry, NEW.centroid) LIMIT 1 LOOP @@ -1101,6 +1102,15 @@ BEGIN END IF; END IF; + {% if not disable_diff_updates %} + IF OLD.rank_address != NEW.rank_address THEN + -- After a rank shift all addresses containing us must be updated. + UPDATE placex p SET indexed_status = 2 FROM place_addressline pa + WHERE pa.address_place_id = NEW.place_id and p.place_id = pa.place_id + and p.indexed_status = 0 and p.rank_address between 4 and 25; + END IF; + {% endif %} + IF NEW.admin_level = 2 AND NEW.class = 'boundary' AND NEW.type = 'administrative' AND NEW.country_code IS NOT NULL AND NEW.osm_type = 'R' diff --git a/test/bdd/db/update/linked_places.feature b/test/bdd/db/update/linked_places.feature index 3b34039d..c277e8bd 100644 --- a/test/bdd/db/update/linked_places.feature +++ b/test/bdd/db/update/linked_places.feature @@ -307,3 +307,35 @@ Feature: Updates of linked places | object | linked_place_id | rank_address | | N1 | R1 | 16 | | R1 | - | 16 | + + + Scenario: Invalidate surrounding place nodes when place type changes + Given the grid + | 1 | | | 2 | + | | 8 | 9 | | + | 4 | | | 3 | + And the places + | osm | class | type | name | admin | geometry | + | R1 | boundary | administrative | foo | 8 | (1,2,3,4,1) | + And the places + | osm | class | type | name | geometry | + | N1 | place | town | foo | 9 | + | N2 | place | city | bar | 8 | + And the relations + | id | members | + | 1 | N1:label | + When importing + Then placex contains + | object | linked_place_id | rank_address | + | N1 | R1 | 16 | + | R1 | - | 16 | + | N2 | - | 18 | + + When updating places + | osm | class | type | name | geometry | + | N1 | place | suburb | foo | 9 | + Then placex contains + | object | linked_place_id | rank_address | + | N1 | R1 | 20 | + | R1 | - | 20 | + | N2 | - | 16 |