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