Merge pull request #19 from SpringSource/SGF-115
SGF-115 - Added support for Like, Contains, StartsWith and EndsWith keywords.
This commit is contained in:
@@ -15,9 +15,13 @@
|
||||
*/
|
||||
package org.springframework.data.gemfire.repository.query;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import org.springframework.data.gemfire.GemfireTemplate;
|
||||
import org.springframework.data.repository.query.ParametersParameterAccessor;
|
||||
import org.springframework.data.repository.query.RepositoryQuery;
|
||||
import org.springframework.data.repository.query.parser.Part;
|
||||
import org.springframework.data.repository.query.parser.Part.Type;
|
||||
import org.springframework.data.repository.query.parser.PartTree;
|
||||
|
||||
/**
|
||||
@@ -63,6 +67,39 @@ public class PartTreeGemfireRepositoryQuery extends GemfireRepositoryQuery {
|
||||
|
||||
RepositoryQuery repositoryQuery = new StringBasedGemfireRepositoryQuery(query.toString(), method, template);
|
||||
|
||||
return repositoryQuery.execute(parameters);
|
||||
return repositoryQuery.execute(prepareStringParameters(parameters));
|
||||
}
|
||||
|
||||
private Object[] prepareStringParameters(Object[] parameters) {
|
||||
|
||||
Iterator<Part> iterator = tree.getParts().iterator();
|
||||
Object[] result = new Object[parameters.length];
|
||||
|
||||
for (int i = 0; i < parameters.length; i++) {
|
||||
Object parameter = parameters[i];
|
||||
|
||||
if (parameter == null) {
|
||||
result[i] = parameter;
|
||||
continue;
|
||||
}
|
||||
|
||||
Type type = iterator.next().getType();
|
||||
|
||||
switch (type) {
|
||||
case CONTAINING:
|
||||
result[i] = String.format("%%%s%%", parameter.toString());
|
||||
break;
|
||||
case STARTING_WITH:
|
||||
result[i] = String.format("%s%%", parameter.toString());
|
||||
break;
|
||||
case ENDING_WITH:
|
||||
result[i] = String.format("%%%s", parameter.toString());
|
||||
break;
|
||||
default:
|
||||
result[i] = parameter;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,6 +162,11 @@ class Predicates implements Predicate {
|
||||
case IS_NOT_NULL:
|
||||
case NEGATING_SIMPLE_PROPERTY:
|
||||
return "!=";
|
||||
case LIKE:
|
||||
case STARTING_WITH:
|
||||
case ENDING_WITH:
|
||||
case CONTAINING:
|
||||
return "LIKE";
|
||||
case IS_NULL:
|
||||
case SIMPLE_PROPERTY:
|
||||
return "=";
|
||||
@@ -170,4 +175,4 @@ class Predicates implements Predicate {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,4 +44,12 @@ public interface PersonRepository extends CrudRepository<Person, Long> {
|
||||
Collection<Person> findByFirstnameOrLastname(String firstname, String lastname);
|
||||
|
||||
Person findByLastname(String lastname);
|
||||
|
||||
Collection<Person> findByFirstnameLike(String firstname);
|
||||
|
||||
Collection<Person> findByFirstnameStartingWith(String firstname);
|
||||
|
||||
Collection<Person> findByLastnameEndingWith(String lastname);
|
||||
|
||||
Collection<Person> findByFirstnameContaining(String firstname);
|
||||
}
|
||||
|
||||
@@ -153,6 +153,38 @@ public abstract class AbstractGemfireRepositoryFactoryIntegrationTests {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SGF-115
|
||||
*/
|
||||
@Test
|
||||
public void executesStartsWithCorrectly() {
|
||||
assertResultsFound(repository.findByFirstnameStartingWith("Da"), dave);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SGF-115
|
||||
*/
|
||||
@Test
|
||||
public void executesEndsWithCorrectly() {
|
||||
assertResultsFound(repository.findByLastnameEndingWith("ews"), dave, oliverAugust);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SGF-115
|
||||
*/
|
||||
@Test
|
||||
public void executesContainsCorrectly() {
|
||||
assertResultsFound(repository.findByFirstnameContaining("o"), boyd, leroi);
|
||||
}
|
||||
|
||||
/**
|
||||
* @see SGF-115
|
||||
*/
|
||||
@Test
|
||||
public void executesLikeCorrectly() {
|
||||
assertResultsFound(repository.findByFirstnameLike("Da%"), dave);
|
||||
}
|
||||
|
||||
private <T> void assertResultsFound(Iterable<T> result, T... expected) {
|
||||
|
||||
assertThat(result, is(notNullValue()));
|
||||
|
||||
Reference in New Issue
Block a user