diff --git a/pom.xml b/pom.xml index 6c28d06495..df0cbabc72 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 4.4.0-SNAPSHOT + 4.4.0-GH-4806-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index a3dc49f892..5bfa2e4366 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 4.4.0-SNAPSHOT + 4.4.0-GH-4806-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index acdc13437d..f7817170ea 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 4.4.0-SNAPSHOT + 4.4.0-GH-4806-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 066f463015..26c891512a 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 4.4.0-SNAPSHOT + 4.4.0-GH-4806-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java index 2d1d939242..84f1e5943b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java @@ -461,7 +461,9 @@ private BindableValue bindableValueFor(JsonToken token) { if (isRegularExpression) { - bindableValue.setValue(new BsonRegularExpression(computedValue)); + BsonRegularExpression originalExpression = token.getValue(BsonRegularExpression.class); + + bindableValue.setValue(new BsonRegularExpression(computedValue, originalExpression.getOptions())); bindableValue.setType(BsonType.REGULAR_EXPRESSION); } else { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java index 646f813481..2b940e6cb6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java @@ -26,12 +26,12 @@ import org.bson.BsonBinary; import org.bson.BsonBinarySubType; +import org.bson.BsonRegularExpression; import org.bson.Document; import org.bson.codecs.DecoderContext; import org.junit.jupiter.api.Test; import org.springframework.data.expression.ValueExpressionParser; -import org.springframework.data.mapping.model.ValueExpressionEvaluator; import org.springframework.data.spel.EvaluationContextProvider; import org.springframework.data.spel.ExpressionDependencies; import org.springframework.expression.EvaluationContext; @@ -84,6 +84,26 @@ void bindQuotedIntegerValue() { assertThat(target).isEqualTo(new Document("lastname", "100")); } + @Test // GH-4806 + void regexConsidersOptions() { + + Document target = parse("{ 'c': /^true$/i }"); + + BsonRegularExpression pattern = target.get("c", BsonRegularExpression.class); + assertThat(pattern.getPattern()).isEqualTo("^true$"); + assertThat(pattern.getOptions()).isEqualTo("i"); + } + + @Test // GH-4806 + void regexConsidersBindValueWithOptions() { + + Document target = parse("{ 'c': /^?0$/i }", "foo"); + + BsonRegularExpression pattern = target.get("c", BsonRegularExpression.class); + assertThat(pattern.getPattern()).isEqualTo("^foo$"); + assertThat(pattern.getOptions()).isEqualTo("i"); + } + @Test void bindValueToRegex() {