feat(api): autocomplete fixed DISTINCT values

This commit is contained in:
Taha Yassine Kraiem 2022-03-10 21:02:38 +01:00
parent bfffc8ee4c
commit 2c50d9bda6
2 changed files with 13 additions and 18 deletions

View file

@ -285,11 +285,6 @@ def __search_pg_metadata(project_id, value, key=None, source=None):
WHERE project_id = %(project_id)s
AND {colname} ILIKE %(svalue)s LIMIT 5)""")
with pg_client.PostgresClient() as cur:
print(cur.mogrify(f"""\
SELECT 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)}))
cur.execute(cur.mogrify(f"""\
SELECT key, value, 'METADATA' AS TYPE
FROM({" UNION ALL ".join(sub_from)}) AS all_metas
@ -301,7 +296,7 @@ def __search_pg_metadata(project_id, value, key=None, source=None):
def __generic_query(typename, value_length=None):
if value_length is None or value_length > 2:
return f"""(SELECT value, type
return f"""(SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s
@ -309,14 +304,14 @@ def __generic_query(typename, value_length=None):
AND value ILIKE %(svalue)s
LIMIT 5)
UNION
(SELECT value, type
(SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s
AND type='{typename}'
AND value ILIKE %(value)s
LIMIT 5);"""
return f"""SELECT value, type
return f"""SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s
@ -432,15 +427,15 @@ def __get_merged_queries(queries, value, project_id):
def __get_autocomplete_table(value, project_id):
with pg_client.PostgresClient() as cur:
if len(value) > 2:
query = """SELECT DISTINCT ON(value,type) project_id, value, type
FROM (SELECT project_id, type, value
FROM (SELECT *,
query = """SELECT DISTINCT value, type
FROM (SELECT type, value
FROM (SELECT type, value,
ROW_NUMBER() OVER (PARTITION BY type ORDER BY value) AS Row_ID
FROM public.autocomplete
WHERE project_id = %(project_id)s
AND value ILIKE %(svalue)s
UNION
SELECT *,
SELECT type, value,
ROW_NUMBER() OVER (PARTITION BY type ORDER BY value) AS Row_ID
FROM public.autocomplete
WHERE project_id = %(project_id)s
@ -448,9 +443,9 @@ def __get_autocomplete_table(value, project_id):
WHERE Row_ID <= 5) AS sfa
ORDER BY sfa.type;"""
else:
query = """SELECT DISTINCT ON(value,type) project_id, value, type
FROM (SELECT project_id, type, value
FROM (SELECT *,
query = """SELECT DISTINCT value, type
FROM (SELECT type, value
FROM (SELECT type, value,
ROW_NUMBER() OVER (PARTITION BY type ORDER BY value) AS Row_ID
FROM public.autocomplete
WHERE project_id = %(project_id)s

View file

@ -82,7 +82,7 @@ def get_top_key_values(project_id):
def __generic_query(typename, value_length=None):
if value_length is None or value_length > 2:
return f""" (SELECT value, type
return f""" (SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s
@ -91,7 +91,7 @@ def __generic_query(typename, value_length=None):
ORDER BY value
LIMIT 5)
UNION
(SELECT value, type
(SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s
@ -99,7 +99,7 @@ def __generic_query(typename, value_length=None):
AND value ILIKE %(value)s
ORDER BY value
LIMIT 5);"""
return f""" SELECT value, type
return f""" SELECT DISTINCT value, type
FROM public.autocomplete
WHERE
project_id = %(project_id)s