Skip to content

Commit 5fca261

Browse files
committed
Use only converter for elements of parameter array. (#1744)
Closes #1743.
1 parent ea91a1b commit 5fca261

File tree

2 files changed

+71
-10
lines changed

2 files changed

+71
-10
lines changed

src/main/java/org/springframework/data/couchbase/core/query/QueryCriteria.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -658,7 +658,7 @@ private static Object convert(CouchbaseConverter converter, Object value) {
658658
private void addAsCollection(JsonArray posValues, Collection collection, CouchbaseConverter converter) {
659659
JsonArray ja = JsonValue.ja();
660660
for (Object e : collection) {
661-
ja.add(String.valueOf(convert(converter, e)));
661+
ja.add(convert(converter, e));
662662
}
663663
posValues.add(ja);
664664
}

src/test/java/org/springframework/data/couchbase/core/query/QueryCriteriaTests.java

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,16 @@
2424
import static org.springframework.data.couchbase.core.query.QueryCriteria.where;
2525
import static org.springframework.data.couchbase.repository.query.support.N1qlUtils.escapedBucket;
2626

27+
import java.math.BigInteger;
2728
import java.util.Arrays;
2829

2930
import org.junit.jupiter.api.Test;
3031

3132
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;
3237

3338
/**
3439
* @author Mauro Monti
@@ -235,6 +240,10 @@ void testIsNotValued() {
235240
void testBetween() {
236241
QueryCriteria c = where(i("name")).between("Davis", "Gump");
237242
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());
238247
}
239248

240249
@Test
@@ -243,7 +252,37 @@ void testIn() {
243252
QueryCriteria c = where(i("name")).in((Object) args); // the first arg is an array
244253
assertEquals("`name` in [\"gump\",\"davis\"]", c.export());
245254
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));
247286
assertEquals(arrayToString(args), parameters.get(0).toString());
248287
}
249288

@@ -254,20 +293,30 @@ void testNotIn() {
254293
assertEquals("not( (`name` in [\"gump\",\"davis\"]) )", c.export());
255294
// this tests creating parameters from the args.
256295
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));
258297
assertEquals(arrayToString(args), parameters.get(0).toString());
259298
}
260299

261300
@Test
262301
void testTrue() {
263302
QueryCriteria c = where(i("name")).TRUE();
264303
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());
265309
}
266310

267311
@Test
268312
void testFalse() {
269313
QueryCriteria c = where(i("name")).FALSE();
270314
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());
271320
}
272321

273322
@Test
@@ -304,17 +353,29 @@ private String arrayToString(Object[] array) {
304353
sb.append(",");
305354
}
306355
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));
314357
}
315358
sb.append("]");
316359
}
317360
return sb.toString();
318361
}
319362

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+
}
320381
}

0 commit comments

Comments
 (0)