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 f82b791f72
commit 26c12214d3
2 changed files with 20 additions and 2 deletions

View File

@@ -772,8 +772,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

@@ -216,4 +216,13 @@ public class CriteriaTests {
assertThat(dbo, 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)));
}
}