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.
This commit is contained in:
Oliver Gierke
2018-06-07 19:07:53 +02:00
parent c28f725f48
commit a4d6a0cf8a
2 changed files with 20 additions and 2 deletions

View File

@@ -794,8 +794,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);

View File

@@ -213,4 +213,13 @@ public class CriteriaTests {
assertThat(document, isBsonObject().containing("foo.$geoIntersects.$geometry", lineString));
}
@Test // DATAMONGO-2002
public void shouldEqualForSamePattern() {
Criteria left = new Criteria("field").regex("foo", "iu");
Criteria right = new Criteria("field").regex("foo");
assertThat(left, is(not(right)));
}
}