X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/c3dc66ce9c4f5fccaec405c01e7d71130dc19d2b..5ec25122f64523509b0cbc804c1be1f5f215c45c:/sql/functions/utils.sql diff --git a/sql/functions/utils.sql b/sql/functions/utils.sql index 2b0f681b..6371e9ad 100644 --- a/sql/functions/utils.sql +++ b/sql/functions/utils.sql @@ -223,41 +223,70 @@ $$ LANGUAGE plpgsql STABLE; -CREATE OR REPLACE FUNCTION get_country_language_codes(search_country_code VARCHAR(2)) - RETURNS TEXT[] +CREATE OR REPLACE FUNCTION get_partition(in_country_code VARCHAR(10)) + RETURNS INTEGER AS $$ DECLARE nearcountry RECORD; BEGIN FOR nearcountry IN - SELECT country_default_language_codes from country_name - WHERE country_code = search_country_code limit 1 + SELECT partition from country_name where country_code = in_country_code LOOP - RETURN lower(nearcountry.country_default_language_codes); + RETURN nearcountry.partition; END LOOP; - RETURN NULL; + RETURN 0; END; $$ LANGUAGE plpgsql STABLE; -CREATE OR REPLACE FUNCTION get_partition(in_country_code VARCHAR(10)) - RETURNS INTEGER +-- Find the parent of an address with addr:street/addr:place tag. +-- +-- \param street Value of addr:street or NULL if tag is missing. +-- \param place Value of addr:place or NULL if tag is missing. +-- \param partition Partition where to search the parent. +-- \param centroid Location of the address. +-- +-- \return Place ID of the parent if one was found, NULL otherwise. +CREATE OR REPLACE FUNCTION find_parent_for_address(street TEXT, place TEXT, + partition SMALLINT, + centroid GEOMETRY) + RETURNS BIGINT AS $$ DECLARE - nearcountry RECORD; + parent_place_id BIGINT; + word_ids INTEGER[]; BEGIN - FOR nearcountry IN - SELECT partition from country_name where country_code = in_country_code - LOOP - RETURN nearcountry.partition; - END LOOP; - RETURN 0; + IF street is not null THEN + -- Check for addr:street attributes + -- Note that addr:street links can only be indexed, once the street itself is indexed + word_ids := word_ids_from_name(street); + IF word_ids is not null THEN + parent_place_id := getNearestNamedRoadPlaceId(partition, centroid, word_ids); + IF parent_place_id is not null THEN + --DEBUG: RAISE WARNING 'Get parent form addr:street: %', parent.place_id; + RETURN parent_place_id; + END IF; + END IF; + END IF; + + -- Check for addr:place attributes. + IF place is not null THEN + word_ids := word_ids_from_name(place); + IF word_ids is not null THEN + parent_place_id := getNearestNamedPlacePlaceId(partition, centroid, word_ids); + IF parent_place_id is not null THEN + --DEBUG: RAISE WARNING 'Get parent form addr:place: %', parent.place_id; + RETURN parent_place_id; + END IF; + END IF; + END IF; + + RETURN NULL; END; $$ LANGUAGE plpgsql STABLE; - CREATE OR REPLACE FUNCTION delete_location(OLD_place_id BIGINT) RETURNS BOOLEAN AS $$