From a8f7f50cf902f8496c7c0e908b70fbb2c980e5ec Mon Sep 17 00:00:00 2001 From: Stefan Behl Date: Mon, 5 Jul 2021 18:05:10 +0200 Subject: [PATCH] Support case-insensitive RSQL expressions /target filters (#1137) * Interpret /parse RSQL expressions case insensitive Signed-off-by: Stefan Behl * Add unit test verifying that RSQL expressions are case insensitive Signed-off-by: Stefan Behl --- .../eclipse/hawkbit/repository/jpa/rsql/RSQLUtility.java | 4 ++-- .../hawkbit/repository/jpa/rsql/RSQLUtilityTest.java | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) 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() {