feat (metadata): added IN clause management
This commit is contained in:
parent
e04cd3c7d8
commit
e38387964f
1 changed files with 10 additions and 1 deletions
|
|
@ -2070,7 +2070,16 @@ class PGVectorStorage(BaseVectorStorage):
|
||||||
return str(val).replace("'", "''") # escape single quotes
|
return str(val).replace("'", "''") # escape single quotes
|
||||||
|
|
||||||
def build_single_condition(key, value):
|
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("'", "''")
|
json_value = json.dumps(value).replace("'", "''")
|
||||||
return f"metadata->'{key}' = '{json_value}'::jsonb"
|
return f"metadata->'{key}' = '{json_value}'::jsonb"
|
||||||
elif isinstance(value, (int, float, bool)):
|
elif isinstance(value, (int, float, bool)):
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue