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 rd...@apache.org on 2009/04/08 06:11:17 UTC
svn commit: r762824 - in /james/imap/trunk:
jpa/src/main/java/org/apache/james/imap/jpa/mail/
jpa/src/main/java/org/apache/james/imap/jpa/mail/model/
store/src/main/java/org/apache/james/imap/store/
store/src/main/java/org/apache/james/imap/store/mail/
Author: rdonkin
Date: Tue Apr 7 16:01:43 2009
New Revision: 762824
URL: http://svn.apache.org/viewvc?rev=762824&view=rev
Log:
Switch to count to improve performance a little IMAP-73 https://issues.apache.org/jira/browse/IMAP-73
Modified:
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java
james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailbox.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java?rev=762824&r1=762823&r2=762824&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/JPAMailboxMapper.java Tue Apr 7 16:01:43 2009
@@ -36,11 +36,25 @@
*/
public abstract class JPAMailboxMapper extends Mapper implements MailboxMapper {
+ private static final char SQL_WILDCARD_CHAR = '%';
+
public JPAMailboxMapper(EntityManager entityManager) {
super(entityManager);
}
/**
+ * @see org.apache.james.imap.jpa.mail.MailboxMapper#hasChildren
+ */
+ public boolean hasChildren(String mailboxName, char hierarchyDeliminator) throws StorageException {
+
+ final String name = mailboxName + hierarchyDeliminator + SQL_WILDCARD_CHAR;
+ final Long numberOfChildMailboxes = (Long) entityManager.createNamedQuery("countMailboxesWithNameLike").setParameter("nameParam", name).getSingleResult();
+ return numberOfChildMailboxes != null && numberOfChildMailboxes > 0;
+ }
+
+
+
+ /**
* @see org.apache.james.imap.jpa.mail.MailboxMapper#save(org.apache.james.imap.jpa.mail.model.JPAMailbox)
*/
public void save(Mailbox mailbox) throws StorageException {
Modified: james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailbox.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailbox.java?rev=762824&r1=762823&r2=762824&view=diff
==============================================================================
--- james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailbox.java (original)
+++ james/imap/trunk/jpa/src/main/java/org/apache/james/imap/jpa/mail/model/JPAMailbox.java Tue Apr 7 16:01:43 2009
@@ -38,7 +38,9 @@
@NamedQuery(name="deleteAll",
query="DELETE FROM Mailbox mailbox"),
@NamedQuery(name="findMailboxWithNameLike",
- query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam")
+ query="SELECT mailbox FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam"),
+ @NamedQuery(name="countMailboxesWithNameLike",
+ query="SELECT COUNT(mailbox) FROM Mailbox mailbox WHERE mailbox.name LIKE :nameParam")
})
public class JPAMailbox implements Mailbox {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java?rev=762824&r1=762823&r2=762824&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/StoreMailboxManager.java Tue Apr 7 16:01:43 2009
@@ -260,8 +260,7 @@
* @throws TorqueException
*/
private boolean hasChildren(String name, final MailboxMapper mapper) throws StorageException {
- final String search = name + HIERARCHY_DELIMITER + SQL_WILDCARD_CHAR;
- return !mapper.findMailboxWithNameLike(search).isEmpty();
+ return mapper.hasChildren(name, HIERARCHY_DELIMITER);
}
public boolean mailboxExists(String mailboxName) throws MailboxException {
Modified: james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java
URL: http://svn.apache.org/viewvc/james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java?rev=762824&r1=762823&r2=762824&view=diff
==============================================================================
--- james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java (original)
+++ james/imap/trunk/store/src/main/java/org/apache/james/imap/store/mail/MailboxMapper.java Tue Apr 7 16:01:43 2009
@@ -34,6 +34,15 @@
public abstract Mailbox findMailboxByName(String name)
throws StorageException, MailboxNotFoundException;
+ /**
+ * Does the given mailbox have children?
+ * @param mailboxName not null
+ * @param hierarchyDeliminator character used to separate individual mailboxes in the hierarchy
+ * @return true when the mailbox has children, false otherwise
+ * @throws StorageException
+ */
+ public abstract boolean hasChildren(String mailboxName, char hierarchyDeliminator) throws StorageException;
+
public abstract void delete(Mailbox mailbox) throws StorageException;
@SuppressWarnings("unchecked")
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org