From 735b02062458343d160aeede79666aecd70a6dc3 Mon Sep 17 00:00:00 2001 From: TheEpTic Date: Thu, 29 May 2025 17:55:16 +0100 Subject: [PATCH] BUG FIX: Fix trailing AND in edge_search_filter_query_constructor Cypher query (#541) Fix trailing AND in edge_search_filter_query_constructor Cypher query Corrected the edge_search_filter_query_constructor function to prevent trailing AND operators in generated Cypher queries, which caused Neo.ClientError.Statement.SyntaxError. Changed condition from `j != len(and_filter_query) - 1` to `j != len(and_filters) - 1` for valid_at, invalid_at, created_at, and expired_at filter blocks. Also fixed outer loop condition to use `len(filters.)` instead of `len(or_list)`. Ensures valid Cypher syntax for single DateFilter cases. Co-authored-by: TheEpTic <326774+TheEpTic@users.noreply.github.com> --- graphiti_core/search/search_filters.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/graphiti_core/search/search_filters.py b/graphiti_core/search/search_filters.py index c44e0a52..8f93a513 100644 --- a/graphiti_core/search/search_filters.py +++ b/graphiti_core/search/search_filters.py @@ -95,12 +95,12 @@ def edge_search_filter_query_constructor( and_filter_query = '' for j, and_filter in enumerate(and_filters): and_filter_query += and_filter - if j != len(and_filter_query) - 1: + if j != len(and_filters) - 1: and_filter_query += ' AND ' valid_at_filter += and_filter_query - if i == len(or_list) - 1: + if i == len(filters.valid_at) - 1: valid_at_filter += ')' else: valid_at_filter += ' OR ' @@ -120,12 +120,12 @@ def edge_search_filter_query_constructor( and_filter_query = '' for j, and_filter in enumerate(and_filters): and_filter_query += and_filter - if j != len(and_filter_query) - 1: + if j != len(and_filters) - 1: and_filter_query += ' AND ' invalid_at_filter += and_filter_query - if i == len(or_list) - 1: + if i == len(filters.invalid_at) - 1: invalid_at_filter += ')' else: invalid_at_filter += ' OR ' @@ -145,12 +145,12 @@ def edge_search_filter_query_constructor( and_filter_query = '' for j, and_filter in enumerate(and_filters): and_filter_query += and_filter - if j != len(and_filter_query) - 1: + if j != len(and_filters) - 1: and_filter_query += ' AND ' created_at_filter += and_filter_query - if i == len(or_list) - 1: + if i == len(filters.created_at) - 1: created_at_filter += ')' else: created_at_filter += ' OR ' @@ -170,12 +170,12 @@ def edge_search_filter_query_constructor( and_filter_query = '' for j, and_filter in enumerate(and_filters): and_filter_query += and_filter - if j != len(and_filter_query) - 1: + if j != len(and_filters) - 1: and_filter_query += ' AND ' expired_at_filter += and_filter_query - if i == len(or_list) - 1: + if i == len(filters.expired_at) - 1: expired_at_filter += ')' else: expired_at_filter += ' OR '