You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/06/29 20:22:04 UTC

svn commit: r959062 - in /james/imap/trunk: jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java

Author: norman
Date: Tue Jun 29 18:22:04 2010
New Revision: 959062

URL: http://svn.apache.org/viewvc?rev=959062&view=rev
Log:
Limit results to 1 of we know we only get one result as max
Do not order results if we only query for one message

Modified:
    james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
    james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java

Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java?rev=959062&r1=959061&r2=959062&view=diff
==============================================================================
--- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java (original)
+++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java Tue Jun 29 18:22:04 2010
@@ -172,7 +172,7 @@ public class JCRMessageMapper extends Ab
                     results = findMessagesInMailboxAfterUID(uuid, from);
                     break;
                 case ONE:
-                    results = findMessagesInMailboxWithUID(uuid, from);
+                    results = findMessageInMailboxWithUID(uuid, from);
                     break;
                 case RANGE:
                     results = findMessagesInMailboxBetweenUIDs(uuid, from, to);
@@ -198,13 +198,14 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
+    private List<MailboxMembership<String>> findMessageInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + "]";
 
         QueryManager manager = getSession().getWorkspace().getQueryManager();
-        QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
-
+        Query query = manager.createQuery(queryString, Query.XPATH);
+        query.setLimit(1);
+        QueryResult result = query.execute();
         NodeIterator iterator = result.getNodes();
         while (iterator.hasNext()) {
             list.add(new JCRMessage(iterator.nextNode(), getLogger()));
@@ -256,11 +257,13 @@ public class JCRMessageMapper extends Ab
         return list;
     }
 
-    private List<MailboxMembership<String>> findDeletedMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
+    private List<MailboxMembership<String>> findDeletedMessageInMailboxWithUID(String uuid, long uid) throws RepositoryException  {
         List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
-        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true']  order by @" + JCRMessage.UID_PROPERTY;
+        String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + " and @" + JCRMessage.DELETED_PROPERTY+ "='true']";
         QueryManager manager = getSession().getWorkspace().getQueryManager();
-        QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
+        Query query = manager.createQuery(queryString, Query.XPATH);
+        query.setLimit(1);
+        QueryResult result = query.execute();
 
         NodeIterator iterator = result.getNodes();
         while (iterator.hasNext()) {
@@ -322,7 +325,7 @@ public class JCRMessageMapper extends Ab
                     results = findDeletedMessagesInMailboxAfterUID(uuid, from);
                     break;
                 case ONE:
-                    results = findDeletedMessagesInMailboxWithUID(uuid, from);
+                    results = findDeletedMessageInMailboxWithUID(uuid, from);
                     break;
                 case RANGE:
                     results = findDeletedMessagesInMailboxBetweenUIDs(uuid, from, to);
@@ -545,6 +548,7 @@ public class JCRMessageMapper extends Ab
         queryBuilder.append("/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)");
         final List<Criterion> criteria = query.getCriterias();
         boolean crit = false;
+        boolean range = false;
         if (criteria.size() == 1) {
             final Criterion firstCriterion = criteria.get(0);
             if (firstCriterion instanceof SearchQuery.UidCriterion) {
@@ -560,17 +564,23 @@ public class JCRMessageMapper extends Ab
                         queryBuilder.append("[");
                     }
                     if (low == Long.MAX_VALUE) {
+                        range = true;
                         queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"<=").append(high);
                     } else if (low == high) {
+                        range = false;
                         queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"=").append(low);
                     } else {
+                        range = true;
                         queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"<=").append(high).append(" and @" + JCRMessage.UID_PROPERTY + ">=").append(low);
                     }
                 }
             }
         }
         if (crit) queryBuilder.append("]");
-        queryBuilder.append(" order by @" + JCRMessage.UID_PROPERTY);
+        
+        if (crit == false || (crit && range)) {
+            queryBuilder.append(" order by @" + JCRMessage.UID_PROPERTY);
+        }
         final String jql = queryBuilder.toString();
         return jql;
     }

Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java?rev=959062&r1=959061&r2=959062&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMessageMapper.java Tue Jun 29 18:22:04 2010
@@ -91,7 +91,7 @@ public class JPAMessageMapper extends JP
     private List<MailboxMembership<Long>> findMessagesInMailboxWithUID(Long mailboxId, long uid) {
         return getEntityManager().createNamedQuery("findMessagesInMailboxWithUID")
         .setParameter("idParam", mailboxId)
-        .setParameter("uidParam", uid).getResultList();
+        .setParameter("uidParam", uid).setMaxResults(1).getResultList();
     }
 
     @SuppressWarnings("unchecked")
@@ -152,7 +152,7 @@ public class JPAMessageMapper extends JP
     private List<MailboxMembership<Long>> findDeletedMessagesInMailboxWithUID(Long mailboxId, long uid) {
         return getEntityManager().createNamedQuery("findDeletedMessagesInMailboxWithUID")
         .setParameter("idParam", mailboxId)
-        .setParameter("uidParam", uid).getResultList();
+        .setParameter("uidParam", uid).setMaxResults(1).getResultList();
     }
 
     @SuppressWarnings("unchecked")



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