Browse Source

DATAMONGO-2002 - Fixed Criteria.equals(…) for usage with Pattern instances.

For Criteria instances that use regular expressions we now properly compare the two Pattern instances produced by also including the pattern flags in the comparison.
pull/568/merge
Oliver Gierke 8 years ago
parent
commit
8145b84dbe
  1. 13
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java
  2. 12
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java

13
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java

@ -868,8 +868,17 @@ public class Criteria implements CriteriaDefinition { @@ -868,8 +868,17 @@ public class Criteria implements CriteriaDefinition {
return right == null;
}
if (left instanceof Pattern) {
return right instanceof Pattern ? ((Pattern) left).pattern().equals(((Pattern) right).pattern()) : false;
if (Pattern.class.isInstance(left)) {
if (!Pattern.class.isInstance(right)) {
return false;
}
Pattern leftPattern = (Pattern) left;
Pattern rightPattern = (Pattern) right;
return leftPattern.pattern().equals(rightPattern.pattern()) //
&& leftPattern.flags() == rightPattern.flags();
}
return ObjectUtils.nullSafeEquals(left, right);

12
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java

@ -15,8 +15,11 @@ @@ -15,8 +15,11 @@
*/
package org.springframework.data.mongodb.core.query;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.CoreMatchers.not;
import static org.junit.Assert.*;
import static org.junit.Assert.assertThat;
import static org.springframework.data.mongodb.test.util.IsBsonObject.*;
import java.util.Arrays;
@ -310,4 +313,13 @@ public class CriteriaUnitTests { @@ -310,4 +313,13 @@ public class CriteriaUnitTests {
assertThat(bitPositionsBitmaskCriteria.getCriteriaObject(),
is(equalTo(Document.parse("{ \"field\" : { \"$bitsAnySet\" : [ 0, 2 ]} }"))));
}
@Test // DATAMONGO-2002
public void shouldEqualForSamePattern() {
Criteria left = new Criteria("field").regex("foo", "iu");
Criteria right = new Criteria("field").regex("foo");
assertThat(left).isNotEqualTo(right);
}
}

Loading…
Cancel
Save