mirror of
https://github.com/osm-search/Nominatim.git
synced 2024-12-24 13:31:37 +03: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:
parent
92bc3cd0a7
commit
15beeef6ce
@ -342,9 +342,10 @@ BEGIN
|
||||
WHERE s.place_id = parent_place_id;
|
||||
|
||||
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
|
||||
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
|
||||
LOOP
|
||||
addr_place := get_address_place(in_partition, geometry,
|
||||
@ -456,10 +457,12 @@ BEGIN
|
||||
address_havelevel := array_fill(false, ARRAY[maxrank]);
|
||||
|
||||
FOR location IN
|
||||
SELECT (get_address_place(partition, geometry, from_rank, to_rank,
|
||||
extent, token_info, key)).*, key
|
||||
FROM (SELECT (get_addr_tag_rank(key, country)).*, key
|
||||
FROM token_get_address_keys(token_info) as key) x
|
||||
SELECT apl.*, key
|
||||
FROM (SELECT extra.*, key
|
||||
FROM token_get_address_keys(token_info) as key,
|
||||
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
|
||||
LOOP
|
||||
IF location.place_id is null THEN
|
||||
|
@ -45,8 +45,9 @@ class AbstractPlacexRunner:
|
||||
|
||||
@staticmethod
|
||||
def get_place_details(worker, ids):
|
||||
worker.perform("""SELECT place_id, (placex_indexing_prepare(placex)).*
|
||||
FROM placex WHERE place_id IN %s""",
|
||||
worker.perform("""SELECT place_id, extra.*
|
||||
FROM placex, LATERAL placex_indexing_prepare(placex) as extra
|
||||
WHERE place_id IN %s""",
|
||||
(tuple((p[0] for p in ids)), ))
|
||||
|
||||
|
||||
|
@ -590,7 +590,7 @@ class LegacyICUNameAnalyzer(AbstractAnalyzer):
|
||||
continue
|
||||
|
||||
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))
|
||||
full, part = cur.fetchone()
|
||||
|
||||
|
@ -515,7 +515,7 @@ class _TokenInfo:
|
||||
simple_list = list(set(simple_list))
|
||||
|
||||
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()
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user