X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/4930f776fe5b14879697a02323c5cf1621735dad..c5fc12e04b1b00ae50ad7f92d2577a7ae5a324bf:/sql/functions/address_lookup.sql diff --git a/sql/functions/address_lookup.sql b/sql/functions/address_lookup.sql index ec323b6e..d1ed6990 100644 --- a/sql/functions/address_lookup.sql +++ b/sql/functions/address_lookup.sql @@ -60,14 +60,16 @@ BEGIN prevresult := ''; FOR location IN - SELECT * FROM get_addressdata(for_place_id, housenumber) + SELECT name, + CASE WHEN place_id = for_place_id THEN 99 ELSE rank_address END as rank_address + FROM get_addressdata(for_place_id, housenumber) WHERE isaddress order by rank_address desc LOOP currresult := trim(get_name_by_language(location.name, languagepref)); IF currresult != prevresult AND currresult IS NOT NULL AND result[(100 - location.rank_address)] IS NULL THEN - result[(100 - location.rank_address)] := trim(get_name_by_language(location.name, languagepref)); + result[(100 - location.rank_address)] := currresult; prevresult := currresult; END IF; END LOOP; @@ -178,6 +180,7 @@ BEGIN -- Return the record for the base entry. FOR location IN SELECT placex.place_id, osm_type, osm_id, name, + coalesce(extratags->'linked_place', extratags->'place') as place_type, class, type, admin_level, type not in ('postcode', 'postal_code') as isaddress, CASE WHEN rank_address = 0 THEN 100 @@ -196,7 +199,8 @@ BEGIN searchcountrycode := NULL; END IF; countrylocation := ROW(location.place_id, location.osm_type, location.osm_id, - location.name, location.class, location.type, NULL, + location.name, location.class, location.type, + location.place_type, location.admin_level, true, location.isaddress, location.rank_address, location.distance)::addressline; RETURN NEXT countrylocation; @@ -205,7 +209,7 @@ BEGIN FOR location IN SELECT placex.place_id, osm_type, osm_id, name, class, type, - coalesce(extratags->'place', extratags->'linked_place') as place_type, + coalesce(extratags->'linked_place', extratags->'place') as place_type, admin_level, fromarea, isaddress, CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address, distance, country_code, postcode @@ -270,14 +274,14 @@ BEGIN END IF; IF searchhousenumber IS NOT NULL THEN - location := ROW(in_place_id, null, null, hstore('ref', searchhousenumber), + location := ROW(null, null, null, hstore('ref', searchhousenumber), 'place', 'house_number', null, null, true, true, 28, 0)::addressline; RETURN NEXT location; END IF; IF searchpostcode IS NOT NULL THEN location := ROW(null, null, null, hstore('ref', searchpostcode), 'place', - 'postcodes', null, null, false, true, 5, 0)::addressline; + 'postcode', null, null, false, true, 5, 0)::addressline; RETURN NEXT location; END IF;