@@ -139,4 +139,115 @@ public void testComplexIdentifiers2() {
139
139
.isEqualTo ("node.`metadata.author` IN [\" john\" ,\" jill\" ] AND node.`metadata.'article_type'` = \" blog\" " );
140
140
}
141
141
142
+ @ Test
143
+ public void testEmptyList () {
144
+ // category IN []
145
+ String vectorExpr = this .converter
146
+ .convertExpression (new Expression (IN , new Key ("category" ), new Value (List .of ())));
147
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.category` IN []" );
148
+ }
149
+
150
+ @ Test
151
+ public void testSingleItemList () {
152
+ // status IN ["active"]
153
+ String vectorExpr = this .converter
154
+ .convertExpression (new Expression (IN , new Key ("status" ), new Value (List .of ("active" ))));
155
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.status` IN [\" active\" ]" );
156
+ }
157
+
158
+ @ Test
159
+ public void testNullValue () {
160
+ // description = null
161
+ String vectorExpr = this .converter
162
+ .convertExpression (new Expression (EQ , new Key ("description" ), new Value (null )));
163
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.description` = null" );
164
+ }
165
+
166
+ @ Test
167
+ public void testNestedJsonPath () {
168
+ // entity.profile.name = "EntityA"
169
+ String vectorExpr = this .converter
170
+ .convertExpression (new Expression (EQ , new Key ("entity.profile.name" ), new Value ("EntityA" )));
171
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.entity.profile.name` = \" EntityA\" " );
172
+ }
173
+
174
+ @ Test
175
+ public void testNumericStringValue () {
176
+ // id = "1"
177
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("id" ), new Value ("1" )));
178
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.id` = \" 1\" " );
179
+ }
180
+
181
+ @ Test
182
+ public void testZeroValue () {
183
+ // count = 0
184
+ String vectorExpr = this .converter .convertExpression (new Expression (EQ , new Key ("count" ), new Value (0 )));
185
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.count` = 0" );
186
+ }
187
+
188
+ @ Test
189
+ public void testComplexNestedGroups () {
190
+ // ((fieldA >= 100 AND fieldB = "X1") OR (fieldA >= 50 AND fieldB = "Y2")) AND
191
+ // fieldC <> "inactive"
192
+ String vectorExpr = this .converter .convertExpression (new Expression (AND ,
193
+ new Group (new Expression (OR ,
194
+ new Group (new Expression (AND , new Expression (GTE , new Key ("fieldA" ), new Value (100 )),
195
+ new Expression (EQ , new Key ("fieldB" ), new Value ("X1" )))),
196
+ new Group (new Expression (AND , new Expression (GTE , new Key ("fieldA" ), new Value (50 )),
197
+ new Expression (EQ , new Key ("fieldB" ), new Value ("Y2" )))))),
198
+ new Expression (NE , new Key ("fieldC" ), new Value ("inactive" ))));
199
+
200
+ assertThat (vectorExpr ).isEqualTo ("((node.`metadata.fieldA` >= 100 AND node.`metadata.fieldB` = \" X1\" ) OR "
201
+ + "(node.`metadata.fieldA` >= 50 AND node.`metadata.fieldB` = \" Y2\" )) AND "
202
+ + "node.`metadata.fieldC` <> \" inactive\" " );
203
+ }
204
+
205
+ @ Test
206
+ public void testMixedDataTypes () {
207
+ // active = true AND score >= 1.5 AND tags IN ["featured", "premium"] AND version
208
+ // = 1
209
+ String vectorExpr = this .converter .convertExpression (new Expression (AND ,
210
+ new Expression (AND ,
211
+ new Expression (AND , new Expression (EQ , new Key ("active" ), new Value (true )),
212
+ new Expression (GTE , new Key ("score" ), new Value (1.5 ))),
213
+ new Expression (IN , new Key ("tags" ), new Value (List .of ("featured" , "premium" )))),
214
+ new Expression (EQ , new Key ("version" ), new Value (1 ))));
215
+
216
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.active` = true AND node.`metadata.score` >= 1.5 AND "
217
+ + "node.`metadata.tags` IN [\" featured\" ,\" premium\" ] AND node.`metadata.version` = 1" );
218
+ }
219
+
220
+ @ Test
221
+ public void testNinWithMixedTypes () {
222
+ // status NOT IN ["A", "B", "C"]
223
+ String vectorExpr = this .converter
224
+ .convertExpression (new Expression (NIN , new Key ("status" ), new Value (List .of ("A" , "B" , "C" ))));
225
+ assertThat (vectorExpr ).isEqualTo ("NOT node.`metadata.status` IN [\" A\" ,\" B\" ,\" C\" ]" );
226
+ }
227
+
228
+ @ Test
229
+ public void testEmptyStringValue () {
230
+ // description <> ""
231
+ String vectorExpr = this .converter .convertExpression (new Expression (NE , new Key ("description" ), new Value ("" )));
232
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.description` <> \" \" " );
233
+ }
234
+
235
+ @ Test
236
+ public void testArrayIndexAccess () {
237
+ // tags[0] = "important"
238
+ String vectorExpr = this .converter
239
+ .convertExpression (new Expression (EQ , new Key ("tags[0]" ), new Value ("important" )));
240
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.tags[0]` = \" important\" " );
241
+ }
242
+
243
+ @ Test
244
+ public void testNegativeNumbers () {
245
+ // valueA <= -5 AND valueB >= -10
246
+ String vectorExpr = this .converter
247
+ .convertExpression (new Expression (AND , new Expression (LTE , new Key ("valueA" ), new Value (-5 )),
248
+ new Expression (GTE , new Key ("valueB" ), new Value (-10 ))));
249
+
250
+ assertThat (vectorExpr ).isEqualTo ("node.`metadata.valueA` <= -5 AND node.`metadata.valueB` >= -10" );
251
+ }
252
+
142
253
}
0 commit comments