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: [email protected]
For additional commands, e-mail: [email protected]