Added Support for IN Query and Added more test cases

This commit is contained in:
Mohsin Husen 2013-01-28 15:34:13 +00:00
parent 1520b4deac
commit 8970785ab8
4 changed files with 177 additions and 184 deletions

View File

@ -94,7 +94,13 @@ class CriteriaQueryProcessor {
query = rangeQuery(fieldName).from(ranges[0]).to(ranges[1]); break; query = rangeQuery(fieldName).from(ranges[0]).to(ranges[1]); break;
case FUZZY: case FUZZY:
query = fuzzyQuery(fieldName, (String) value); break; query = fuzzyQuery(fieldName, (String) value); break;
case IN:
query = boolQuery();
Iterable<Object> collection = (Iterable<Object>) value;
for(Object item : collection){
((BoolQueryBuilder) query).should(fieldQuery(fieldName, item));
}
break;
} }
return query; return query;

View File

@ -340,13 +340,7 @@ public class Criteria {
*/ */
public Criteria in(Iterable<?> values) { public Criteria in(Iterable<?> values) {
Assert.notNull(values, "Collection of 'in' values must not be null"); Assert.notNull(values, "Collection of 'in' values must not be null");
for (Object value : values) { criteria.add(new CriteriaEntry(OperationKey.IN, values));
if (value instanceof Collection) {
in((Collection<?>) value);
} else {
is(value);
}
}
return this; return this;
} }
@ -430,7 +424,7 @@ public class Criteria {
} }
public enum OperationKey { public enum OperationKey {
EQUALS, CONTAINS, STARTS_WITH, ENDS_WITH, EXPRESSION, BETWEEN, FUZZY; EQUALS, CONTAINS, STARTS_WITH, ENDS_WITH, EXPRESSION, BETWEEN, FUZZY, IN;
} }
public static class CriteriaEntry { public static class CriteriaEntry {

View File

@ -227,170 +227,163 @@ public class CustomMethodRepositoryTest {
assertThat(page.getTotalElements(), is(equalTo(1L))); assertThat(page.getTotalElements(), is(equalTo(1L)));
} }
// @Test @Test
// @Ignore("Test failing due to java.lang.IllegalArgumentException: Invalid order syntax for part Message!") public void shouldExecuteCustomMethodForIn(){
// public void shouldExecuteCustomMethodForIn(){ //given
// //given String documentId = randomNumeric(5);
// String documentId = randomNumeric(5); SampleEntity sampleEntity = new SampleEntity();
// SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setId(documentId);
// sampleEntity.setId(documentId); sampleEntity.setType("test");
// sampleEntity.setType("test"); sampleEntity.setMessage("foo");
// sampleEntity.setMessage("foo"); repository.save(sampleEntity);
// repository.save(sampleEntity);
// //given
// //given String documentId2 = randomNumeric(5);
// String documentId2 = randomNumeric(5); SampleEntity sampleEntity2 = new SampleEntity();
// SampleEntity sampleEntity2 = new SampleEntity(); sampleEntity2.setId(documentId2);
// sampleEntity2.setId(documentId2); sampleEntity2.setType("test");
// sampleEntity2.setType("test"); sampleEntity2.setMessage("bar");
// sampleEntity2.setMessage("bar"); repository.save(sampleEntity2);
// repository.save(sampleEntity2);
// List<String> ids = Arrays.asList(documentId,documentId2);
// List<String> ids = Arrays.asList(documentId,documentId2);
// //when
// Page<SampleEntity> page = repository.findByIdIn(ids, new PageRequest(1, 10));
// //when //then
// Page<SampleEntity> page = repository.findByIdIn(ids, new PageRequest(1, 10)); assertThat(page, is(notNullValue()));
// //then assertThat(page.getTotalElements(), is(equalTo(2L)));
// assertThat(page, is(notNullValue())); }
// assertThat(page.getTotalElements(), is(equalTo(2L)));
// } @Test
// public void shouldExecuteCustomMethodForNotIn(){
// @Test //given
// @Ignore("Test failing due to java.lang.IllegalArgumentException: Invalid order syntax for part Message!") String documentId = randomNumeric(5);
// public void shouldExecuteCustomMethodForNotIn(){ SampleEntity sampleEntity = new SampleEntity();
// //given sampleEntity.setId(documentId);
// String documentId = randomNumeric(5); sampleEntity.setType("test");
// SampleEntity sampleEntity = new SampleEntity(); sampleEntity.setMessage("foo");
// sampleEntity.setId(documentId); repository.save(sampleEntity);
// sampleEntity.setType("test");
// sampleEntity.setMessage("foo"); //given
// repository.save(sampleEntity); String documentId2 = randomNumeric(5);
// SampleEntity sampleEntity2 = new SampleEntity();
// //given sampleEntity2.setId(documentId2);
// String documentId2 = randomNumeric(5); sampleEntity2.setType("test");
// SampleEntity sampleEntity2 = new SampleEntity(); sampleEntity2.setMessage("bar");
// sampleEntity2.setId(documentId2); repository.save(sampleEntity2);
// sampleEntity2.setType("test");
// sampleEntity2.setMessage("bar"); List<String> ids = Arrays.asList(documentId);
// repository.save(sampleEntity2);
// //when
// List<String> ids = Arrays.asList(documentId); Page<SampleEntity> page = repository.findByIdNotIn(ids, new PageRequest(1, 10));
// //then
// assertThat(page, is(notNullValue()));
// //when assertThat(page.getTotalElements(), is(equalTo(1L)));
// Page<SampleEntity> page = repository.findByIdNotIn(ids, new PageRequest(1, 10)); assertThat(page.getContent().get(0).getId(),is(documentId2));
// //then }
// assertThat(page, is(notNullValue()));
// assertThat(page.getTotalElements(), is(equalTo(1L))); @Test
// assertThat(page.getContent().get(0).getId(),is(documentId2)); public void shouldExecuteCustomMethodForTrue(){
// } //given
// String documentId = randomNumeric(5);
// @Test SampleEntity sampleEntity = new SampleEntity();
// @Ignore("Test failing due to java.lang.IllegalArgumentException: Invalid order syntax for part Message!") sampleEntity.setId(documentId);
// public void shouldExecuteCustomMethodForTrue(){ sampleEntity.setType("test");
// //given sampleEntity.setMessage("foo");
// String documentId = randomNumeric(5); sampleEntity.setAvailable(true);
// SampleEntity sampleEntity = new SampleEntity(); repository.save(sampleEntity);
// sampleEntity.setId(documentId);
// sampleEntity.setType("test"); //given
// sampleEntity.setMessage("foo"); String documentId2 = randomNumeric(5);
// sampleEntity.setAvailable(true); SampleEntity sampleEntity2 = new SampleEntity();
// repository.save(sampleEntity); sampleEntity2.setId(documentId2);
// sampleEntity2.setType("test");
// //given sampleEntity2.setMessage("bar");
// String documentId2 = randomNumeric(5); sampleEntity2.setAvailable(false);
// SampleEntity sampleEntity2 = new SampleEntity(); repository.save(sampleEntity2);
// sampleEntity2.setId(documentId2); //when
// sampleEntity2.setType("test"); Page<SampleEntity> page = repository.findByAvailableTrue(new PageRequest(1, 10));
// sampleEntity2.setMessage("bar"); //then
// sampleEntity2.setAvailable(false); assertThat(page, is(notNullValue()));
// repository.save(sampleEntity2); assertThat(page.getTotalElements(), is(equalTo(1L)));
// //when }
// Page<SampleEntity> page = repository.findByAvailableTrue(new PageRequest(1, 10));
// //then @Test
// assertThat(page, is(notNullValue())); public void shouldExecuteCustomMethodForFalse(){
// assertThat(page.getTotalElements(), is(equalTo(1L))); //given
// } String documentId = randomNumeric(5);
// SampleEntity sampleEntity = new SampleEntity();
// @Test sampleEntity.setId(documentId);
// @Ignore("Test failing due to java.lang.IllegalArgumentException: Invalid order syntax for part Message!") sampleEntity.setType("test");
// public void shouldExecuteCustomMethodForFalse(){ sampleEntity.setMessage("foo");
// //given sampleEntity.setAvailable(true);
// String documentId = randomNumeric(5); repository.save(sampleEntity);
// SampleEntity sampleEntity = new SampleEntity();
// sampleEntity.setId(documentId); //given
// sampleEntity.setType("test"); String documentId2 = randomNumeric(5);
// sampleEntity.setMessage("foo"); SampleEntity sampleEntity2 = new SampleEntity();
// sampleEntity.setAvailable(true); sampleEntity2.setId(documentId2);
// repository.save(sampleEntity); sampleEntity2.setType("test");
// sampleEntity2.setMessage("bar");
// //given sampleEntity2.setAvailable(false);
// String documentId2 = randomNumeric(5); repository.save(sampleEntity2);
// SampleEntity sampleEntity2 = new SampleEntity(); //when
// sampleEntity2.setId(documentId2); Page<SampleEntity> page = repository.findByAvailableFalse(new PageRequest(1, 10));
// sampleEntity2.setType("test"); //then
// sampleEntity2.setMessage("bar"); assertThat(page, is(notNullValue()));
// sampleEntity2.setAvailable(false); assertThat(page.getTotalElements(), is(equalTo(1L)));
// repository.save(sampleEntity2); }
// //when
// Page<SampleEntity> page = repository.findByAvailableFalse(new PageRequest(1, 10)); @Test
// //then public void shouldExecuteCustomMethodForOrderBy(){
// assertThat(page, is(notNullValue())); //given
// assertThat(page.getTotalElements(), is(equalTo(1L))); String documentId = randomNumeric(5);
// } SampleEntity sampleEntity = new SampleEntity();
// sampleEntity.setId(documentId);
// @Test sampleEntity.setType("test");
// @Ignore("Test failing due to java.lang.IllegalArgumentException: Invalid order syntax for part Message!") sampleEntity.setMessage("foo");
// public void shouldExecuteCustomMethodForOrderBy(){ sampleEntity.setAvailable(true);
// //given repository.save(sampleEntity);
// String documentId = randomNumeric(5);
// SampleEntity sampleEntity = new SampleEntity(); //given
// sampleEntity.setId(documentId); String documentId2 = randomNumeric(5);
// sampleEntity.setType("test"); SampleEntity sampleEntity2 = new SampleEntity();
// sampleEntity.setMessage("foo"); sampleEntity2.setId(documentId2);
// sampleEntity.setAvailable(true); sampleEntity2.setType("test");
// repository.save(sampleEntity); sampleEntity2.setMessage("bar");
// sampleEntity2.setAvailable(false);
// //given repository.save(sampleEntity2);
// String documentId2 = randomNumeric(5); //when
// SampleEntity sampleEntity2 = new SampleEntity(); Page<SampleEntity> page = repository.findByMessageOrderByTypeAsc("foo",new PageRequest(1, 10));
// sampleEntity2.setId(documentId2); //then
// sampleEntity2.setType("test"); assertThat(page, is(notNullValue()));
// sampleEntity2.setMessage("bar"); assertThat(page.getTotalElements(), is(equalTo(1L)));
// sampleEntity2.setAvailable(false); }
// repository.save(sampleEntity2);
// //when @Test
// Page<SampleEntity> page = repository.findByMessageOrderByMessage("foo",new PageRequest(1, 10)); public void testCustomMethodForBoolean(){
// //then //given
// assertThat(page, is(notNullValue())); String documentId = randomNumeric(5);
// assertThat(page.getTotalElements(), is(equalTo(1L))); SampleEntity sampleEntity = new SampleEntity();
// } sampleEntity.setId(documentId);
// sampleEntity.setType("test");
// @Test sampleEntity.setMessage("foo");
// public void testCustomMethodForBoolean(){ sampleEntity.setAvailable(true);
// //given repository.save(sampleEntity);
// String documentId = randomNumeric(5);
// SampleEntity sampleEntity = new SampleEntity(); //given
// sampleEntity.setId(documentId); String documentId2 = randomNumeric(5);
// sampleEntity.setType("test"); SampleEntity sampleEntity2 = new SampleEntity();
// sampleEntity.setMessage("foo"); sampleEntity2.setId(documentId2);
// sampleEntity.setAvailable(true); sampleEntity2.setType("test");
// repository.save(sampleEntity); sampleEntity2.setMessage("bar");
// sampleEntity2.setAvailable(false);
// //given repository.save(sampleEntity2);
// String documentId2 = randomNumeric(5); //when
// SampleEntity sampleEntity2 = new SampleEntity(); Page<SampleEntity> page = repository.findByAvailable(false,new PageRequest(1, 10));
// sampleEntity2.setId(documentId2); //then
// sampleEntity2.setType("test"); assertThat(page, is(notNullValue()));
// sampleEntity2.setMessage("bar"); assertThat(page.getTotalElements(), is(equalTo(1L)));
// sampleEntity2.setAvailable(false); }
// repository.save(sampleEntity2);
// //when
// Page<SampleEntity> page = repository.findByAvailable(false,new PageRequest(1, 10));
// //then
// assertThat(page, is(notNullValue()));
// assertThat(page.getTotalElements(), is(equalTo(1L)));
// }
} }

