diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java index 6b2fac015..69e5ece21 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java @@ -136,7 +136,7 @@ public final class RSQLUtility { public static & FieldNameProvider, T> Specification parse(final String rsql, final Class fieldNameProvider, final VirtualPropertyReplacer virtualPropertyReplacer, final Database database) { - return new RSQLSpecification<>(rsql.toLowerCase(), fieldNameProvider, virtualPropertyReplacer, database); + return new RSQLSpecification<>(rsql, fieldNameProvider, virtualPropertyReplacer, database); } /** @@ -162,7 +162,7 @@ public final class RSQLUtility { try { LOGGER.debug("Parsing rsql string {}", rsql); final Set operators = RSQLOperators.defaultOperators(); - return new RSQLParser(operators).parse(rsql); + return new RSQLParser(operators).parse(rsql.toLowerCase()); } catch (final IllegalArgumentException e) { throw new RSQLParameterSyntaxException("rsql filter must not be null", e); } catch (final RSQLParserException e) { diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java index d228aa1f3..5e5a83d89 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLUtilityTest.java @@ -142,6 +142,13 @@ public class RSQLUtilityTest { RSQLUtility.validateRsqlFor(rsql2, TestFieldEnum.class); RSQLUtility.validateRsqlFor(rsql3, TestFieldEnum.class); } + + @Test + @Description("Verify that RSQL expressions are validated case insensitive") + public void mixedCaseRsqlFieldValidation() { + final String rsqlWithMixedCase = "name==b And name==c aND Name==d OR NAME=iN=y oR nAme=IN=z"; + RSQLUtility.validateRsqlFor(rsqlWithMixedCase, TargetFields.class); + } @Test public void wrongRsqlSyntaxThrowSyntaxException() {