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/26 19:45:51 UTC
svn commit: r958254 -
/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java
Author: norman
Date: Sat Jun 26 17:45:51 2010
New Revision: 958254
URL: http://svn.apache.org/viewvc?rev=958254&view=rev
Log:
We not need to filter on mailbox uuid with XPATH because we search only in the mailbox node. (IMAP-160)
Modified:
james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.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=958254&r1=958253&r2=958254&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 Sat Jun 26 17:45:51 2010
@@ -84,7 +84,7 @@ public class JCRMessageMapper extends Ab
public long countMessagesInMailbox(String uuid) throws StorageException {
try {
// we use order by because without it count will always be 0 in jackrabbit
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator nodes = result.getNodes();
@@ -114,7 +114,7 @@ public class JCRMessageMapper extends Ab
try {
// we use order by because without it count will always be 0 in jackrabbit
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
NodeIterator nodes = result.getNodes();
@@ -186,7 +186,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + ">=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -200,7 +200,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + "=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + "=" + uid + "] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -214,7 +214,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + "] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + "] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -229,7 +229,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findMessagesInMailbox(String uuid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message) order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -244,7 +244,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findDeletedMessagesInMailboxAfterUID(String uuid, long uid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -258,7 +258,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findDeletedMessagesInMailboxWithUID(String uuid, long uid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -272,7 +272,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findDeletedMessagesInMailboxBetweenUIDs(String uuid, long from, long to) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.UID_PROPERTY + ">=" + from + " and @" + JCRMessage.UID_PROPERTY + "<=" + to + " and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -287,7 +287,7 @@ public class JCRMessageMapper extends Ab
private List<MailboxMembership<String>> findDeletedMessagesInMailbox(String uuid) throws RepositoryException {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
QueryResult result = manager.createQuery(queryString, Query.XPATH).execute();
@@ -349,7 +349,7 @@ public class JCRMessageMapper extends Ab
try {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.RECENT_PROPERTY +"='true'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.RECENT_PROPERTY +"='true'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
Query query = manager.createQuery(queryString, Query.XPATH);
@@ -380,7 +380,7 @@ public class JCRMessageMapper extends Ab
try {
List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>();
- String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
+ String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY;
QueryManager manager = getSession().getWorkspace().getQueryManager();
@@ -542,28 +542,35 @@ public class JCRMessageMapper extends Ab
*/
private String formulateXPath(String uuid, SearchQuery query) throws ItemNotFoundException, RepositoryException {
final StringBuilder queryBuilder = new StringBuilder();
- queryBuilder.append("/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'");
+ queryBuilder.append("/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)");
final List<Criterion> criteria = query.getCriterias();
+ boolean crit = false;
if (criteria.size() == 1) {
final Criterion firstCriterion = criteria.get(0);
if (firstCriterion instanceof SearchQuery.UidCriterion) {
final SearchQuery.UidCriterion uidCriterion = (SearchQuery.UidCriterion) firstCriterion;
final NumericRange[] ranges = uidCriterion.getOperator().getRange();
+ crit = ranges.length > 0;
for (int i = 0; i < ranges.length; i++) {
final long low = ranges[i].getLowValue();
final long high = ranges[i].getHighValue();
-
+ if (i > 0) {
+ queryBuilder.append(" and ");
+ } else {
+ queryBuilder.append("[");
+ }
if (low == Long.MAX_VALUE) {
- queryBuilder.append(" and @" + JCRMessage.UID_PROPERTY +"<=").append(high);
+ queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"<=").append(high);
} else if (low == high) {
- queryBuilder.append(" and @" + JCRMessage.UID_PROPERTY +"=").append(low);
+ queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"=").append(low);
} else {
- queryBuilder.append(" and @" + JCRMessage.UID_PROPERTY +"<=").append(high).append(" and @" + JCRMessage.UID_PROPERTY + ">=").append(low);
+ queryBuilder.append("@" + JCRMessage.UID_PROPERTY +"<=").append(high).append(" and @" + JCRMessage.UID_PROPERTY + ">=").append(low);
}
}
}
}
- queryBuilder.append("] order by @" + JCRMessage.UID_PROPERTY);
+ if (crit) queryBuilder.append("]");
+ queryBuilder.append(" order by @" + JCRMessage.UID_PROPERTY);
final String jql = queryBuilder.toString();
return jql;
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org