26
26
import org .springframework .data .domain .Sort ;
27
27
import org .springframework .data .r2dbc .convert .MappingR2dbcConverter ;
28
28
import org .springframework .data .r2dbc .convert .R2dbcConverter ;
29
+ import org .springframework .data .r2dbc .convert .R2dbcCustomConversions ;
30
+ import org .springframework .data .r2dbc .dialect .MySqlDialect ;
29
31
import org .springframework .data .r2dbc .dialect .PostgresDialect ;
32
+ import org .springframework .data .r2dbc .dialect .R2dbcDialect ;
30
33
import org .springframework .data .r2dbc .mapping .R2dbcMappingContext ;
31
34
import org .springframework .data .relational .core .mapping .Column ;
32
35
import org .springframework .data .relational .core .query .Criteria ;
45
48
*/
46
49
class QueryMapperUnitTests {
47
50
48
- private R2dbcMappingContext context = new R2dbcMappingContext ();
49
- private R2dbcConverter converter = new MappingR2dbcConverter (context );
50
-
51
- private QueryMapper mapper = new QueryMapper (PostgresDialect .INSTANCE , converter );
52
51
private BindTarget bindTarget = mock (BindTarget .class );
52
+ private QueryMapper mapper = createMapper (PostgresDialect .INSTANCE );
53
+
54
+ QueryMapper createMapper (R2dbcDialect dialect ) {
55
+
56
+ R2dbcCustomConversions conversions = R2dbcCustomConversions .of (dialect );
57
+
58
+ R2dbcMappingContext context = new R2dbcMappingContext ();
59
+ context .setSimpleTypeHolder (conversions .getSimpleTypeHolder ());
60
+ context .afterPropertiesSet ();
61
+
62
+ R2dbcConverter converter = new MappingR2dbcConverter (context , conversions );
63
+
64
+ return new QueryMapper (dialect , converter );
65
+ }
53
66
54
67
@ Test // gh-289
55
68
void shouldNotMapEmptyCriteria () {
@@ -189,7 +202,7 @@ void shouldMapExpression() {
189
202
Table table = Table .create ("my_table" ).as ("my_aliased_table" );
190
203
191
204
Expression mappedObject = mapper .getMappedObject (table .column ("alternative" ).as ("my_aliased_col" ),
192
- context .getRequiredPersistentEntity (Person .class ));
205
+ mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
193
206
194
207
assertThat (mappedObject ).hasToString ("my_aliased_table.another_name AS my_aliased_col" );
195
208
}
@@ -200,7 +213,7 @@ void shouldMapCountFunction() {
200
213
Table table = Table .create ("my_table" ).as ("my_aliased_table" );
201
214
202
215
Expression mappedObject = mapper .getMappedObject (Functions .count (table .column ("alternative" )),
203
- context .getRequiredPersistentEntity (Person .class ));
216
+ mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
204
217
205
218
assertThat (mappedObject ).hasToString ("COUNT(my_aliased_table.another_name)" );
206
219
}
@@ -211,7 +224,7 @@ void shouldMapExpressionToUnknownColumn() {
211
224
Table table = Table .create ("my_table" ).as ("my_aliased_table" );
212
225
213
226
Expression mappedObject = mapper .getMappedObject (table .column ("unknown" ).as ("my_aliased_col" ),
214
- context .getRequiredPersistentEntity (Person .class ));
227
+ mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
215
228
216
229
assertThat (mappedObject ).hasToString ("my_aliased_table.unknown AS my_aliased_col" );
217
230
}
@@ -392,7 +405,7 @@ void shouldMapSort() {
392
405
393
406
Sort sort = Sort .by (desc ("alternative" ));
394
407
395
- Sort mapped = mapper .getMappedObject (sort , context .getRequiredPersistentEntity (Person .class ));
408
+ Sort mapped = mapper .getMappedObject (sort , mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
396
409
397
410
assertThat (mapped .getOrderFor ("another_name" )).isEqualTo (desc ("another_name" ));
398
411
assertThat (mapped .getOrderFor ("alternative" )).isNull ();
@@ -403,7 +416,7 @@ void mapSortForPropertyPathInPrimitiveShouldFallBackToColumnName() {
403
416
404
417
Sort sort = Sort .by (desc ("alternative_name" ));
405
418
406
- Sort mapped = mapper .getMappedObject (sort , context .getRequiredPersistentEntity (Person .class ));
419
+ Sort mapped = mapper .getMappedObject (sort , mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
407
420
assertThat (mapped .getOrderFor ("alternative_name" )).isEqualTo (desc ("alternative_name" ));
408
421
}
409
422
@@ -427,19 +440,44 @@ void mapQueryForEnumArrayShouldMapToStringList() {
427
440
assertThat (bindings .getCondition ()).hasToString ("person.enum_value IN (?[$1], ?[$2])" );
428
441
}
429
442
443
+ @ Test // gh-733
444
+ void shouldMapBooleanConditionProperly () {
445
+
446
+ Criteria criteria = Criteria .where ("state" ).isFalse ();
447
+
448
+ BoundCondition bindings = map (criteria );
449
+
450
+ assertThat (bindings .getCondition ()).hasToString ("person.state = ?[$1]" );
451
+ assertThat (bindings .getBindings ().iterator ().next ().getValue ()).isEqualTo (false );
452
+ }
453
+
454
+ @ Test // gh-733
455
+ void shouldMapAndConvertBooleanConditionProperly () {
456
+
457
+ mapper = createMapper (MySqlDialect .INSTANCE );
458
+ Criteria criteria = Criteria .where ("state" ).isTrue ();
459
+
460
+ BoundCondition bindings = map (criteria );
461
+
462
+ assertThat (bindings .getCondition ()).hasToString ("person.state = ?[$1]" );
463
+ assertThat (bindings .getBindings ().iterator ().next ().getValue ()).isEqualTo ((byte ) 1 );
464
+ }
465
+
430
466
private BoundCondition map (Criteria criteria ) {
431
467
432
468
BindMarkersFactory markers = BindMarkersFactory .indexed ("$" , 1 );
433
469
434
470
return mapper .getMappedObject (markers .create (), criteria , Table .create ("person" ),
435
- context .getRequiredPersistentEntity (Person .class ));
471
+ mapper . getMappingContext () .getRequiredPersistentEntity (Person .class ));
436
472
}
437
473
438
474
static class Person {
439
475
440
476
String name ;
441
477
@ Column ("another_name" ) String alternative ;
442
478
MyEnum enumValue ;
479
+
480
+ boolean state ;
443
481
}
444
482
445
483
enum MyEnum {
0 commit comments