From 26c12214d34a9032400e432e2a16eb1dc380ff2e Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Thu, 7 Jun 2018 19:07:53 +0200 Subject: [PATCH] =?UTF-8?q?DATAMONGO-2002=20-=20Fixed=20Criteria.equals(?= =?UTF-8?q?=E2=80=A6)=20for=20usage=20with=20Pattern=20instances.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- .../data/mongodb/core/query/Criteria.java | 13 +++++++++++-- .../data/mongodb/core/query/CriteriaTests.java | 9 +++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java index df4dd6556..dd843e898 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Criteria.java @@ -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); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java index 06bb9b2ff..e91837bb1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaTests.java @@ -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))); + } }