DATAMONGO-418 - Added support for StartingWith, EndingWith and Containing keywords.
This commit is contained in:
@@ -197,8 +197,11 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> {
|
||||
case IN:
|
||||
return criteria.in(nextAsArray(parameters, property));
|
||||
case LIKE:
|
||||
case STARTING_WITH:
|
||||
case ENDING_WITH:
|
||||
case CONTAINING:
|
||||
String value = parameters.next().toString();
|
||||
return criteria.regex(toLikeRegex(value));
|
||||
return criteria.regex(toLikeRegex(value, type));
|
||||
case REGEX:
|
||||
return criteria.regex(parameters.next().toString());
|
||||
case EXISTS:
|
||||
@@ -269,7 +272,19 @@ class MongoQueryCreator extends AbstractQueryCreator<Query, Criteria> {
|
||||
return new Object[] { next };
|
||||
}
|
||||
|
||||
private String toLikeRegex(String source) {
|
||||
private String toLikeRegex(String source, Type type) {
|
||||
|
||||
switch (type) {
|
||||
case STARTING_WITH:
|
||||
source = source + "*";
|
||||
break;
|
||||
case ENDING_WITH:
|
||||
source = "*" + source;
|
||||
break;
|
||||
case CONTAINING:
|
||||
source = "*" + source + "*";
|
||||
break;
|
||||
}
|
||||
|
||||
return source.replaceAll("\\*", ".*");
|
||||
}
|
||||
|
||||
@@ -244,6 +244,45 @@ public class MongoQueryCreatorUnitTests {
|
||||
assertThat(query.getQueryObject(), is(query(where("creator").is(dbref)).getQueryObject()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-418
|
||||
*/
|
||||
@Test
|
||||
public void createsQueryWithStartingWithPredicateCorrectly() {
|
||||
|
||||
PartTree tree = new PartTree("findByUsernameStartingWith", User.class);
|
||||
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "Matt"), context);
|
||||
Query query = creator.createQuery();
|
||||
|
||||
assertThat(query.getQueryObject(), is(query(where("foo").regex("Matt.*")).getQueryObject()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-418
|
||||
*/
|
||||
@Test
|
||||
public void createsQueryWithEndingWithPredicateCorrectly() {
|
||||
|
||||
PartTree tree = new PartTree("findByUsernameEndingWith", User.class);
|
||||
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "ews"), context);
|
||||
Query query = creator.createQuery();
|
||||
|
||||
assertThat(query.getQueryObject(), is(query(where("foo").regex(".*ews")).getQueryObject()));
|
||||
}
|
||||
|
||||
/**
|
||||
* @see DATAMONGO-418
|
||||
*/
|
||||
@Test
|
||||
public void createsQueryWithContainingPredicateCorrectly() {
|
||||
|
||||
PartTree tree = new PartTree("findByUsernameContaining", User.class);
|
||||
MongoQueryCreator creator = new MongoQueryCreator(tree, getAccessor(converter, "thew"), context);
|
||||
Query query = creator.createQuery();
|
||||
|
||||
assertThat(query.getQueryObject(), is(query(where("foo").regex(".*thew.*")).getQueryObject()));
|
||||
}
|
||||
|
||||
private void assertBindsDistanceToQuery(Point point, Distance distance, Query reference) throws Exception {
|
||||
|
||||
when(converter.convertToMongoType("Dave")).thenReturn("Dave");
|
||||
|
||||
Reference in New Issue
Block a user