fixed 0 results when only filtering by lots of common tags

This commit is contained in:
Lex Berezhny 2019-07-21 19:44:10 -04:00
parent 3afd615447
commit de80a2ba97

View file

@ -432,8 +432,6 @@ def _apply_constraints_for_array_attributes(constraints, attr, cleaner, for_coun
all_items = {item for item in all_items if item not in not_items} all_items = {item for item in all_items if item not in not_items}
any_items = {item for item in any_items if item not in not_items} any_items = {item for item in any_items if item not in not_items}
if any_items:
any_queries = {} any_queries = {}
if attr == 'tag': if attr == 'tag':
@ -456,13 +454,15 @@ def _apply_constraints_for_array_attributes(constraints, attr, cleaner, for_coun
values = ', '.join( values = ', '.join(
f':$any_common_tag{i}' for i in range(len(common_tags)) f':$any_common_tag{i}' for i in range(len(common_tags))
) )
constraints[f'#_any_common_tags'] = f""" any_queries[f'#_any_common_tags'] = f"""
EXISTS( EXISTS(
SELECT 1 FROM tag WHERE claim.claim_hash=tag.claim_hash SELECT 1 FROM tag WHERE claim.claim_hash=tag.claim_hash
AND tag IN ({values}) AND tag IN ({values})
) )
""" """
if any_items:
constraints.update({ constraints.update({
f'$any_{attr}{i}': item for i, item in enumerate(any_items) f'$any_{attr}{i}': item for i, item in enumerate(any_items)
}) })
@ -481,6 +481,7 @@ def _apply_constraints_for_array_attributes(constraints, attr, cleaner, for_coun
AND {attr} IN ({values}) AND {attr} IN ({values})
) )
""" """
if len(any_queries) == 1: if len(any_queries) == 1:
constraints.update(any_queries) constraints.update(any_queries)
elif len(any_queries) > 1: elif len(any_queries) > 1: