24
24
import static org .springframework .data .couchbase .core .query .QueryCriteria .where ;
25
25
import static org .springframework .data .couchbase .repository .query .support .N1qlUtils .escapedBucket ;
26
26
27
+ import java .math .BigInteger ;
27
28
import java .util .Arrays ;
28
29
29
30
import org .junit .jupiter .api .Test ;
30
31
31
32
import com .couchbase .client .java .json .JsonArray ;
33
+ import org .springframework .data .couchbase .core .convert .CouchbaseCustomConversions ;
34
+ import org .springframework .data .couchbase .core .convert .MappingCouchbaseConverter ;
35
+ import org .springframework .data .couchbase .core .mapping .CouchbaseMappingContext ;
36
+ import org .springframework .data .couchbase .domain .Config ;
32
37
33
38
/**
34
39
* @author Mauro Monti
@@ -235,6 +240,10 @@ void testIsNotValued() {
235
240
void testBetween () {
236
241
QueryCriteria c = where (i ("name" )).between ("Davis" , "Gump" );
237
242
assertEquals ("`name` between \" Davis\" and \" Gump\" " , c .export ());
243
+ JsonArray parameters = JsonArray .create ();
244
+ assertEquals ("`name` between $1 and $2" , c .export (new int [1 ], parameters , converter ));
245
+ assertEquals ("Davis" , parameters .get (0 ).toString ());
246
+ assertEquals ("Gump" , parameters .get (1 ).toString ());
238
247
}
239
248
240
249
@ Test
@@ -243,7 +252,37 @@ void testIn() {
243
252
QueryCriteria c = where (i ("name" )).in ((Object ) args ); // the first arg is an array
244
253
assertEquals ("`name` in [\" gump\" ,\" davis\" ]" , c .export ());
245
254
JsonArray parameters = JsonArray .create ();
246
- assertEquals ("`name` in $1" , c .export (new int [1 ], parameters , null ));
255
+ assertEquals ("`name` in $1" , c .export (new int [1 ], parameters , converter ));
256
+ assertEquals (arrayToString (args ), parameters .get (0 ).toString ());
257
+ }
258
+
259
+ @ Test
260
+ void testInInteger () {
261
+ Integer [] args = new Integer []{1 , 2 };
262
+ QueryCriteria c = where (i ("name" )).in ((Object ) args ); // the first arg is an array
263
+ assertEquals ("`name` in [1,2]" , c .export ());
264
+ JsonArray parameters = JsonArray .create ();
265
+ assertEquals ("`name` in $1" , c .export (new int [1 ], parameters , converter ));
266
+ assertEquals (arrayToString (args ), parameters .get (0 ).toString ());
267
+ }
268
+
269
+ @ Test
270
+ void testInBigBoolean () {
271
+ Boolean [] args = new Boolean []{true , false };
272
+ QueryCriteria c = where (i ("name" )).in ((Object ) args ); // the first arg is an array
273
+ assertEquals ("`name` in [" +true +"," +false +"]" , c .export ());
274
+ JsonArray parameters = JsonArray .create ();
275
+ assertEquals ("`name` in $1" , c .export (new int [1 ], parameters , converter ));
276
+ assertEquals (arrayToString (args ), parameters .get (0 ).toString ());
277
+ }
278
+
279
+ @ Test
280
+ void testInBigInteger () {
281
+ BigInteger [] args = new BigInteger []{BigInteger .TEN , BigInteger .ONE };
282
+ QueryCriteria c = where (i ("name" )).in ((Object ) args ); // the first arg is an array
283
+ assertEquals ("`name` in [" +BigInteger .TEN +"," +BigInteger .ONE +"]" , c .export (null , null , converter ));
284
+ JsonArray parameters = JsonArray .create ();
285
+ assertEquals ("`name` in $1" , c .export (new int [1 ], parameters , converter ));
247
286
assertEquals (arrayToString (args ), parameters .get (0 ).toString ());
248
287
}
249
288
@@ -254,20 +293,30 @@ void testNotIn() {
254
293
assertEquals ("not( (`name` in [\" gump\" ,\" davis\" ]) )" , c .export ());
255
294
// this tests creating parameters from the args.
256
295
JsonArray parameters = JsonArray .create ();
257
- assertEquals ("not( (`name` in $1) )" , c .export (new int [1 ], parameters , null ));
296
+ assertEquals ("not( (`name` in $1) )" , c .export (new int [1 ], parameters , converter ));
258
297
assertEquals (arrayToString (args ), parameters .get (0 ).toString ());
259
298
}
260
299
261
300
@ Test
262
301
void testTrue () {
263
302
QueryCriteria c = where (i ("name" )).TRUE ();
264
303
assertEquals ("`name` = true" , c .export ());
304
+
305
+ JsonArray parameters1 = JsonArray .create ();
306
+ QueryCriteria c1 = where (i ("name" )).is (true );
307
+ assertEquals ("`name` = $1" , c1 .export (new int [1 ], parameters1 , converter ));
308
+ assertEquals ("true" , parameters1 .get (0 ).toString ());
265
309
}
266
310
267
311
@ Test
268
312
void testFalse () {
269
313
QueryCriteria c = where (i ("name" )).FALSE ();
270
314
assertEquals ("`name` = false" , c .export ());
315
+
316
+ JsonArray parameters1 = JsonArray .create ();
317
+ QueryCriteria c1 = where (i ("name" )).is (false );
318
+ assertEquals ("`name` = $1" , c1 .export (new int [1 ], parameters1 , converter ));
319
+ assertEquals ("false" , parameters1 .get (0 ).toString ());
271
320
}
272
321
273
322
@ Test
@@ -304,17 +353,29 @@ private String arrayToString(Object[] array) {
304
353
sb .append ("," );
305
354
}
306
355
first = false ;
307
- if (e instanceof Number )
308
- sb .append (e );
309
- else {
310
- sb .append ("\" " );
311
- sb .append (e );
312
- sb .append ("\" " );
313
- }
356
+ sb .append (convert (e ));
314
357
}
315
358
sb .append ("]" );
316
359
}
317
360
return sb .toString ();
318
361
}
319
362
363
+ private static Config config = new Config ();
364
+ private static CouchbaseMappingContext mappingContext ;
365
+ static {
366
+ try {
367
+ mappingContext = config .couchbaseMappingContext (config .customConversions ());
368
+ } catch (Exception e ) {
369
+ throw new RuntimeException (e );
370
+ }
371
+ }
372
+
373
+ private static MappingCouchbaseConverter converter = (new Config ()).mappingCouchbaseConverter (mappingContext ,(CouchbaseCustomConversions )config .customConversions ());
374
+ Object convert (Object e ){
375
+ Object o = converter .convertForWriteIfNeeded (e );
376
+ if (o instanceof String ){
377
+ return "\" " +o +"\" " ;
378
+ }
379
+ return o ;
380
+ }
320
381
}
0 commit comments