mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-07 10:34:08 +00:00
do not expand records in select list
An expression of the form 'SELECT (func()).*' will be expanded by Postgresql _before_ execution with the result that the function will be called as many times as there are fields in the record. This is not what we want. The function call needs to go into the FROM clause instead.
This commit is contained in:
@@ -342,9 +342,10 @@ BEGIN
|
|||||||
WHERE s.place_id = parent_place_id;
|
WHERE s.place_id = parent_place_id;
|
||||||
|
|
||||||
FOR addr_item IN
|
FOR addr_item IN
|
||||||
SELECT (get_addr_tag_rank(key, country)).*, key,
|
SELECT ranks.*, key,
|
||||||
token_get_address_search_tokens(token_info, key) as search_tokens
|
token_get_address_search_tokens(token_info, key) as search_tokens
|
||||||
FROM token_get_address_keys(token_info) as key
|
FROM token_get_address_keys(token_info) as key,
|
||||||
|
LATERAL get_addr_tag_rank(key, country) as ranks
|
||||||
WHERE not token_get_address_search_tokens(token_info, key) <@ parent_address_vector
|
WHERE not token_get_address_search_tokens(token_info, key) <@ parent_address_vector
|
||||||
LOOP
|
LOOP
|
||||||
addr_place := get_address_place(in_partition, geometry,
|
addr_place := get_address_place(in_partition, geometry,
|
||||||
@@ -456,10 +457,12 @@ BEGIN
|
|||||||
address_havelevel := array_fill(false, ARRAY[maxrank]);
|
address_havelevel := array_fill(false, ARRAY[maxrank]);
|
||||||
|
|
||||||
FOR location IN
|
FOR location IN
|
||||||
SELECT (get_address_place(partition, geometry, from_rank, to_rank,
|
SELECT apl.*, key
|
||||||
extent, token_info, key)).*, key
|
FROM (SELECT extra.*, key
|
||||||
FROM (SELECT (get_addr_tag_rank(key, country)).*, key
|
FROM token_get_address_keys(token_info) as key,
|
||||||
FROM token_get_address_keys(token_info) as key) x
|
LATERAL get_addr_tag_rank(key, country) as extra) x,
|
||||||
|
LATERAL get_address_place(partition, geometry, from_rank, to_rank,
|
||||||
|
extent, token_info, key) as apl
|
||||||
ORDER BY rank_address, distance, isguess desc
|
ORDER BY rank_address, distance, isguess desc
|
||||||
LOOP
|
LOOP
|
||||||
IF location.place_id is null THEN
|
IF location.place_id is null THEN
|
||||||
|
|||||||
@@ -45,8 +45,9 @@ class AbstractPlacexRunner:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_place_details(worker, ids):
|
def get_place_details(worker, ids):
|
||||||
worker.perform("""SELECT place_id, (placex_indexing_prepare(placex)).*
|
worker.perform("""SELECT place_id, extra.*
|
||||||
FROM placex WHERE place_id IN %s""",
|
FROM placex, LATERAL placex_indexing_prepare(placex) as extra
|
||||||
|
WHERE place_id IN %s""",
|
||||||
(tuple((p[0] for p in ids)), ))
|
(tuple((p[0] for p in ids)), ))
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -590,7 +590,7 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
with self.conn.cursor() as cur:
|
with self.conn.cursor() as cur:
|
||||||
cur.execute("SELECT (getorcreate_full_word(%s, %s)).*",
|
cur.execute("SELECT * FROM getorcreate_full_word(%s, %s)",
|
||||||
(token_id, variants))
|
(token_id, variants))
|
||||||
full, part = cur.fetchone()
|
full, part = cur.fetchone()
|
||||||
|
|
||||||
|
|||||||
@@ -515,7 +515,7 @@ class _TokenInfo:
|
|||||||
simple_list = list(set(simple_list))
|
simple_list = list(set(simple_list))
|
||||||
|
|
||||||
with conn.cursor() as cur:
|
with conn.cursor() as cur:
|
||||||
cur.execute("SELECT (create_housenumbers(%s)).* ", (simple_list, ))
|
cur.execute("SELECT * FROM create_housenumbers(%s)", (simple_list, ))
|
||||||
self.data['hnr_tokens'], self.data['hnr'] = cur.fetchone()
|
self.data['hnr_tokens'], self.data['hnr'] = cur.fetchone()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user