Author: norman Date: Thu Jun 24 17:42:31 2010 New Revision: 957649 URL: http://svn.apache.org/viewvc?rev=957649&view=rev Log: more XPATH query tuning
Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMessageMapper.java james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java?rev=957649&r1=957648&r2=957649&view=diff ============================================================================== --- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java (original) +++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/mail/JCRMailboxMapper.java Thu Jun 24 17:42:31 2010 @@ -69,7 +69,7 @@ public class JCRMailboxMapper extends Ab try { QueryManager manager = getSession().getWorkspace().getQueryManager(); - String queryString = "//"+ MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "'] order by @"+ JCRMailbox.NAME_PROPERTY; + String queryString = "/jcr:root/"+ MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "'] order by @"+ JCRMailbox.NAME_PROPERTY; QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); NodeIterator it = result.getNodes(); long resultSize = it.getSize(); @@ -150,7 +150,7 @@ public class JCRMailboxMapper extends Ab public Mailbox<String> findMailboxByName(String name) throws StorageException, MailboxNotFoundException { try { QueryManager manager = getSession().getWorkspace().getQueryManager(); - String queryString = "//" + MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']"; + String queryString = "/jcr:root/" + MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[@" + JCRMailbox.NAME_PROPERTY + "='" + name + "']"; QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); NodeIterator it = result.getNodes(); if (it.hasNext()) { @@ -175,7 +175,7 @@ public class JCRMailboxMapper extends Ab List<Mailbox<String>> mailboxList = new ArrayList<Mailbox<String>>(); try { QueryManager manager = getSession().getWorkspace().getQueryManager(); - String queryString = "//" + MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'%" + name + "%')]"; + String queryString = "/jcr:root/" + MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'%" + name + "%')]"; QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); NodeIterator it = result.getNodes(); while (it.hasNext()) { @@ -272,7 +272,7 @@ public class JCRMailboxMapper extends Ab try { QueryManager manager = getSession().getWorkspace() .getQueryManager(); - String queryString = "//" + MAILBOXES_PATH + String queryString = "/jcr:root/" + MAILBOXES_PATH + "//element(*,jamesMailbox:mailbox)[jcr:like(@" + JCRMailbox.NAME_PROPERTY + ",'" + mailbox.getName() + delimiter + "%')]"; QueryResult result = manager.createQuery(queryString, Query.XPATH) 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=957649&r1=957648&r2=957649&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 Thu Jun 24 17:42:31 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 = "/" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY; + String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); NodeIterator nodes = result.getNodes(); @@ -115,7 +115,7 @@ public class JCRMessageMapper extends Ab try { // we use order by because without it count will always be 0 in jackrabbit - String queryString = "/" + 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.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + 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(); @@ -190,7 +190,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + ">=" + uid + "] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); @@ -204,7 +204,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + JCRMessage.UID_PROPERTY + "=" + uid + "] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); @@ -218,7 +218,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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(); @@ -233,7 +233,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 = "/" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY; + String queryString = "/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); @@ -248,7 +248,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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(); @@ -262,7 +262,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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(); @@ -276,7 +276,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 = "/" + 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.MAILBOX_UUID_PROPERTY + "='" + uuid + "' and @" + 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(); @@ -291,7 +291,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 = "/" + 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.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.DELETED_PROPERTY+ "='true'] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); @@ -354,7 +354,7 @@ public class JCRMessageMapper extends Ab try { List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>(); - String queryString = "/" + 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.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.RECENT_PROPERTY +"='true'] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); Query query = manager.createQuery(queryString, Query.XPATH); @@ -386,7 +386,7 @@ public class JCRMessageMapper extends Ab try { List<MailboxMembership<String>> list = new ArrayList<MailboxMembership<String>>(); - String queryString = "/" + 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.MAILBOX_UUID_PROPERTY +"='" + uuid +"' and @" + JCRMessage.SEEN_PROPERTY +"='false'] order by @" + JCRMessage.UID_PROPERTY; QueryManager manager = getSession().getWorkspace().getQueryManager(); @@ -549,8 +549,8 @@ public class JCRMessageMapper extends Ab * @throws ItemNotFoundException */ private String formulateXPath(String uuid, SearchQuery query) throws ItemNotFoundException, RepositoryException { - final StringBuilder queryBuilder = new StringBuilder(50); - queryBuilder.append("/" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'"); + final StringBuilder queryBuilder = new StringBuilder(); + queryBuilder.append("/jcr:root" + getMailboxPath(uuid) + "//element(*,jamesMailbox:message)[@" + JCRMessage.MAILBOX_UUID_PROPERTY +"='" + uuid +"'"); final List<Criterion> criteria = query.getCriterias(); if (criteria.size() == 1) { final Criterion firstCriterion = criteria.get(0); Modified: james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java URL: http://svn.apache.org/viewvc/james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java?rev=957649&r1=957648&r2=957649&view=diff ============================================================================== --- james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java (original) +++ james/imap/trunk/jcr/src/main/java/org/apache/james/imap/jcr/user/JCRSubscriptionMapper.java Thu Jun 24 17:42:31 2010 @@ -98,7 +98,7 @@ public class JCRSubscriptionMapper exten */ public Subscription findFindMailboxSubscriptionForUser(String user, String mailbox) throws SubscriptionException { try { - String queryString = "//" + MAILBOXES_PATH + "//element(*,jamesMailbox:user)[@" + JCRSubscription.USERNAME_PROPERTY + "='" + user + "'] AND [@" + JCRSubscription.MAILBOXES_PROPERTY +"='" + mailbox + "']"; + String queryString = "/jcr:root/" + MAILBOXES_PATH + "//element(*,jamesMailbox:user)[@" + JCRSubscription.USERNAME_PROPERTY + "='" + user + "'] AND [@" + JCRSubscription.MAILBOXES_PROPERTY +"='" + mailbox + "']"; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); @@ -128,7 +128,7 @@ public class JCRSubscriptionMapper exten public List<Subscription> findSubscriptionsForUser(String user) throws SubscriptionException { List<Subscription> subList = new ArrayList<Subscription>(); try { - String queryString = "//" + MAILBOXES_PATH + "//element(*,jamesMailbox:user)[@" + JCRSubscription.USERNAME_PROPERTY + "='" + user + "']"; + String queryString = "/jcr:root/" + MAILBOXES_PATH + "//element(*,jamesMailbox:user)[@" + JCRSubscription.USERNAME_PROPERTY + "='" + user + "']"; QueryManager manager = getSession().getWorkspace().getQueryManager(); QueryResult result = manager.createQuery(queryString, Query.XPATH).execute(); --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org