From 86fca64e519947ccbe64888dbe0a2dde3f5c41ce Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 16 May 2025 14:06:30 +0300 Subject: [PATCH] Fix RSQL G2 visitor and referenes (e.g. assignedds) with multiple conditions (#2405) Signed-off-by: Avgustin Marinov --- .../repository/jpa/rsql/JpaQueryRsqlVisitorG2.java | 5 +++-- .../hawkbit/repository/jpa/rsql/RSQLToSQLTest.java | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/JpaQueryRsqlVisitorG2.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/JpaQueryRsqlVisitorG2.java index 86b483fa7..13537d41a 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/JpaQueryRsqlVisitorG2.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/rsql/JpaQueryRsqlVisitorG2.java @@ -296,8 +296,9 @@ public class JpaQueryRsqlVisitorG2 & RsqlQueryField, T> // see org.eclipse.persistence.internal.jpa.querydef.FromImpl implementation for more details when root.get creates a join final Attribute attribute = root.getModel().getAttribute(fieldNameSplit); if (!attribute.isCollection()) { - // it is a SingularAttribute and not join if it is of basic persistent type - if (((SingularAttribute) attribute).getType().getPersistenceType().equals(Type.PersistenceType.BASIC)) { + // it is a SingularAttribute and not join if it is of basic or entity persistence type + final Type.PersistenceType persistenceType = ((SingularAttribute) attribute).getType().getPersistenceType(); + if (persistenceType.equals(Type.PersistenceType.BASIC) || persistenceType.equals(Type.PersistenceType.ENTITY)) { return root.get(fieldNameSplit); } } // if a collection - it is a join diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java index c578ed0dc..3a216d704 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/rsql/RSQLToSQLTest.java @@ -41,6 +41,7 @@ class RSQLToSQLTest { private RSQLToSQL rsqlToSQL; + @Test void print() { print(JpaTarget.class, TargetFields.class, "tag==tag1 and tag==tag2"); @@ -51,18 +52,23 @@ class RSQLToSQLTest { @Test void printSimple() { + // simple - column in table print(JpaTarget.class, TargetFields.class, "controllerId==ctrlr1"); - print(JpaTarget.class, TargetFields.class, "targettype.key==type1"); + // reference - fk to a table + print(JpaTarget.class, TargetFields.class, "assignedds.name==x and assignedds.version==y"); + // list of non-simple (with mapping table) print(JpaTarget.class, TargetFields.class, "tag==tag1"); - print(JpaTarget.class, TargetFields.class, "metadata.key1==value1"); + // list (map table that refers main) print(JpaTarget.class, TargetFields.class, "attribute.key1==value1"); + // map (map table that refers main) + print(JpaTarget.class, TargetFields.class, "metadata.key1==value1"); } @Test void printAnd() { print(JpaTarget.class, TargetFields.class, "controllerId==ctrlr1 and controllerId==ctrlr2"); print(JpaTarget.class, TargetFields.class, "targettype.key==type1 and targettype.key==type2"); - print(JpaTarget.class, TargetFields.class, "tag==tag1 and tag==tag2 and tag=tag3"); + print(JpaTarget.class, TargetFields.class, "tag==tag1 and tag==tag2 and tag==tag3"); print(JpaTarget.class, TargetFields.class, "metadata.key1==value1 and metadata.key2==value2"); print(JpaTarget.class, TargetFields.class, "attribute.key1==value1 and attribute.key2==value2"); }