View File

@ -18,7 +18,7 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
@Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}") @Query("{\"bool\" : {\"must\" : {\"field\" : {\"message\" : \"?0\"}}}}")
Page<SampleEntity> findByMessage(String message, Pageable pageable); Page<SampleEntity> findByMessage(String message, Pageable pageable);
// Page<SampleEntity> findByAvailable(boolean available, Pageable pageable); Page<SampleEntity> findByAvailable(boolean available, Pageable pageable);
Page<SampleEntity> findByRateLessThan(int rate, Pageable pageable); Page<SampleEntity> findByRateLessThan(int rate, Pageable pageable);
@ -34,14 +34,14 @@ public interface SampleCustomMethodRepository extends ElasticsearchRepository<Sa
Page<SampleEntity> findByMessageContaining(String message, Pageable pageable); Page<SampleEntity> findByMessageContaining(String message, Pageable pageable);
// Page<SampleEntity> findByIdIn(List<String> ids, Pageable pageable); Page<SampleEntity> findByIdIn(List<String> ids, Pageable pageable);
//
// Page<SampleEntity> findByIdNotIn(List<String> messages, Pageable pageable); Page<SampleEntity> findByIdNotIn(List<String> messages, Pageable pageable);
//
// Page<SampleEntity> findByAvailableTrue(Pageable pageable); Page<SampleEntity> findByAvailableTrue(Pageable pageable);
//
// Page<SampleEntity> findByAvailableFalse(Pageable pageable); Page<SampleEntity> findByAvailableFalse(Pageable pageable);
//
// Page<SampleEntity> findByMessageOrderByMessage(String message,Pageable pageable); Page<SampleEntity> findByMessageOrderByTypeAsc(String message,Pageable pageable);
} }