Browse Source

Retain regex options from the parsed JsonToken.

We now retain expression options when resolving bind values from the original BsonRegularExpression.

Closes: #4806
Original Pull Request: #4807
pull/4790/merge
Mark Paluch 1 year ago committed by Christoph Strobl
parent
commit
60a3461bb1
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java
  2. 22
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReader.java

@ -461,7 +461,9 @@ public class ParameterBindingJsonReader extends AbstractBsonReader { @@ -461,7 +461,9 @@ public class ParameterBindingJsonReader extends AbstractBsonReader {
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 {

22
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/util/json/ParameterBindingJsonReaderUnitTests.java

@ -26,12 +26,12 @@ import java.util.UUID; @@ -26,12 +26,12 @@ import java.util.UUID;
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 @@ class ParameterBindingJsonReaderUnitTests { @@ -84,6 +84,26 @@ class ParameterBindingJsonReaderUnitTests {
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() {

Loading…
Cancel
Save