JAMES-2655 Simplify JPA RRT query logic

Previous queries were complex and were syntactically incorrect when run against
MariaDB as reported by Marc Chamberlin.

This lead to portability issue.

Note that simplifying queries is an attempt to solve this.


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/deb03068
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/deb03068
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/deb03068

Branch: refs/heads/master
Commit: deb030687108ea45a25a596d9836ebd4cacd593d
Parents: 7364833
Author: Benoit Tellier <btell...@linagora.com>
Authored: Wed Jan 30 11:08:03 2019 +0700
Committer: Benoit Tellier <btell...@linagora.com>
Committed: Wed Jan 30 17:55:18 2019 +0700

----------------------------------------------------------------------
 .../james/rrt/jpa/JPARecipientRewriteTable.java      | 15 ++++++++++-----
 .../james/rrt/jpa/model/JPARecipientRewrite.java     | 10 ++++------
 2 files changed, 14 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/deb03068/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
 
b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
index d653d3d..c5f1e8d 100644
--- 
a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
+++ 
b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/JPARecipientRewriteTable.java
@@ -76,11 +76,16 @@ public class JPARecipientRewriteTable extends 
AbstractRecipientRewriteTable {
 
     @Override
     protected Mappings mapAddress(String user, Domain domain) throws 
RecipientRewriteTableException {
-        Mappings mapping = getMapping(user, domain, "selectExactMappings");
-        if (!mapping.isEmpty()) {
-            return mapping;
+        Mappings userDomainMapping = getMapping(user, domain, 
"selectUserDomainMapping");
+        if (userDomainMapping != null && !userDomainMapping.isEmpty()) {
+            return userDomainMapping;
+        }
+        MappingSource domainSource = MappingSource.fromDomain(domain);
+        Mappings domainMapping = getMapping(domainSource.getFixedUser(), 
domain, "selectUserDomainMapping");
+        if (domainMapping != null && !domainMapping.isEmpty()) {
+            return domainMapping;
         }
-        return getMapping(user, domain, "selectMappings");
+        return MappingsImpl.empty();
     }
 
     private Mappings getMapping(String user, Domain domain, String queryName) 
throws RecipientRewriteTableException {
@@ -175,7 +180,7 @@ public class JPARecipientRewriteTable extends 
AbstractRecipientRewriteTable {
 
     /**
      * Update the mapping for the given user and domain
-     * 
+     *
      * @param user the user
      * @param domain the domain
      * @param mapping the mapping

http://git-wip-us.apache.org/repos/asf/james-project/blob/deb03068/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
----------------------------------------------------------------------
diff --git 
a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
 
b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
index e1f2639..1edebad 100644
--- 
a/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
+++ 
b/server/data/data-jpa/src/main/java/org/apache/james/rrt/jpa/model/JPARecipientRewrite.java
@@ -39,12 +39,10 @@ import com.google.common.base.Objects;
 @Entity(name = "JamesRecipientRewrite")
 @Table(name = JPARecipientRewrite.JAMES_RECIPIENT_REWRITE)
 @NamedQueries({ 
-    @NamedQuery(name = "selectMappings", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt WHERE (rrt.user LIKE :user OR rrt.user='*') and 
(rrt.domain like :domain or rrt.domain='*') ORDER BY rrt.domain DESC"),
-    @NamedQuery(name = "selectExactMappings", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt WHERE (rrt.user LIKE :user) and (rrt.domain like 
:domain) ORDER BY rrt.domain DESC"),
-        @NamedQuery(name = "selectUserDomainMapping", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain"), 
-        @NamedQuery(name = "selectAllMappings", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt"),
-        @NamedQuery(name = "deleteMapping", query = "DELETE FROM 
JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain AND 
rrt.targetAddress=:targetAddress"),
-        @NamedQuery(name = "updateMapping", query = "UPDATE 
JamesRecipientRewrite rrt SET rrt.targetAddress=:targetAddress WHERE 
rrt.user=:user AND rrt.domain=:domain") })
+    @NamedQuery(name = "selectUserDomainMapping", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain"),
+    @NamedQuery(name = "selectAllMappings", query = "SELECT rrt FROM 
JamesRecipientRewrite rrt"),
+    @NamedQuery(name = "deleteMapping", query = "DELETE FROM 
JamesRecipientRewrite rrt WHERE rrt.user=:user AND rrt.domain=:domain AND 
rrt.targetAddress=:targetAddress"),
+    @NamedQuery(name = "updateMapping", query = "UPDATE JamesRecipientRewrite 
rrt SET rrt.targetAddress=:targetAddress WHERE rrt.user=:user AND 
rrt.domain=:domain") })
 @IdClass(JPARecipientRewrite.RecipientRewriteTableId.class)
 public class JPARecipientRewrite {
 


---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org
For additional commands, e-mail: server-dev-h...@james.apache.org

Reply via email to