From e38387964fbb9b9776a3ede3879299638037fb9f Mon Sep 17 00:00:00 2001 From: GGrassia Date: Tue, 7 Oct 2025 11:24:59 +0200 Subject: [PATCH] feat (metadata): added IN clause management --- lightrag/kg/postgres_impl.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lightrag/kg/postgres_impl.py b/lightrag/kg/postgres_impl.py index 0266b59c..127b0637 100644 --- a/lightrag/kg/postgres_impl.py +++ b/lightrag/kg/postgres_impl.py @@ -2070,7 +2070,16 @@ class PGVectorStorage(BaseVectorStorage): return str(val).replace("'", "''") # escape single quotes def build_single_condition(key, value): - if isinstance(value, (dict, list)): + if isinstance(value, list): + # If list contains only scalars, use IN clause + if all(isinstance(v, (str, int, float, bool)) for v in value): + escaped_values = ", ".join(f"'{escape_str(str(v))}'" for v in value) + return f"metadata->>'{key}' IN ({escaped_values})" + else: + # fallback to JSON matching for complex types + json_value = json.dumps(value).replace("'", "''") + return f"metadata->'{key}' = '{json_value}'::jsonb" + elif isinstance(value, dict): json_value = json.dumps(value).replace("'", "''") return f"metadata->'{key}' = '{json_value}'::jsonb" elif isinstance(value, (int, float, bool)):