MAILBOX-296 Prepare CassandraMessageDAO select statements

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

Branch: refs/heads/master
Commit: 50aacfe7ff15cac6cbf2cacbb4506b44bcc19c58
Parents: 3bcc4ef
Author: benwa <[email protected]>
Authored: Thu May 18 17:36:38 2017 +0700
Committer: benwa <[email protected]>
Committed: Fri May 19 17:30:35 2017 +0700

----------------------------------------------------------------------
 .../cassandra/mail/CassandraMessageDAO.java     | 37 ++++++++++++--------
 1 file changed, 23 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/50aacfe7/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
----------------------------------------------------------------------
diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
index b0b0f83..a6ba328 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAO.java
@@ -85,7 +85,6 @@ import com.datastax.driver.core.Row;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.UDTValue;
 import com.datastax.driver.core.querybuilder.QueryBuilder;
-import com.datastax.driver.core.querybuilder.Select.Where;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
@@ -100,6 +99,10 @@ public class CassandraMessageDAO {
     private final CassandraTypesProvider typesProvider;
     private final PreparedStatement insert;
     private final PreparedStatement delete;
+    private final PreparedStatement selectMetadata;
+    private final PreparedStatement selectHeaders;
+    private final PreparedStatement selectFields;
+    private final PreparedStatement selectBody;
 
     @Inject
     public CassandraMessageDAO(Session session, CassandraTypesProvider 
typesProvider) {
@@ -107,6 +110,16 @@ public class CassandraMessageDAO {
         this.typesProvider = typesProvider;
         this.insert = prepareInsert(session);
         this.delete = prepareDelete(session);
+        this.selectMetadata = prepareSelect(session, METADATA);
+        this.selectHeaders = prepareSelect(session, HEADERS);
+        this.selectFields = prepareSelect(session, FIELDS);
+        this.selectBody = prepareSelect(session, BODY);
+    }
+
+    private PreparedStatement prepareSelect(Session session, String[] fields) {
+        return session.prepare(select(fields)
+            .from(TABLE_NAME)
+            .where(eq(MESSAGE_ID, bindMarker(MESSAGE_ID))));
     }
 
     private PreparedStatement prepareInsert(Session session) {
@@ -200,15 +213,11 @@ public class CassandraMessageDAO {
     }
 
     private CompletableFuture<ResultSet> 
retrieveRow(ComposedMessageIdWithMetaData messageId, FetchType fetchType) {
-        return cassandraAsyncExecutor.execute(
-                buildQuery(messageId, fetchType));
-    }
-    
-    private Where buildQuery(ComposedMessageIdWithMetaData messageId, 
FetchType fetchType) {
         CassandraMessageId cassandraMessageId = (CassandraMessageId) 
messageId.getComposedMessageId().getMessageId();
-        return select(retrieveFields(fetchType))
-                .from(TABLE_NAME)
-                .where(eq(MESSAGE_ID, cassandraMessageId.get()));
+
+        return cassandraAsyncExecutor.execute(retrieveSelect(fetchType)
+            .bind()
+            .setUUID(MESSAGE_ID, cassandraMessageId.get()));
     }
 
     private Pair<MessageWithoutAttachment, 
Stream<MessageAttachmentRepresentation>> message(Row 
row,ComposedMessageIdWithMetaData messageIdWithMetaData, FetchType fetchType) {
@@ -264,16 +273,16 @@ public class CassandraMessageDAO {
                 .build();
     }
 
-    private String[] retrieveFields(FetchType fetchType) {
+    private PreparedStatement retrieveSelect(FetchType fetchType) {
         switch (fetchType) {
             case Body:
-                return BODY;
+                return selectBody;
             case Full:
-                return FIELDS;
+                return selectFields;
             case Headers:
-                return HEADERS;
+                return selectHeaders;
             case Metadata:
-                return METADATA;
+                return selectMetadata;
             default:
                 throw new RuntimeException("Unknown FetchType " + fetchType);
         }


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

Reply via email to