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.
WHERE s.place_id = parent_place_id;
FOR addr_item IN
WHERE s.place_id = parent_place_id;
FOR addr_item IN
- SELECT (get_addr_tag_rank(key, country)).*, 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
LOOP
addr_place := get_address_place(in_partition, geometry,
WHERE not token_get_address_search_tokens(token_info, key) <@ parent_address_vector
LOOP
addr_place := get_address_place(in_partition, geometry,
address_havelevel := array_fill(false, ARRAY[maxrank]);
FOR location IN
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
ORDER BY rank_address, distance, isguess desc
LOOP
IF location.place_id is null THEN
@staticmethod
def get_place_details(worker, ids):
@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)), ))
(tuple((p[0] for p in ids)), ))
continue
with self.conn.cursor() as cur:
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()
(token_id, variants))
full, part = cur.fetchone()
simple_list = list(set(simple_list))
with conn.cursor() as cur:
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()
self.data['hnr_tokens'], self.data['hnr'] = cur.fetchone()