keep inherited address parts after indexing

The inherited housenumber is needed for display output. We can't
take the one from the housenumber field because it is already
normalized. Remove the inherited address only when reindexing.

Fixes #2683.
This commit is contained in:
Sarah Hoffmann
2022-04-28 21:38:00 +02:00
parent de828b723e
commit 3c68b12176
2 changed files with 34 additions and 36 deletions

View File

@@ -28,11 +28,14 @@ DECLARE
result prepare_update_info; result prepare_update_info;
extra_names HSTORE; extra_names HSTORE;
BEGIN BEGIN
IF not p.address ? '_inherited' THEN
result.address := p.address;
END IF;
-- For POI nodes, check if the address should be derived from a surrounding -- For POI nodes, check if the address should be derived from a surrounding
-- building. -- building.
IF p.rank_search < 30 OR p.osm_type != 'N' THEN IF p.rank_search = 30 AND p.osm_type = 'N' THEN
result.address := p.address; IF p.address is null THEN
ELSEIF p.address is null THEN
-- The additional && condition works around the misguided query -- The additional && condition works around the misguided query
-- planner of postgis 3.0. -- planner of postgis 3.0.
SELECT placex.address || hstore('_inherited', '') INTO result.address SELECT placex.address || hstore('_inherited', '') INTO result.address
@@ -44,7 +47,6 @@ BEGIN
and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') and rank_search = 30 AND ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon')
LIMIT 1; LIMIT 1;
ELSE ELSE
result.address := p.address;
-- See if we can inherit addtional address tags from an interpolation. -- See if we can inherit addtional address tags from an interpolation.
-- These will become permanent. -- These will become permanent.
FOR location IN FOR location IN
@@ -58,6 +60,7 @@ BEGIN
result.address := location.address || result.address; result.address := location.address || result.address;
END LOOP; END LOOP;
END IF; END IF;
END IF;
-- remove internal and derived names -- remove internal and derived names
result.address := result.address - '_unlisted_place'::TEXT; result.address := result.address - '_unlisted_place'::TEXT;
@@ -984,15 +987,6 @@ BEGIN
{% endif %} {% endif %}
NEW.token_info := token_strip_info(NEW.token_info); NEW.token_info := token_strip_info(NEW.token_info);
-- If the address was inherited from a surrounding building,
-- do not add it permanently to the table.
IF NEW.address ? '_inherited' THEN
IF NEW.address ? '_unlisted_place' THEN
NEW.address := hstore('_unlisted_place', NEW.address->'_unlisted_place');
ELSE
NEW.address := null;
END IF;
END IF;
RETURN NEW; RETURN NEW;
END IF; END IF;

View File

@@ -376,6 +376,10 @@ Feature: Parenting of objects
| N1 | W3 | 3 | | N1 | W3 | 3 |
| N2 | W3 | 3 | | N2 | W3 | 3 |
| N3 | W3 | 3 | | N3 | W3 | 3 |
When sending geocodejson search query "3, foo" with address
Then results contain
| housenumber |
| 3 |
Scenario: POIs don't inherit from streets Scenario: POIs don't inherit from streets
Given the scene building-on-street-corner Given the scene building-on-street-corner