Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,9 @@ def metadata_filter_to_opencypher_filter(f: MetadataFilter) -> str:
else:
raise ValueError(f'Invalid metadata filter type: {type(metadata_filter)}')

if not filter_strs:
return ''

if metadata_filters.condition == FilterCondition.NOT:
return f"(NOT {' '.join(filter_strs)})"
elif metadata_filters.condition == FilterCondition.AND or metadata_filters.condition == FilterCondition.OR:
Expand Down
27 changes: 27 additions & 0 deletions lexical-graph/tests/unit/storage/graph/test_graph_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -329,3 +329,30 @@ def test_passes_through_to_recursive_parser(self):
)
result = filter_config_to_opencypher_filters(config)
assert "source.category = 'tech'" in result


def test_empty_filters_list_returns_empty_string(self):
"""Regression test for issue #408.

When MetadataFilters has an empty filters list, parse_metadata_filters_recursive
should return '' (empty string) instead of '()' (empty parentheses).

Without this fix, the VersionManager generates invalid Cypher:
WHERE () AND coalesce(...)
which Neptune Database rejects with MalformedQueryException.
"""
filters = MetadataFilters(
filters=[],
condition=FilterCondition.AND,
)
result = parse_metadata_filters_recursive(filters)
assert result == ''

def test_empty_filters_list_or_condition_returns_empty_string(self):
"""Same as above but with OR condition."""
filters = MetadataFilters(
filters=[],
condition=FilterCondition.OR,
)
result = parse_metadata_filters_recursive(filters)
assert result == ''