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