Skip to content

Commit 9c06124

Browse files
DATAMONGO-1608 - Polishing.
Throw an IllegalArgumentException when trying to create a query using 'null' as an argument for queries resulting in a $regex query operator. Original Pull Request: #439
1 parent e342008 commit 9c06124

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,9 +300,7 @@ private Criteria createLikeRegexCriteriaOrThrow(Part part, MongoPersistentProper
300300
criteria = criteria.not();
301301
}
302302

303-
Object next = parameters.next();
304-
305-
return addAppropriateLikeRegexTo(criteria, part, next != null ? next.toString() : "");
303+
return addAppropriateLikeRegexTo(criteria, part, parameters.next());
306304

307305
case NEVER:
308306
// intentional no-op
@@ -330,7 +328,7 @@ private Criteria createContainingCriteria(Part part, MongoPersistentProperty pro
330328
return criteria.in(nextAsArray(parameters));
331329
}
332330

333-
return addAppropriateLikeRegexTo(criteria, part, parameters.next().toString());
331+
return addAppropriateLikeRegexTo(criteria, part, parameters.next());
334332
}
335333

336334
/**
@@ -341,9 +339,15 @@ private Criteria createContainingCriteria(Part part, MongoPersistentProperty pro
341339
* @param value
342340
* @return the criteria extended with the regex.
343341
*/
344-
private Criteria addAppropriateLikeRegexTo(Criteria criteria, Part part, String value) {
342+
private Criteria addAppropriateLikeRegexTo(Criteria criteria, Part part, Object value) {
343+
344+
if (value == null) {
345+
346+
throw new IllegalArgumentException(String.format(
347+
"Argument for creating $regex pattern for property '%s' must not be null!", part.getProperty().getSegment()));
348+
}
345349

346-
return criteria.regex(toLikeRegex(value, part), toRegexOptions(part));
350+
return criteria.regex(toLikeRegex(value.toString(), part), toRegexOptions(part));
347351
}
348352

349353
/**

spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
import org.hamcrest.Matchers;
3131
import org.junit.Before;
3232
import org.junit.Ignore;
33+
import org.junit.Rule;
3334
import org.junit.Test;
35+
import org.junit.rules.ExpectedException;
3436
import org.junit.runner.RunWith;
3537
import org.springframework.beans.factory.annotation.Autowired;
3638
import org.springframework.dao.DuplicateKeyException;
@@ -72,6 +74,8 @@
7274
@RunWith(SpringJUnit4ClassRunner.class)
7375
public abstract class AbstractPersonRepositoryIntegrationTests {
7476

77+
public @Rule ExpectedException expectedException = ExpectedException.none();
78+
7579
@Autowired protected PersonRepository repository;
7680

7781
@Autowired MongoOperations operations;
@@ -171,6 +175,15 @@ public void findsPersonsByFirstnameLike() throws Exception {
171175
assertThat(result, hasItem(boyd));
172176
}
173177

178+
@Test // DATAMONGO-1608
179+
public void findByFirstnameLikeWithNull() {
180+
181+
expectedException.expect(IllegalArgumentException.class);
182+
expectedException.expectMessage("property 'firstname'");
183+
184+
repository.findByFirstnameLike(null);
185+
}
186+
174187
@Test
175188
public void findsPagedPersons() throws Exception {
176189

@@ -658,9 +671,10 @@ public void executesGeoPageQueryForWithPageRequestForJustOneElementEmptyPage() {
658671
@Test // DATAMONGO-1608
659672
public void findByFirstNameIgnoreCaseWithNull() {
660673

661-
List<Person> result = repository.findByFirstnameIgnoreCase(null);
674+
expectedException.expect(IllegalArgumentException.class);
675+
expectedException.expectMessage("property 'firstname'");
662676

663-
assertThat(result.size(), is(0));
677+
repository.findByFirstnameIgnoreCase(null);
664678
}
665679

666680
@Test // DATAMONGO-770

0 commit comments

Comments
 (0)