From bf79a4c893e32d334602c6e281a5517c19a1ae20 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Wed, 14 May 2025 18:20:02 +0200 Subject: [PATCH] fix(chalice): fixed duplicate autocomplete values --- api/chalicelib/core/autocomplete/autocomplete.py | 7 ++++--- api/chalicelib/core/autocomplete/autocomplete_ch.py | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/api/chalicelib/core/autocomplete/autocomplete.py b/api/chalicelib/core/autocomplete/autocomplete.py index aa40ccbd0..64521e087 100644 --- a/api/chalicelib/core/autocomplete/autocomplete.py +++ b/api/chalicelib/core/autocomplete/autocomplete.py @@ -85,7 +85,8 @@ def __generic_query(typename, value_length=None): ORDER BY value""" if value_length is None or value_length > 2: - return f"""(SELECT DISTINCT value, type + return f"""SELECT DISTINCT ON(value,type) value, type + ((SELECT DISTINCT value, type FROM {TABLE} WHERE project_id = %(project_id)s @@ -101,7 +102,7 @@ def __generic_query(typename, value_length=None): AND type='{typename.upper()}' AND value ILIKE %(value)s ORDER BY value - LIMIT 5);""" + LIMIT 5)) AS raw;""" return f"""SELECT DISTINCT value, type FROM {TABLE} WHERE @@ -326,7 +327,7 @@ def __search_metadata(project_id, value, key=None, source=None): AND {colname} ILIKE %(svalue)s LIMIT 5)""") with pg_client.PostgresClient() as cur: cur.execute(cur.mogrify(f"""\ - SELECT key, value, 'METADATA' AS TYPE + SELECT DISTINCT ON(key, value) key, value, 'METADATA' AS TYPE FROM({" UNION ALL ".join(sub_from)}) AS all_metas LIMIT 5;""", {"project_id": project_id, "value": helper.string_to_sql_like(value), "svalue": helper.string_to_sql_like("^" + value)})) diff --git a/api/chalicelib/core/autocomplete/autocomplete_ch.py b/api/chalicelib/core/autocomplete/autocomplete_ch.py index 2eed9d5bf..7118e91e6 100644 --- a/api/chalicelib/core/autocomplete/autocomplete_ch.py +++ b/api/chalicelib/core/autocomplete/autocomplete_ch.py @@ -86,7 +86,8 @@ def __generic_query(typename, value_length=None): ORDER BY value""" if value_length is None or value_length > 2: - return f"""(SELECT DISTINCT value, type + return f"""SELECT DISTINCT ON(value, type) value, type + FROM ((SELECT DISTINCT value, type FROM {TABLE} WHERE project_id = %(project_id)s @@ -102,7 +103,7 @@ def __generic_query(typename, value_length=None): AND type='{typename.upper()}' AND value ILIKE %(value)s ORDER BY value - LIMIT 5);""" + LIMIT 5)) AS raw;""" return f"""SELECT DISTINCT value, type FROM {TABLE} WHERE @@ -257,7 +258,7 @@ def __search_metadata(project_id, value, key=None, source=None): WHERE project_id = %(project_id)s AND {colname} ILIKE %(svalue)s LIMIT 5)""") with ch_client.ClickHouseClient() as cur: - query = cur.format(query=f"""SELECT key, value, 'METADATA' AS TYPE + query = cur.format(query=f"""SELECT DISTINCT ON(key, value) key, value, 'METADATA' AS TYPE FROM({" UNION ALL ".join(sub_from)}) AS all_metas LIMIT 5;""", parameters={"project_id": project_id, "value": helper.string_to_sql_like(value), "svalue": helper.string_to_sql_like("^" + value)})