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
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'
| 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 |