root, PredicateFilter filter
if (filter.getCriterias().contains(PredicateFilter.Criteria.EQ)) {
return cb.equal(fieldValue, compareValue);
}
+ else if (filter.getCriterias().contains(PredicateFilter.Criteria.LOWER)) {
+ return cb.equal(cb.lower(fieldValue),
+ compareValue.toLowerCase());
+ }
else if (filter.getCriterias().contains(PredicateFilter.Criteria.NE)) {
return cb.notEqual(fieldValue, compareValue);
}
diff --git a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/PredicateFilter.java b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/PredicateFilter.java
index 8e7080ced..b4840ec39 100644
--- a/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/PredicateFilter.java
+++ b/graphql-jpa-query-schema/src/main/java/com/introproventures/graphql/jpa/query/schema/impl/PredicateFilter.java
@@ -60,10 +60,13 @@ public enum Criteria {
* case sensitive (strings)
*/
CASE,
+ /**
+ * case insensitive match
+ * LOWER(field) = LOWER(SEARCH)
+ */
+ LOWER,
/**
* end of the string matches
- * LOWER(field) LIKE LOWER(SEARCH)
if not set then case
- * insensitive match
*/
ENDS,
/**
diff --git a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/GraphQLExecutorTests.java b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/GraphQLExecutorTests.java
index b909ff962..cc4a35591 100644
--- a/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/GraphQLExecutorTests.java
+++ b/graphql-jpa-query-schema/src/test/java/com/introproventures/graphql/jpa/query/schema/GraphQLExecutorTests.java
@@ -1550,6 +1550,38 @@ public void queryWithEQMatchingCase() {
assertThat(result.toString()).isEqualTo(expected);
}
+ @Test
+ public void queryWithLOWERNotMatchingCase() {
+ //given:
+ String query = "query { Books ( where: { title: {LOWER: \"WAR AND PEACE\"}}) { select { id title} } }";
+
+ String expected = "{Books={select=[" +
+ "{id=2, title=War and Peace}" +
+ "]}}";
+
+ //when:
+ Object result = executor.execute(query).getData();
+
+ //then:
+ assertThat(result.toString()).isEqualTo(expected);
+ }
+
+ @Test
+ public void queryWithLOWERMatchingCase() {
+ //given:
+ String query = "query { Books ( where: { title: {LOWER: \"War and Peace\"}}) { select { id title} } }";
+
+ String expected = "{Books={select=[" +
+ "{id=2, title=War and Peace}" +
+ "]}}";
+
+ //when:
+ Object result = executor.execute(query).getData();
+
+ //then:
+ assertThat(result.toString()).isEqualTo(expected);
+ }
+
@Test
public void shouldNotReturnStaleCacheResultsFromPreviousQueryForCollectionCriteriaExpression() {
//given:
diff --git a/graphql-jpa-query-web/pom.xml b/graphql-jpa-query-web/pom.xml
index 37583511e..f3a3d096c 100644
--- a/graphql-jpa-query-web/pom.xml
+++ b/graphql-jpa-query-web/pom.xml
@@ -3,7 +3,7 @@
com.introproventures
graphql-jpa-query-build
- 0.3.34-SNAPSHOT
+ 0.3.35-SNAPSHOT
../graphql-jpa-query-build
graphql-jpa-query-web
diff --git a/pom.xml b/pom.xml
index 3adcbf567..1519cee7b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -5,7 +5,7 @@
com.introproventures
graphql-jpa-query
- 0.3.34-SNAPSHOT
+ 0.3.35-SNAPSHOT
pom