diff --git a/pom.xml b/pom.xml
index ad15c2b9..40719da0 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
org.springframework.data
spring-data-r2dbc
- 1.5.0-SNAPSHOT
+ 1.5.0-698-SNAPSHOT
Spring Data R2DBC
Spring Data module for R2DBC
diff --git a/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java b/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
index cec79ee3..6d18a72b 100644
--- a/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
+++ b/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java
@@ -21,7 +21,6 @@
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
-
import org.springframework.data.domain.Sort;
import org.springframework.data.mapping.MappingException;
import org.springframework.data.mapping.PersistentPropertyPath;
@@ -81,8 +80,7 @@ public QueryMapper(R2dbcDialect dialect, R2dbcConverter converter) {
}
/**
- * Render a {@link SqlIdentifier} for SQL usage.
- * The resulting String might contain quoting characters.
+ * Render a {@link SqlIdentifier} for SQL usage. The resulting String might contain quoting characters.
*
* @param identifier the identifier to be rendered.
* @return an identifier String.
@@ -473,11 +471,15 @@ private Condition createCondition(Column column, @Nullable Object mappedValue, C
}
if (comparator == Comparator.IS_TRUE) {
- return column.isEqualTo(SQL.literalOf(true));
+ Expression bind = booleanBind(column, mappedValue, valueType, bindings, ignoreCase);
+
+ return column.isEqualTo(bind);
}
if (comparator == Comparator.IS_FALSE) {
- return column.isEqualTo(SQL.literalOf(false));
+ Expression bind = booleanBind(column, mappedValue, valueType, bindings, ignoreCase);
+
+ return column.isEqualTo(bind);
}
Expression columnExpression = column;
@@ -627,6 +629,13 @@ private Expression bind(@Nullable Object mappedValue, Class> valueType, Mutabl
: SQL.bindMarker(bindMarker.getPlaceholder());
}
+ private Expression booleanBind(Column column, Object mappedValue, Class> valueType, MutableBindings bindings,
+ boolean ignoreCase) {
+ BindMarker bindMarker = bindings.nextMarker(column.getName().getReference());
+
+ return bind(mappedValue, valueType, bindings, bindMarker, ignoreCase);
+ }
+
/**
* Value object to represent a field and its meta-information.
*/
@@ -750,7 +759,9 @@ private boolean isPathToJavaLangClassProperty(PropertyPath path) {
/*
* (non-Javadoc)
- * @see org.springframework.data.r2dbc.core.convert.QueryMapper.Field#getTypeHint()
+ *
+ * @see
+ * org.springframework.data.r2dbc.core.convert.QueryMapper.Field#getTypeHint()
*/
@Override
public TypeInformation> getTypeHint() {
diff --git a/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java b/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java
index 51feffbf..9a5d39c3 100644
--- a/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java
+++ b/src/test/java/org/springframework/data/r2dbc/repository/AbstractR2dbcRepositoryIntegrationTests.java
@@ -106,8 +106,8 @@ void before() {
@Test
void shouldInsertNewItems() {
- LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12);
- LegoSet legoSet2 = new LegoSet(null, "FORSCHUNGSSCHIFF", 13);
+ LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12, true);
+ LegoSet legoSet2 = new LegoSet(null, "FORSCHUNGSSCHIFF", 13, false);
repository.saveAll(Arrays.asList(legoSet1, legoSet2)) //
.as(StepVerifier::create) //
@@ -181,8 +181,8 @@ void shouldByStringQueryApplyingDtoProjection() {
@Test // gh-344
void shouldFindApplyingDistinctProjection() {
- LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12);
- LegoSet legoSet2 = new LegoSet(null, "SCHAUFELRADBAGGER", 13);
+ LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12, true);
+ LegoSet legoSet2 = new LegoSet(null, "SCHAUFELRADBAGGER", 13, false);
repository.saveAll(Arrays.asList(legoSet1, legoSet2)) //
.as(StepVerifier::create) //
@@ -211,6 +211,19 @@ void shouldFindApplyingSimpleTypeProjection() {
}).verifyComplete();
}
+ @Test // gh-698
+ void shouldBeTrue() {
+ shouldInsertNewItems();
+
+ repository.findLegoSetByFlag(true) //
+ .map(a -> a.flag) //
+ .collectList() //
+ .as(StepVerifier::create) //
+ .consumeNextWith(actual -> {
+ assertThat(actual).hasSize(1).contains(true);
+ }).verifyComplete();
+ }
+
@Test
void shouldDeleteUsingQueryMethod() {
@@ -256,9 +269,8 @@ void shouldFindByPageable() {
@Test // gh-335
void shouldFindTop10() {
- Flux sets = Flux.fromStream(IntStream.range(0, 100).mapToObj(value -> {
- return new LegoSet(null, "Set " + value, value);
- }));
+ Flux sets = Flux
+ .fromStream(IntStream.range(0, 100).mapToObj(value -> new LegoSet(null, "Set " + value, value, true)));
repository.saveAll(sets) //
.as(StepVerifier::create) //
@@ -291,8 +303,8 @@ public void shouldInsertItemsTransactional() {
R2dbcTransactionManager r2dbcTransactionManager = new R2dbcTransactionManager(connectionFactory);
TransactionalOperator rxtx = TransactionalOperator.create(r2dbcTransactionManager);
- LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12);
- LegoSet legoSet2 = new LegoSet(null, "FORSCHUNGSSCHIFF", 13);
+ LegoSet legoSet1 = new LegoSet(null, "SCHAUFELRADBAGGER", 12, true);
+ LegoSet legoSet2 = new LegoSet(null, "FORSCHUNGSSCHIFF", 13, false);
Mono