@@ -155,4 +155,183 @@ public void testCombinedComparisons() {
155
155
.isEqualTo ("metadata[\" price\" ] > 1000 && metadata[\" temperature\" ] < 25 && metadata[\" humidity\" ] <= 80" );
156
156
}
157
157
158
+ @ Test
159
+ public void testNin () {
160
+ // region not in ["A", "B", "C"]
161
+ String vectorExpr = this .converter
162
+ .convertExpression (new Expression (NIN , new Key ("region" ), new Value (List .of ("A" , "B" , "C" ))));
163
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" region\" ] not in [\" A\" ,\" B\" ,\" C\" ]" );
164
+ }
165
+
166
+ @ Test
167
+ public void testNullValue () {
168
+ // status == null
169
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("status" ), new Value (null )));
170
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" status\" ] == null" );
171
+ }
172
+
173
+ @ Test
174
+ public void testEmptyString () {
175
+ // name == ""
176
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("name" ), new Value ("" )));
177
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" name\" ] == \" \" " );
178
+ }
179
+
180
+ @ Test
181
+ public void testNumericString () {
182
+ // id == "12345"
183
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("id" ), new Value ("12345" )));
184
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" id\" ] == \" 12345\" " );
185
+ }
186
+
187
+ @ Test
188
+ public void testLongValue () {
189
+ // timestamp >= 1640995200000L
190
+ String vectorExpr = this .converter
191
+ .convertExpression (new Expression (GTE , new Key ("timestamp" ), new Value (1640995200000L )));
192
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" timestamp\" ] >= 1640995200000" );
193
+ }
194
+
195
+ @ Test
196
+ public void testFloatValue () {
197
+ // score >= 4.5f
198
+ String vectorExpr = this .converter .convertExpression (new Expression (GTE , new Key ("score" ), new Value (4.5f )));
199
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" score\" ] >= 4.5" );
200
+ }
201
+
202
+ @ Test
203
+ public void testMixedTypesList () {
204
+ // tags in [1, "priority", true]
205
+ String vectorExpr = this .converter
206
+ .convertExpression (new Expression (IN , new Key ("tags" ), new Value (List .of (1 , "priority" , true ))));
207
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" tags\" ] in [1,\" priority\" ,true]" );
208
+ }
209
+
210
+ @ Test
211
+ public void testEmptyList () {
212
+ // categories in []
213
+ String vectorExpr = this .converter
214
+ .convertExpression (new Expression (IN , new Key ("categories" ), new Value (List .of ())));
215
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" categories\" ] in []" );
216
+ }
217
+
218
+ @ Test
219
+ public void testSingleItemList () {
220
+ // status in ["active"]
221
+ String vectorExpr = this .converter
222
+ .convertExpression (new Expression (IN , new Key ("status" ), new Value (List .of ("active" ))));
223
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" status\" ] in [\" active\" ]" );
224
+ }
225
+
226
+ @ Test
227
+ public void testKeyWithDots () {
228
+ // "value.field" >= 18
229
+ String vectorExpr = this .converter
230
+ .convertExpression (new Expression (GTE , new Key ("value.field" ), new Value (18 )));
231
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" value.field\" ] >= 18" );
232
+ }
233
+
234
+ @ Test
235
+ public void testKeyWithSpecialCharacters () {
236
+ // "field-name_with@symbols" == "value"
237
+ String vectorExpr = this .converter
238
+ .convertExpression (new Expression (EQ , new Key ("field-name_with@symbols" ), new Value ("value" )));
239
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" field-name_with@symbols\" ] == \" value\" " );
240
+ }
241
+
242
+ @ Test
243
+ public void testTripleAnd () {
244
+ // value >= 100 AND type == "primary" AND region == "X"
245
+ String vectorExpr = this .converter .convertExpression (new Expression (AND ,
246
+ new Expression (AND , new Expression (GTE , new Key ("value" ), new Value (100 )),
247
+ new Expression (EQ , new Key ("type" ), new Value ("primary" ))),
248
+ new Expression (EQ , new Key ("region" ), new Value ("X" ))));
249
+
250
+ assertThat (vectorExpr ).isEqualTo (
251
+ "metadata[\" value\" ] >= 100 && metadata[\" type\" ] == \" primary\" && metadata[\" region\" ] == \" X\" " );
252
+ }
253
+
254
+ @ Test
255
+ public void testTripleOr () {
256
+ // value < 50 OR value > 200 OR type == "special"
257
+ String vectorExpr = this .converter .convertExpression (new Expression (OR ,
258
+ new Expression (OR , new Expression (LT , new Key ("value" ), new Value (50 )),
259
+ new Expression (GT , new Key ("value" ), new Value (200 ))),
260
+ new Expression (EQ , new Key ("type" ), new Value ("special" ))));
261
+
262
+ assertThat (vectorExpr )
263
+ .isEqualTo ("metadata[\" value\" ] < 50 || metadata[\" value\" ] > 200 || metadata[\" type\" ] == \" special\" " );
264
+ }
265
+
266
+ @ Test
267
+ public void testNegativeNumbers () {
268
+ // temperature >= -20 AND temperature <= -5
269
+ String vectorExpr = this .converter
270
+ .convertExpression (new Expression (AND , new Expression (GTE , new Key ("temperature" ), new Value (-20 )),
271
+ new Expression (LTE , new Key ("temperature" ), new Value (-5 ))));
272
+
273
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" temperature\" ] >= -20 && metadata[\" temperature\" ] <= -5" );
274
+ }
275
+
276
+ @ Test
277
+ public void testZeroValues () {
278
+ // count == 0
279
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("count" ), new Value (0 )));
280
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" count\" ] == 0" );
281
+ }
282
+
283
+ @ Test
284
+ public void testBooleanFalse () {
285
+ // enabled == false
286
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("enabled" ), new Value (false )));
287
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" enabled\" ] == false" );
288
+ }
289
+
290
+ @ Test
291
+ public void testVeryLongString () {
292
+ // Test with a very long string value
293
+ String longValue = "This is a very long string that might be used as a value in a filter expression to test how the converter handles lengthy text content that could potentially cause issues with string manipulation" ;
294
+ String vectorExpr = this .converter
295
+ .convertExpression (new Expression (EQ , new Key ("content" ), new Value (longValue )));
296
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" content\" ] == \" " + longValue + "\" " );
297
+ }
298
+
299
+ @ Test
300
+ public void testRangeQuery () {
301
+ // value >= 10 AND value <= 100
302
+ String vectorExpr = this .converter
303
+ .convertExpression (new Expression (AND , new Expression (GTE , new Key ("value" ), new Value (10 )),
304
+ new Expression (LTE , new Key ("value" ), new Value (100 ))));
305
+
306
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" value\" ] >= 10 && metadata[\" value\" ] <= 100" );
307
+ }
308
+
309
+ @ Test
310
+ public void testComplexOrWithMultipleFields () {
311
+ // type == "primary" OR status == "active" OR priority > 5
312
+ String vectorExpr = this .converter .convertExpression (new Expression (OR ,
313
+ new Expression (OR , new Expression (EQ , new Key ("type" ), new Value ("primary" )),
314
+ new Expression (EQ , new Key ("status" ), new Value ("active" ))),
315
+ new Expression (GT , new Key ("priority" ), new Value (5 ))));
316
+
317
+ assertThat (vectorExpr ).isEqualTo (
318
+ "metadata[\" type\" ] == \" primary\" || metadata[\" status\" ] == \" active\" || metadata[\" priority\" ] > 5" );
319
+ }
320
+
321
+ @ Test
322
+ public void testDoubleQuotedKey () {
323
+ // "field with spaces" == "value"
324
+ String vectorExpr = this .converter
325
+ .convertExpression (new Expression (EQ , new Key ("\" field with spaces\" " ), new Value ("value" )));
326
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" field with spaces\" ] == \" value\" " );
327
+ }
328
+
329
+ @ Test
330
+ public void testSingleQuotedKey () {
331
+ // 'field with spaces' == "value"
332
+ String vectorExpr = this .converter
333
+ .convertExpression (new Expression (EQ , new Key ("'field with spaces'" ), new Value ("value" )));
334
+ assertThat (vectorExpr ).isEqualTo ("metadata[\" field with spaces\" ] == \" value\" " );
335
+ }
336
+
158
337
}
0 commit comments