From 6e7e03963d79e944d99d1d9d2e7df149e991af4b Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Thu, 7 Jan 2021 15:35:00 +0100 Subject: [PATCH] Apply UPPER function to all columns when enabling ignoreCase. We now apply the UPPER function regardless of whether we could resolve the criteria property to a column. Previously, we required a resolved property of a String type which prevented non-mapped properties from case-insensitive queries. Closes #518 --- .../data/r2dbc/query/QueryMapper.java | 2 +- .../data/r2dbc/query/QueryMapperUnitTests.java | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) 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 6334cb12..0308af80 100644 --- a/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java +++ b/src/main/java/org/springframework/data/r2dbc/query/QueryMapper.java @@ -480,7 +480,7 @@ public class QueryMapper { } Expression columnExpression = column; - if (ignoreCase && String.class == valueType) { + if (ignoreCase) { columnExpression = Functions.upper(column); } diff --git a/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java b/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java index 07c763be..94a5a66d 100644 --- a/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java +++ b/src/test/java/org/springframework/data/r2dbc/query/QueryMapperUnitTests.java @@ -155,6 +155,19 @@ public class QueryMapperUnitTests { verify(bindTarget).bind(0, "foo"); } + @Test // gh-518 + public void shouldMapSimpleCriteriaWithIgnoreCase() { + + Criteria criteria = Criteria.where("some_col").is("foo").ignoreCase(true); + + BoundCondition bindings = map(criteria); + + assertThat(bindings.getCondition()).hasToString("UPPER(person.some_col) = UPPER(?[$1])"); + + bindings.getBindings().apply(bindTarget); + verify(bindTarget).bind(0, "foo"); + } + @Test // gh-300 public void shouldMapSimpleCriteriaWithoutEntity() {