]> git.openstreetmap.org Git - nominatim.git/blobdiff - sql/functions/utils.sql
rename functions where return parameter changed
[nominatim.git] / sql / functions / utils.sql
index 2b0f681bf35e42486ac4621c6d68e69002ea84bd..6371e9adb739f3fdb7e868219fed02ca9804c7dd 100644 (file)
@@ -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 $$