@@ -145,6 +145,37 @@ def test_sqlite_exact_get_preserves_requested_id_order_and_duplicates(tmp_path):
145145 assert result .documents == ["doc b" , "doc a" , "doc b" ]
146146
147147
148+ @pytest .mark .parametrize (
149+ "filters" ,
150+ [
151+ {"where" : {"wing" : "keep" }},
152+ {"where_document" : {"$contains" : "needle" }},
153+ {
154+ "where" : {"wing" : "keep" },
155+ "where_document" : {"$contains" : "needle" },
156+ },
157+ ],
158+ )
159+ def test_sqlite_exact_get_ids_intersects_filters (tmp_path , filters ):
160+ _backend , col = _collection (tmp_path )
161+ col .add (
162+ ids = ["requested" , "not-requested" , "filtered-out" ],
163+ documents = ["needle requested" , "needle other" , "different" ],
164+ metadatas = [{"wing" : "keep" }, {"wing" : "keep" }, {"wing" : "drop" }],
165+ embeddings = [[1 , 0 ], [0 , 1 ], [0.5 , 0.5 ]],
166+ )
167+
168+ result = col .get (
169+ ids = ["filtered-out" , "requested" , "requested" ],
170+ include = [],
171+ ** filters ,
172+ )
173+
174+ assert result .ids == ["requested" , "requested" ]
175+ assert result .documents == []
176+ assert result .metadatas == []
177+
178+
148179def _doc_select_sql (col , action ):
149180 """Run ``action`` while tracing SQL; return (result, [documents SELECTs]).
150181
@@ -1211,6 +1242,37 @@ def test_sqlite_exact_query_cache_invalidates_on_add(tmp_path):
12111242 assert second .ids [0 ] == ["new" ]
12121243
12131244
1245+ def test_sqlite_exact_query_cache_invalidates_after_external_handle_write (tmp_path ):
1246+ reader_backend , reader = _collection (tmp_path )
1247+ reader .add (
1248+ ids = ["old" ],
1249+ documents = ["old" ],
1250+ metadatas = [{}],
1251+ embeddings = [[0.0 , 1.0 ]],
1252+ )
1253+ first = reader .query (query_embeddings = [[1.0 , 0.0 ]], n_results = 1 )
1254+ assert first .ids [0 ] == ["old" ]
1255+
1256+ writer_backend = SQLiteExactBackend ()
1257+ writer = writer_backend .get_collection (
1258+ palace = PalaceRef (id = str (tmp_path ), local_path = str (tmp_path )),
1259+ collection_name = "mempalace_drawers" ,
1260+ create = False ,
1261+ )
1262+ writer .add (
1263+ ids = ["new" ],
1264+ documents = ["new" ],
1265+ metadatas = [{}],
1266+ embeddings = [[1.0 , 0.0 ]],
1267+ )
1268+
1269+ second = reader .query (query_embeddings = [[1.0 , 0.0 ]], n_results = 2 )
1270+ assert second .ids [0 ] == ["new" , "old" ]
1271+
1272+ writer_backend .close ()
1273+ reader_backend .close ()
1274+
1275+
12141276def test_sqlite_exact_wing_room_counts (tmp_path ):
12151277 from mempalace .backends .sqlite_exact import sqlite_wing_room_counts
12161278
0 commit comments