MAILBOX-265 Cassandra Message Mapper should take limit into account

Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/8b970f59
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/8b970f59
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/8b970f59

Branch: refs/heads/master
Commit: 8b970f59d6103ad1852409b5e11939b7d7d4b2c6
Parents: fb4a3ec
Author: Benoit Tellier <[email protected]>
Authored: Thu Mar 3 12:05:51 2016 +0700
Committer: Benoit Tellier <[email protected]>
Committed: Fri Mar 4 19:35:25 2016 +0700

----------------------------------------------------------------------
 .../mailbox/cassandra/mail/CassandraMessageMapper.java   | 11 ++++++++++-
 .../store/mail/model/AbstractMessageMapperTest.java      |  3 ---
 2 files changed, 10 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/8b970f59/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
index 7f9bbc4..b406391 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageMapper.java
@@ -69,6 +69,8 @@ import javax.mail.Flags;
 import javax.mail.Flags.Flag;
 import javax.mail.util.SharedByteArrayInputStream;
 
+import com.datastax.driver.core.Statement;
+import com.datastax.driver.core.querybuilder.Select;
 import com.google.common.base.Throwables;
 import org.apache.james.backends.cassandra.init.CassandraTypesProvider;
 import org.apache.james.backends.cassandra.utils.CassandraConstants;
@@ -167,12 +169,19 @@ public class CassandraMessageMapper implements 
MessageMapper<CassandraId> {
 
     @Override
     public Iterator<MailboxMessage<CassandraId>> 
findInMailbox(Mailbox<CassandraId> mailbox, MessageRange set, FetchType ftype, 
int max) throws MailboxException {
-        return 
CassandraUtils.convertToStream(session.execute(buildQuery(mailbox, set, ftype)))
+        return 
CassandraUtils.convertToStream(session.execute(buildSelectQueryWithLimit(buildQuery(mailbox,
 set, ftype), max)))
             .map(row -> message(row, ftype))
             .sorted(Comparator.comparingLong(MailboxMessage::getUid))
             .iterator();
     }
 
+    private Statement buildSelectQueryWithLimit(Select.Where selectStatement, 
int max) {
+        if (max <= 0) {
+            return selectStatement;
+        }
+        return selectStatement.limit(max);
+    }
+
     @Override
     public List<Long> findRecentMessageUidsInMailbox(Mailbox<CassandraId> 
mailbox) throws MailboxException {
         return 
CassandraUtils.convertToStream(session.execute(selectAll(mailbox, 
FetchType.Metadata).and((eq(RECENT, true)))))

http://git-wip-us.apache.org/repos/asf/james-project/blob/8b970f59/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
----------------------------------------------------------------------
diff --git 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
index a8ede55..3198507 100644
--- 
a/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
+++ 
b/mailbox/store/src/test/java/org/apache/james/mailbox/store/mail/model/AbstractMessageMapperTest.java
@@ -44,7 +44,6 @@ import 
org.apache.james.mailbox.store.mail.model.impl.SimpleMailbox;
 import org.apache.james.mailbox.store.mail.model.impl.SimpleMailboxMessage;
 import org.junit.After;
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public abstract class AbstractMessageMapperTest<Id extends MailboxId> {
@@ -256,8 +255,6 @@ public abstract class AbstractMessageMapperTest<Id extends 
MailboxId> {
         assertThat(retrievedMessageIterator).isEmpty();
     }
 
-    // No limit used for the moment
-    @Ignore
     @Test
     public void retrievingMessagesWithALimitShouldLimitTheNumberOfMessages() 
throws MailboxException {
         int limit = 2;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to