From 8145b84dbec08fd0db2edf0b11a528cf039d7dad 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/CriteriaUnitTests.java | 12 ++++++++++++ 2 files changed, 23 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 b73536dd9..2d3b481af 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 @@ -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); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java index c492bd615..b89113d5e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/CriteriaUnitTests.java @@ -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 { 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); + } }