Skip to content

Commit a4d6a0c

Browse files
committed
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.
1 parent c28f725 commit a4d6a0c

File tree

2 files changed

+20
-2
lines changed
  • spring-data-mongodb/src

2 files changed

+20
-2
lines changed

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -794,8 +794,17 @@ private boolean isEqual(Object left, Object right) {
794794
return right == null;
795795
}
796796

797-
if (left instanceof Pattern) {
798-
return right instanceof Pattern ? ((Pattern) left).pattern().equals(((Pattern) right).pattern()) : false;
797+
if (Pattern.class.isInstance(left)) {
798+
799+
if (!Pattern.class.isInstance(right)) {
800+
return false;
801+
}
802+
803+
Pattern leftPattern = (Pattern) left;
804+
Pattern rightPattern = (Pattern) right;
805+
806+
return leftPattern.pattern().equals(rightPattern.pattern()) //
807+
&& leftPattern.flags() == rightPattern.flags();
799808
}
800809

801810
return ObjectUtils.nullSafeEquals(left, right);

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,4 +213,13 @@ public void intersectsShouldWrapGeoJsonTypeInGeometryCorrectly() {
213213

214214
assertThat(document, isBsonObject().containing("foo.$geoIntersects.$geometry", lineString));
215215
}
216+
217+
@Test // DATAMONGO-2002
218+
public void shouldEqualForSamePattern() {
219+
220+
Criteria left = new Criteria("field").regex("foo", "iu");
221+
Criteria right = new Criteria("field").regex("foo");
222+
223+
assertThat(left, is(not(right)));
224+
}
216225
}

0 commit comments

Comments
 (0)