You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/12/06 08:03:52 UTC

[james-project] 01/15: [PERF] Adopt CqlIdentifier in mailbox/cassandra

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6f33b2c3369a81f73797f09372d836061d9bcbd5
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Dec 2 12:10:58 2022 +0700

    [PERF] Adopt CqlIdentifier in mailbox/cassandra
---
 .../cassandra/mail/CassandraApplicableFlagDAO.java |  4 +-
 .../cassandra/mail/CassandraMessageDAO.java        |  7 +--
 .../cassandra/mail/CassandraMessageDAOV3.java      | 26 ++++------
 .../cassandra/mail/CassandraMessageIdDAO.java      | 59 +++++++++-------------
 .../mail/CassandraMessageIdToImapUidDAO.java       | 36 +++++--------
 .../mailbox/cassandra/mail/FlagsExtractor.java     |  9 ++--
 .../cassandra/mail/utils/MailboxBaseTupleUtil.java |  2 +-
 .../cassandra/modules/CassandraMailboxModule.java  |  4 +-
 .../cassandra/modules/CassandraMessageModule.java  |  4 +-
 .../mailbox/cassandra/table/CassandraACLTable.java |  8 +--
 .../cassandra/table/CassandraACLV2Table.java       |  8 +--
 .../cassandra/table/CassandraAnnotationTable.java  | 14 ++---
 .../table/CassandraApplicableFlagTable.java        |  6 +--
 .../table/CassandraAttachmentMessageIdTable.java   | 10 ++--
 .../table/CassandraAttachmentOwnerTable.java       |  7 +--
 .../table/CassandraAttachmentV2Table.java          | 16 +++---
 .../cassandra/table/CassandraCurrentQuota.java     |  8 +--
 .../table/CassandraDeletedMessageTable.java        |  6 ++-
 .../cassandra/table/CassandraDomainMaxQuota.java   |  8 +--
 .../cassandra/table/CassandraFirstUnseenTable.java |  6 ++-
 .../cassandra/table/CassandraGlobalMaxQuota.java   |  8 +--
 .../table/CassandraMailboxCountersTable.java       |  8 +--
 .../cassandra/table/CassandraMailboxPathTable.java | 34 -------------
 .../table/CassandraMailboxPathV2Table.java         | 36 -------------
 .../table/CassandraMailboxPathV3Table.java         | 14 ++---
 .../table/CassandraMailboxRecentsTable.java        |  6 ++-
 .../cassandra/table/CassandraMailboxTable.java     | 15 +++---
 .../mailbox/cassandra/table/CassandraMaxQuota.java |  8 +--
 .../cassandra/table/CassandraMessageIdTable.java   | 12 ++---
 .../cassandra/table/CassandraMessageIds.java       | 11 ++--
 .../table/CassandraMessageModseqTable.java         |  6 ++-
 .../cassandra/table/CassandraMessageUidTable.java  |  6 ++-
 .../cassandra/table/CassandraMessageV2Table.java   | 34 +++++++------
 .../cassandra/table/CassandraMessageV3Table.java   | 57 +++++++++------------
 .../table/CassandraSubscriptionTable.java          |  7 +--
 .../table/CassandraThreadLookupTable.java          |  7 +--
 .../cassandra/table/CassandraThreadTable.java      | 11 ++--
 .../table/CassandraUserMailboxRightsTable.java     |  8 +--
 .../apache/james/mailbox/cassandra/table/Flag.java | 53 +++++++++----------
 .../cassandra/table/MessageIdToImapUid.java        | 15 ++----
 .../cassandra/mail/CassandraMessageIdDAOTest.java  | 17 +++----
 41 files changed, 268 insertions(+), 353 deletions(-)

diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
index 16e460085e..9d8270902d 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraApplicableFlagDAO.java
@@ -23,7 +23,6 @@ import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.bindMarker;
 import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.deleteFrom;
 import static com.datastax.oss.driver.api.querybuilder.QueryBuilder.selectFrom;
 import static com.datastax.oss.driver.api.querybuilder.relation.Relation.column;
-import static org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.FIELDS;
 import static org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.MAILBOX_ID;
 import static org.apache.james.mailbox.cassandra.table.CassandraApplicableFlagTable.TABLE_NAME;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER_FLAGS;
@@ -35,6 +34,7 @@ import javax.mail.Flags;
 
 import org.apache.james.backends.cassandra.utils.CassandraAsyncExecutor;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
+import org.apache.james.mailbox.cassandra.table.Flag;
 
 import com.datastax.oss.driver.api.core.CqlSession;
 import com.datastax.oss.driver.api.core.cql.PreparedStatement;
@@ -58,7 +58,7 @@ public class CassandraApplicableFlagDAO {
 
     private PreparedStatement prepareSelect(CqlSession session) {
         return session.prepare(selectFrom(TABLE_NAME)
-            .columns(FIELDS)
+            .columns(Flag.USER_FLAGS)
             .where(column(MAILBOX_ID).isEqualTo(bindMarker(MAILBOX_ID)))
             .build());
     }
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 a852986ec8..876daffdb9 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
@@ -69,6 +69,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.Property;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 import com.datastax.oss.driver.api.core.CqlSession;
 import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
 import com.datastax.oss.driver.api.core.cql.BoundStatement;
@@ -208,7 +209,7 @@ public class CassandraMessageDAO {
     }
 
     private UdtValue toUDT(MessageAttachmentMetadata messageAttachment) {
-        UdtValue result = typesProvider.getDefinedUserType(ATTACHMENTS)
+        UdtValue result = typesProvider.getDefinedUserType(ATTACHMENTS.asCql(true))
             .newValue()
             .setString(Attachments.ID, messageAttachment.getAttachmentId().getId())
             .setBoolean(Attachments.IS_INLINE, messageAttachment.isInline());
@@ -228,7 +229,7 @@ public class CassandraMessageDAO {
         return message.getProperties()
             .toProperties()
             .stream()
-            .map(property -> typesProvider.getDefinedUserType(PROPERTIES)
+            .map(property -> typesProvider.getDefinedUserType(PROPERTIES.asCql(true))
                 .newValue()
                 .setString(Properties.NAMESPACE, property.getNamespace())
                 .setString(Properties.NAME, property.getLocalName())
@@ -346,7 +347,7 @@ public class CassandraMessageDAO {
         return Mono.from(blobStore.readBytes(blobStore.getDefaultBucketName(), blobId, storagePolicy));
     }
 
-    private BlobId retrieveBlobId(String field, Row row) {
+    private BlobId retrieveBlobId(CqlIdentifier field, Row row) {
         return blobIdFactory.from(row.getString(field));
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java
index 5e6240279c..3b2ea9b4e4 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageDAOV3.java
@@ -35,16 +35,11 @@ import static org.apache.james.blob.api.BlobStore.StoragePolicy.SIZE_BASED;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.ATTACHMENTS;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_CONTENT_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_OCTECTS;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.Properties.CONTENT_DESCRIPTION;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.Properties.CONTENT_DISPOSITION_PARAMETERS;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.Properties.CONTENT_DISPOSITION_TYPE;
@@ -58,7 +53,6 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.P
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.Properties.SUB_TYPE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.TABLE_NAME;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.TEXTUAL_LINE_COUNT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.TEXTUAL_LINE_COUNT_LOWERCASE;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -91,6 +85,7 @@ import org.apache.james.mailbox.store.mail.model.MailboxMessage;
 import org.apache.james.mailbox.store.mail.model.impl.Properties;
 import org.apache.james.mailbox.store.mail.model.impl.PropertyBuilder;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 import com.datastax.oss.driver.api.core.CqlSession;
 import com.datastax.oss.driver.api.core.config.DriverExecutionProfile;
 import com.datastax.oss.driver.api.core.cql.BoundStatement;
@@ -100,6 +95,7 @@ import com.datastax.oss.driver.api.core.cql.Row;
 import com.datastax.oss.driver.api.core.data.UdtValue;
 import com.datastax.oss.driver.api.core.type.UserDefinedType;
 import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodecs;
 import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
 import com.google.common.collect.ImmutableList;
 import com.google.common.io.ByteSource;
@@ -138,7 +134,7 @@ public class CassandraMessageDAOV3 {
         this.select = prepareSelect(session);
         this.listBlobs = prepareSelectBlobs(session);
         this.cidParser = Cid.parser().relaxed();
-        this.attachmentsType = typesProvider.getDefinedUserType(ATTACHMENTS);
+        this.attachmentsType = typesProvider.getDefinedUserType(ATTACHMENTS.asCql(true));
     }
 
     private PreparedStatement prepareSelect(CqlSession session) {
@@ -348,9 +344,9 @@ public class CassandraMessageDAOV3 {
             .map(content ->
                 new MessageRepresentation(
                     cassandraMessageId,
-                    Optional.ofNullable(row.getInstant(INTERNAL_DATE_LOWERCASE)).map(Date::from).orElse(null),
-                    row.getLong(FULL_CONTENT_OCTETS_LOWERCASE),
-                    row.getInt(BODY_START_OCTET_LOWERCASE),
+                    Optional.ofNullable(row.get(INTERNAL_DATE, TypeCodecs.TIMESTAMP)).map(Date::from).orElse(null),
+                    row.getLong(FULL_CONTENT_OCTETS),
+                    row.getInt(BODY_START_OCTET),
                     content,
                     getProperties(row),
                     getAttachments(row).collect(ImmutableList.toImmutableList()),
@@ -371,7 +367,7 @@ public class CassandraMessageDAOV3 {
         property.setContentLanguage(row.get(CONTENT_LANGUAGE, LIST_OF_STRINGS_CODEC));
         property.setContentDispositionParameters(row.get(CONTENT_DISPOSITION_PARAMETERS, MAP_OF_STRINGS_CODEC));
         property.setContentTypeParameters(row.get(CONTENT_TYPE_PARAMETERS, MAP_OF_STRINGS_CODEC));
-        property.setTextualLineCount(row.getLong(TEXTUAL_LINE_COUNT_LOWERCASE));
+        property.setTextualLineCount(row.getLong(TEXTUAL_LINE_COUNT));
         return property.build();
     }
 
@@ -422,14 +418,14 @@ public class CassandraMessageDAOV3 {
         return Mono.from(blobStore.readBytes(blobStore.getDefaultBucketName(), blobId, storagePolicy));
     }
 
-    private BlobId retrieveBlobId(String field, Row row) {
-        return blobIdFactory.from(row.getString(field));
+    private BlobId retrieveBlobId(CqlIdentifier field, Row row) {
+        return blobIdFactory.from(row.get(field, TypeCodecs.TEXT));
     }
 
     Flux<BlobId> listBlobs() {
         return cassandraAsyncExecutor.executeRows(listBlobs.bind())
             .flatMapIterable(row -> ImmutableList.of(
-                blobIdFactory.from(row.getString(HEADER_CONTENT_LOWERCASE)),
-                blobIdFactory.from(row.getString(BODY_CONTENT_LOWERCASE))));
+                blobIdFactory.from(row.get(HEADER_CONTENT, TypeCodecs.TEXT)),
+                blobIdFactory.from(row.get(BODY_CONTENT, TypeCodecs.TEXT))));
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
index 6d950d997f..8e4d26823a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAO.java
@@ -30,17 +30,11 @@ import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.T
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.THREAD_ID;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.IMAP_UID;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.Flag.ANSWERED;
 import static org.apache.james.mailbox.cassandra.table.Flag.DELETED;
 import static org.apache.james.mailbox.cassandra.table.Flag.DRAFT;
@@ -49,15 +43,11 @@ import static org.apache.james.mailbox.cassandra.table.Flag.RECENT;
 import static org.apache.james.mailbox.cassandra.table.Flag.SEEN;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER_FLAGS;
-import static org.apache.james.mailbox.cassandra.table.Flag.USER_FLAGS_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ;
-import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ_LOWERCASE;
-import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.THREAD_ID_LOWERCASE;
 import static org.apache.james.util.ReactorUtils.publishIfPresent;
 
 import java.time.Duration;
 import java.util.Date;
-import java.util.Locale;
 import java.util.Optional;
 import java.util.UUID;
 
@@ -84,6 +74,7 @@ import com.datastax.oss.driver.api.core.cql.BoundStatement;
 import com.datastax.oss.driver.api.core.cql.BoundStatementBuilder;
 import com.datastax.oss.driver.api.core.cql.PreparedStatement;
 import com.datastax.oss.driver.api.core.cql.Row;
+import com.datastax.oss.driver.api.core.type.codec.TypeCodecs;
 import com.datastax.oss.driver.api.querybuilder.QueryBuilder;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
@@ -261,16 +252,16 @@ public class CassandraMessageIdDAO {
             QueryBuilder.selectFrom(TABLE_NAME)
                 .columns(IMAP_UID,
                     MESSAGE_ID,
-                    THREAD_ID_LOWERCASE,
-                    ANSWERED.toLowerCase(Locale.US),
-                    DELETED.toLowerCase(Locale.US),
-                    DRAFT.toLowerCase(Locale.US),
-                    RECENT.toLowerCase(Locale.US),
-                    SEEN.toLowerCase(Locale.US),
-                    FLAGGED.toLowerCase(Locale.US),
-                    USER.toLowerCase(Locale.US),
-                    USER_FLAGS_LOWERCASE,
-                    MOD_SEQ_LOWERCASE)
+                    THREAD_ID,
+                    ANSWERED,
+                    DELETED,
+                    DRAFT,
+                    RECENT,
+                    SEEN,
+                    FLAGGED,
+                    USER,
+                    USER_FLAGS,
+                    MOD_SEQ)
                 .where(column(MAILBOX_ID).isEqualTo(bindMarker(MAILBOX_ID)),
                     column(IMAP_UID).isGreaterThanOrEqualTo(bindMarker(IMAP_UID_GTE)),
                     column(IMAP_UID).isLessThanOrEqualTo(bindMarker(IMAP_UID_LTE)))
@@ -281,7 +272,7 @@ public class CassandraMessageIdDAO {
         return session.prepare(
             QueryBuilder.selectFrom(TABLE_NAME)
                 .columns(IMAP_UID,
-                    DELETED.toLowerCase(Locale.US))
+                    DELETED)
                 .where(column(MAILBOX_ID).isEqualTo(bindMarker(MAILBOX_ID)),
                     column(IMAP_UID).isGreaterThanOrEqualTo(bindMarker(IMAP_UID_GTE)),
                     column(IMAP_UID).isLessThanOrEqualTo(bindMarker(IMAP_UID_LTE)))
@@ -425,19 +416,19 @@ public class CassandraMessageIdDAO {
 
     public Flux<MessageUid> listUids(CassandraId mailboxId) {
         return cassandraAsyncExecutor.executeRows(selectAllUids.bind()
-                .setUuid(MAILBOX_ID, mailboxId.asUuid()))
-            .map(row -> MessageUid.of(row.getLong(IMAP_UID)));
+                .set(MAILBOX_ID, mailboxId.asUuid(), TypeCodecs.TIMEUUID))
+            .map(row -> MessageUid.of(row.getLong(0)));
     }
 
     public Flux<ComposedMessageIdWithMetaData> listMessagesMetadata(CassandraId mailboxId, MessageRange range) {
         return cassandraAsyncExecutor.executeRows(selectMetadataRange.bind()
-                .setUuid(MAILBOX_ID, mailboxId.asUuid())
+                .set(MAILBOX_ID, mailboxId.asUuid(), TypeCodecs.TIMEUUID)
                 .setLong(IMAP_UID_GTE, range.getUidFrom().asLong())
                 .setLong(IMAP_UID_LTE, range.getUidTo().asLong()))
             .map(row -> {
-                CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID_LOWERCASE));
+                CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID));
                 return ComposedMessageIdWithMetaData.builder()
-                    .modSeq(ModSeq.of(row.getLong(MOD_SEQ_LOWERCASE)))
+                    .modSeq(ModSeq.of(row.getLong(MOD_SEQ)))
                     .threadId(getThreadIdFromRow(row, messageId))
                     .flags(FlagsExtractor.getFlags(row))
                     .composedMessageId(new ComposedMessageId(mailboxId,
@@ -535,28 +526,28 @@ public class CassandraMessageIdDAO {
                 .subscribe();
             return Optional.empty();
         }
-        final CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID_LOWERCASE));
+        final CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID));
         return Optional.of(CassandraMessageMetadata.builder()
             .ids(ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(new ComposedMessageId(
-                    CassandraId.of(row.getUuid(MAILBOX_ID_LOWERCASE)),
+                    CassandraId.of(row.getUuid(MAILBOX_ID)),
                     messageId,
                     MessageUid.of(row.getLong(IMAP_UID))))
                 .flags(FlagsExtractor.getFlags(row))
-                .modSeq(ModSeq.of(row.getLong(MOD_SEQ_LOWERCASE)))
+                .modSeq(ModSeq.of(row.getLong(MOD_SEQ)))
                 .threadId(getThreadIdFromRow(row, messageId))
                 .build())
-            .bodyStartOctet(row.get(BODY_START_OCTET_LOWERCASE, Integer.class))
-            .internalDate(Optional.ofNullable(row.getInstant(INTERNAL_DATE_LOWERCASE))
+            .bodyStartOctet(row.get(BODY_START_OCTET, Integer.class))
+            .internalDate(Optional.ofNullable(row.getInstant(INTERNAL_DATE))
                 .map(Date::from))
-            .size(row.get(FULL_CONTENT_OCTETS_LOWERCASE, Long.class))
-            .headerContent(Optional.ofNullable(row.getString(HEADER_CONTENT_LOWERCASE))
+            .size(row.get(FULL_CONTENT_OCTETS, Long.class))
+            .headerContent(Optional.ofNullable(row.getString(HEADER_CONTENT))
                 .map(blobIdFactory::from))
             .build());
     }
 
     private ThreadId getThreadIdFromRow(Row row, MessageId messageId) {
-        UUID threadIdUUID = row.getUuid(THREAD_ID_LOWERCASE);
+        UUID threadIdUUID = row.getUuid(THREAD_ID);
         if (threadIdUUID == null) {
             return ThreadId.fromBaseMessageId(messageId);
         }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
index 26e4d2da46..824f7f3038 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdToImapUidDAO.java
@@ -28,17 +28,11 @@ import static com.datastax.oss.driver.api.querybuilder.update.Assignment.setColu
 import static org.apache.james.backends.cassandra.init.configuration.JamesExecutionProfiles.ConsistencyChoice.STRONG;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.IMAP_UID;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.BODY_START_OCTET_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.FULL_CONTENT_OCTETS_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.HEADER_CONTENT_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageV3Table.INTERNAL_DATE_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.Flag.ANSWERED;
 import static org.apache.james.mailbox.cassandra.table.Flag.DELETED;
 import static org.apache.james.mailbox.cassandra.table.Flag.DRAFT;
@@ -48,10 +42,8 @@ import static org.apache.james.mailbox.cassandra.table.Flag.SEEN;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER;
 import static org.apache.james.mailbox.cassandra.table.Flag.USER_FLAGS;
 import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ;
-import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.MOD_SEQ_LOWERCASE;
 import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.TABLE_NAME;
 import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.THREAD_ID;
-import static org.apache.james.mailbox.cassandra.table.MessageIdToImapUid.THREAD_ID_LOWERCASE;
 
 import java.time.Duration;
 import java.util.Date;
@@ -226,7 +218,7 @@ public class CassandraMessageIdToImapUidDAO {
     private PreparedStatement prepareSelectAll() {
         return session.prepare(selectFrom(TABLE_NAME)
             .all()
-            .where(column(MESSAGE_ID_LOWERCASE).isEqualTo(bindMarker(MESSAGE_ID_LOWERCASE)))
+            .where(column(MESSAGE_ID).isEqualTo(bindMarker(MESSAGE_ID)))
             .build());
     }
 
@@ -237,8 +229,8 @@ public class CassandraMessageIdToImapUidDAO {
     private PreparedStatement prepareSelect() {
         return session.prepare(selectFrom(TABLE_NAME)
             .all()
-            .where(column(MESSAGE_ID_LOWERCASE).isEqualTo(bindMarker(MESSAGE_ID_LOWERCASE)),
-                column(MAILBOX_ID_LOWERCASE).isEqualTo(bindMarker(MAILBOX_ID_LOWERCASE)))
+            .where(column(MESSAGE_ID).isEqualTo(bindMarker(MESSAGE_ID)),
+                column(MAILBOX_ID).isEqualTo(bindMarker(MAILBOX_ID)))
             .build());
     }
 
@@ -391,28 +383,28 @@ public class CassandraMessageIdToImapUidDAO {
     }
 
     private CassandraMessageMetadata toComposedMessageIdWithMetadata(Row row) {
-        final CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID_LOWERCASE));
+        final CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID));
         return CassandraMessageMetadata.builder()
             .ids(ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(new ComposedMessageId(
-                    CassandraId.of(row.getUuid(MAILBOX_ID_LOWERCASE)),
+                    CassandraId.of(row.getUuid(MAILBOX_ID)),
                     messageId,
                     MessageUid.of(row.getLong(IMAP_UID))))
                 .flags(FlagsExtractor.getFlags(row))
                 .threadId(getThreadIdFromRow(row, messageId))
-                .modSeq(ModSeq.of(row.getLong(MOD_SEQ_LOWERCASE)))
+                .modSeq(ModSeq.of(row.getLong(MOD_SEQ)))
                 .build())
-            .bodyStartOctet(row.get(BODY_START_OCTET_LOWERCASE, Integer.class))
-            .internalDate(Optional.ofNullable(row.getInstant(INTERNAL_DATE_LOWERCASE))
+            .bodyStartOctet(row.get(BODY_START_OCTET, Integer.class))
+            .internalDate(Optional.ofNullable(row.getInstant(INTERNAL_DATE))
                 .map(Date::from))
-            .size(row.get(FULL_CONTENT_OCTETS_LOWERCASE, Long.class))
-            .headerContent(Optional.ofNullable(row.getString(HEADER_CONTENT_LOWERCASE))
+            .size(row.get(FULL_CONTENT_OCTETS, Long.class))
+            .headerContent(Optional.ofNullable(row.getString(HEADER_CONTENT))
                 .map(blobIdFactory::from))
             .build();
     }
 
     private ThreadId getThreadIdFromRow(Row row, MessageId messageId) {
-        UUID threadIdUUID = row.getUuid(THREAD_ID_LOWERCASE);
+        UUID threadIdUUID = row.getUuid(THREAD_ID);
         if (threadIdUUID == null) {
             return ThreadId.fromBaseMessageId(messageId);
         }
@@ -422,9 +414,9 @@ public class CassandraMessageIdToImapUidDAO {
     private BoundStatement selectStatement(CassandraMessageId messageId, Optional<CassandraId> mailboxId) {
         return mailboxId
             .map(cassandraId -> select.bind()
-                .setUuid(MESSAGE_ID_LOWERCASE, messageId.get())
-                .setUuid(MAILBOX_ID_LOWERCASE, cassandraId.asUuid()))
-            .orElseGet(() -> selectAll.bind().setUuid(MESSAGE_ID_LOWERCASE, messageId.get()));
+                .setUuid(MESSAGE_ID, messageId.get())
+                .setUuid(MAILBOX_ID, cassandraId.asUuid()))
+            .orElseGet(() -> selectAll.bind().setUuid(MESSAGE_ID, messageId.get()));
     }
 
     private BoundStatement setExecutionProfileIfNeeded(BoundStatement statement, JamesExecutionProfiles.ConsistencyChoice consistencyChoice) {
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
index 7a58ce946a..e20871266e 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/FlagsExtractor.java
@@ -27,6 +27,7 @@ import javax.mail.Flags;
 
 import org.apache.james.mailbox.cassandra.table.Flag;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 import com.datastax.oss.driver.api.core.cql.Row;
 import com.datastax.oss.driver.api.core.type.codec.TypeCodec;
 import com.datastax.oss.driver.api.core.type.codec.registry.CodecRegistry;
@@ -36,12 +37,12 @@ public class FlagsExtractor {
 
     public static Flags getFlags(Row row) {
         Flags flags = new Flags();
-        for (String flag : Flag.ALL_LOWERCASE) {
-            if (row.getBoolean(flag)) {
-                flags.add(Flag.JAVAX_MAIL_FLAG.get(flag));
+        for (CqlIdentifier cqlId : Flag.ALL_LOWERCASE) {
+            if (row.getBoolean(cqlId)) {
+                flags.add(Flag.JAVAX_MAIL_FLAG.get(cqlId));
             }
         }
-        row.get(Flag.USER_FLAGS_LOWERCASE, SET_OF_STRINGS_CODEC)
+        row.get(Flag.USER_FLAGS, SET_OF_STRINGS_CODEC)
             .forEach(flags::add);
         return flags;
     }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java
index 6f88c5b70b..68a85f3064 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/mail/utils/MailboxBaseTupleUtil.java
@@ -33,7 +33,7 @@ public class MailboxBaseTupleUtil {
     }
 
     public UdtValue createMailboxBaseUDT(String namespace, Username user) {
-        return typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE)
+        return typesProvider.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE.asCql(true))
             .newValue()
             .setString(CassandraMailboxTable.MailboxBase.NAMESPACE, namespace)
             .setString(CassandraMailboxTable.MailboxBase.USER, user.asString());
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
index e30cfea2f2..13457c012a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMailboxModule.java
@@ -32,7 +32,7 @@ import org.apache.james.mailbox.cassandra.table.CassandraMailboxTable;
 public interface CassandraMailboxModule {
     CassandraModule MODULE = CassandraModule.builder()
 
-        .type(CassandraMailboxTable.MAILBOX_BASE)
+        .type(CassandraMailboxTable.MAILBOX_BASE.asCql(true))
         .statement(statement -> statement
             .withField(CassandraMailboxTable.MailboxBase.NAMESPACE, TEXT)
             .withField(CassandraMailboxTable.MailboxBase.USER, TEXT))
@@ -44,7 +44,7 @@ public interface CassandraMailboxModule {
             .withLZ4Compression(8, 1))
         .statement(statement -> types -> statement
             .withPartitionKey(CassandraMailboxTable.ID, TIMEUUID)
-            .withColumn(CassandraMailboxTable.MAILBOX_BASE, types.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE))
+            .withColumn(CassandraMailboxTable.MAILBOX_BASE, types.getDefinedUserType(CassandraMailboxTable.MAILBOX_BASE.asCql(true)))
             .withColumn(CassandraMailboxTable.NAME, TEXT)
             .withColumn(CassandraMailboxTable.UIDVALIDITY, BIGINT))
 
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
index 5e57f99bab..96304e5af3 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/modules/CassandraMessageModule.java
@@ -132,12 +132,12 @@ public interface CassandraMessageModule {
             .withColumn(CassandraMessageV3Table.Properties.CONTENT_DISPOSITION_PARAMETERS, frozenMapOf(TEXT, TEXT))
             .withColumn(CassandraMessageV3Table.Properties.CONTENT_TYPE_PARAMETERS, frozenMapOf(TEXT, TEXT))
             .withColumn(CassandraMessageV3Table.ATTACHMENTS, listOf(SchemaBuilder.udt(CassandraMessageV3Table.ATTACHMENTS, true))))
-        .type(CassandraMessageV2Table.PROPERTIES)
+        .type(CassandraMessageV2Table.PROPERTIES.asCql(true))
         .statement(statement -> statement
             .withField(CassandraMessageV2Table.Properties.NAMESPACE, TEXT)
             .withField(CassandraMessageV2Table.Properties.NAME, TEXT)
             .withField(CassandraMessageV2Table.Properties.VALUE, TEXT))
-        .type(CassandraMessageV2Table.ATTACHMENTS)
+        .type(CassandraMessageV2Table.ATTACHMENTS.asCql(true))
         .statement(statement -> statement
             .withField(CassandraMessageV2Table.Attachments.ID, TEXT)
             .withField(CassandraMessageV2Table.Attachments.NAME, TEXT)
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLTable.java
index 4b8d8b252f..d6b68db521 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLTable.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraACLTable {
     String TABLE_NAME = "acl";
 
-    String ID = "id";
-    String ACL = "acl";
-    String VERSION = "version";
+    CqlIdentifier ID = CqlIdentifier.fromCql("id");
+    CqlIdentifier ACL = CqlIdentifier.fromCql("acl");
+    CqlIdentifier VERSION = CqlIdentifier.fromCql("version");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java
index 94d1ea1d14..3356f64b41 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraACLV2Table.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraACLV2Table {
     String TABLE_NAME = "aclv2";
 
-    String ID = "id";
-    String KEY = "key";
-    String RIGHTS = "rights";
+    CqlIdentifier ID = CqlIdentifier.fromCql("id");
+    CqlIdentifier KEY = CqlIdentifier.fromCql("key");
+    CqlIdentifier RIGHTS = CqlIdentifier.fromCql("rights");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java
index fcd11892ad..167a97bbb6 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAnnotationTable.java
@@ -19,15 +19,17 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraAnnotationTable {
     String TABLE_NAME = "annotation";
 
-    String MAILBOX_ID = "mailboxId";
-    String KEY = "key";
-    String VALUE = "value";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier KEY = CqlIdentifier.fromCql("key");
+    CqlIdentifier VALUE = CqlIdentifier.fromCql("value");
 
-    String GREATER_BIND_KEY = "greater_bind_key";
-    String LESSER_BIND_KEY = "lesser_bind_key";
+    CqlIdentifier GREATER_BIND_KEY = CqlIdentifier.fromCql("greater_bind_key");
+    CqlIdentifier LESSER_BIND_KEY = CqlIdentifier.fromCql("lesser_bind_key");
 
-    String[] SELECT_FIELDS = { KEY, VALUE };
+    CqlIdentifier[] SELECT_FIELDS = { KEY, VALUE };
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
index cb97028009..4d76ed1814 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraApplicableFlagTable.java
@@ -19,10 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraApplicableFlagTable {
 
     String TABLE_NAME = "applicableFlag";
-    String MAILBOX_ID = "mailboxId";
-
-    String[] FIELDS = { MAILBOX_ID, Flag.USER_FLAGS };
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentMessageIdTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentMessageIdTable.java
index 42655fb0aa..a6a5f1f976 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentMessageIdTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentMessageIdTable.java
@@ -19,12 +19,14 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraAttachmentMessageIdTable {
 
     String TABLE_NAME = "attachmentMessageId";
-    String ATTACHMENT_ID_AS_UUID = "attachmentIdAsUUID";
-    String ATTACHMENT_ID = "attachmentId";
-    String MESSAGE_ID = "messageId";
-    String[] FIELDS = { ATTACHMENT_ID_AS_UUID, ATTACHMENT_ID, MESSAGE_ID };
+    CqlIdentifier ATTACHMENT_ID_AS_UUID = CqlIdentifier.fromCql("attachmentIdAsUUID");
+    CqlIdentifier ATTACHMENT_ID = CqlIdentifier.fromCql("attachmentId");
+    CqlIdentifier MESSAGE_ID = CqlIdentifier.fromCql("messageId");
+    CqlIdentifier[] FIELDS = { ATTACHMENT_ID_AS_UUID, ATTACHMENT_ID, MESSAGE_ID };
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentOwnerTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentOwnerTable.java
index ff4b1a0541..07ea43126d 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentOwnerTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentOwnerTable.java
@@ -19,11 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraAttachmentOwnerTable {
 
     String TABLE_NAME = "attachmentOwners";
-    String ID = "id";
-    String OWNER = "owner";
-    String[] FIELDS = { ID, OWNER };
+    CqlIdentifier ID = CqlIdentifier.fromCql("id");
+    CqlIdentifier OWNER = CqlIdentifier.fromCql("owner");
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java
index 6e39068d10..8a509aaf2b 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraAttachmentV2Table.java
@@ -19,15 +19,17 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraAttachmentV2Table {
 
     String TABLE_NAME = "attachmentV2";
-    String ID_AS_UUID = "idAsUUID";
-    String ID = "id";
-    String BLOB_ID = "blobId";
-    String MESSAGE_ID = "message_id";
-    String TYPE = "type";
-    String SIZE = "size";
-    String[] FIELDS = { ID, BLOB_ID, MESSAGE_ID, TYPE, SIZE };
+    CqlIdentifier ID_AS_UUID = CqlIdentifier.fromCql("idAsUUID");
+    CqlIdentifier ID = CqlIdentifier.fromCql("id");
+    CqlIdentifier BLOB_ID = CqlIdentifier.fromCql("blobId");
+    CqlIdentifier MESSAGE_ID = CqlIdentifier.fromCql("message_id");
+    CqlIdentifier TYPE = CqlIdentifier.fromCql("type");
+    CqlIdentifier SIZE = CqlIdentifier.fromCql("size");
+    CqlIdentifier[] FIELDS = { ID, BLOB_ID, MESSAGE_ID, TYPE, SIZE };
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java
index 09a02809ba..2e5970e568 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraCurrentQuota.java
@@ -19,11 +19,13 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraCurrentQuota {
 
     String TABLE_NAME = "currentQuota";
 
-    String QUOTA_ROOT = "quotaRoot";
-    String MESSAGE_COUNT = "messageCount";
-    String STORAGE = "storage";
+    CqlIdentifier QUOTA_ROOT = CqlIdentifier.fromCql("quotaRoot");
+    CqlIdentifier MESSAGE_COUNT = CqlIdentifier.fromCql("messageCount");
+    CqlIdentifier STORAGE = CqlIdentifier.fromCql("storage");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java
index b4773fb4d2..90a1657aeb 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDeletedMessageTable.java
@@ -19,9 +19,11 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraDeletedMessageTable {
     String TABLE_NAME = "messageDeleted";
 
-    String MAILBOX_ID = "mailboxId";
-    String UID = "uid";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier UID = CqlIdentifier.fromCql("uid");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java
index 66372f8fa5..a2145eb70f 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraDomainMaxQuota.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraDomainMaxQuota {
     String TABLE_NAME = "domainMaxQuota";
 
-    String DOMAIN = "domain";
-    String MESSAGE_COUNT = "maxMessageCount";
-    String STORAGE = "maxStorage";
+    CqlIdentifier DOMAIN = CqlIdentifier.fromCql("domain");
+    CqlIdentifier MESSAGE_COUNT = CqlIdentifier.fromCql("maxMessageCount");
+    CqlIdentifier STORAGE = CqlIdentifier.fromCql("maxStorage");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java
index bf6583a19c..d753866390 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraFirstUnseenTable.java
@@ -19,9 +19,11 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraFirstUnseenTable {
     String TABLE_NAME = "firstUnseen";
 
-    String MAILBOX_ID = "mailboxId";
-    String UID = "uid";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier UID = CqlIdentifier.fromCql("uid");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java
index f366871f05..29f9f26345 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraGlobalMaxQuota.java
@@ -19,12 +19,14 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraGlobalMaxQuota {
     String TABLE_NAME = "defaultMaxQuota2";
 
-    String KEY = "key";
+    CqlIdentifier KEY = CqlIdentifier.fromCql("key");
     String VALUE = "value";
 
-    String MESSAGE = "message";
-    String STORAGE = "storage";
+    CqlIdentifier MESSAGE = CqlIdentifier.fromCql("message");
+    CqlIdentifier STORAGE = CqlIdentifier.fromCql("storage");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java
index f48840638d..404d79076c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxCountersTable.java
@@ -19,9 +19,11 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMailboxCountersTable {
     String TABLE_NAME = "mailboxCounters";
-    String MAILBOX_ID = "mailboxId";
-    String COUNT = "count";
-    String UNSEEN = "unseen";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier COUNT = CqlIdentifier.fromCql("count");
+    CqlIdentifier UNSEEN = CqlIdentifier.fromCql("unseen");
 }
\ No newline at end of file
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathTable.java
deleted file mode 100644
index efc6168b8e..0000000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathTable.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.cassandra.table;
-
-public interface CassandraMailboxPathTable {
-
-    String TABLE_NAME = "mailboxPath";
-
-    String NAMESPACE_AND_USER = "namespaceAndUser";
-
-    String MAILBOX_NAME = "mailboxName";
-
-    String MAILBOX_ID = "mailboxId";
-
-    String[] FIELDS = { NAMESPACE_AND_USER, MAILBOX_NAME, MAILBOX_ID};
-
-}
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV2Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV2Table.java
deleted file mode 100644
index 6788606fbe..0000000000
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV2Table.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-
-package org.apache.james.mailbox.cassandra.table;
-
-public interface CassandraMailboxPathV2Table {
-
-    String TABLE_NAME = "mailboxPathV2";
-
-    String NAMESPACE = "namespace";
-
-    String USER = "user";
-
-    String MAILBOX_NAME = "mailboxName";
-
-    String MAILBOX_ID = "mailboxId";
-
-    String[] FIELDS = { NAMESPACE, USER, MAILBOX_NAME, MAILBOX_ID};
-
-}
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java
index 078824f4d1..093bd52697 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxPathV3Table.java
@@ -19,19 +19,21 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMailboxPathV3Table {
 
     String TABLE_NAME = "mailboxPathV3";
 
-    String NAMESPACE = "namespace";
+    CqlIdentifier NAMESPACE = CqlIdentifier.fromCql("namespace");
 
-    String USER = "user";
+    CqlIdentifier USER = CqlIdentifier.fromCql("user");
 
-    String MAILBOX_NAME = "mailboxName";
+    CqlIdentifier MAILBOX_NAME = CqlIdentifier.fromCql("mailboxName");
 
-    String MAILBOX_ID = "mailboxId";
-    String UIDVALIDITY = "uidvalidity";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier UIDVALIDITY = CqlIdentifier.fromCql("uidvalidity");
 
-    String[] FIELDS = { NAMESPACE, USER, MAILBOX_NAME, MAILBOX_ID, UIDVALIDITY};
+    CqlIdentifier[] FIELDS = { NAMESPACE, USER, MAILBOX_NAME, MAILBOX_ID, UIDVALIDITY};
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java
index d729ae4728..b239d4ba96 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxRecentsTable.java
@@ -19,8 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMailboxRecentsTable {
     String TABLE_NAME = "mailboxRecents";
-    String MAILBOX_ID = "mailboxId";
-    String RECENT_MESSAGE_UID = "recent_mesage_uid";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier RECENT_MESSAGE_UID = CqlIdentifier.fromCql("recent_mesage_uid");
 }
\ No newline at end of file
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java
index e301552be0..faa06df3ca 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMailboxTable.java
@@ -19,17 +19,18 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraMailboxTable {
     String TABLE_NAME = "mailbox";
-    String ID = "id";
-    String MAILBOX_BASE = "mailboxbase";
-    String UIDVALIDITY = "uidvalidity";
-    String NAME = "name";
-    String[] FIELDS = { ID, MAILBOX_BASE, UIDVALIDITY, NAME };
+    CqlIdentifier ID = CqlIdentifier.fromCql("id");
+    CqlIdentifier MAILBOX_BASE = CqlIdentifier.fromCql("mailboxbase");
+    CqlIdentifier UIDVALIDITY = CqlIdentifier.fromCql("uidvalidity");
+    CqlIdentifier NAME = CqlIdentifier.fromCql("name");
+    CqlIdentifier[] FIELDS = { ID, MAILBOX_BASE, UIDVALIDITY, NAME };
 
     interface MailboxBase {
-        String USER = "user";
-        String NAMESPACE = "namespace";
+        CqlIdentifier USER = CqlIdentifier.fromCql("user");
+        CqlIdentifier NAMESPACE = CqlIdentifier.fromCql("namespace");
     }
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java
index 4fba65cb5f..8cb9c6a5fd 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMaxQuota.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMaxQuota {
     String TABLE_NAME = "maxQuota";
 
-    String QUOTA_ROOT = "quotaRoot";
-    String MESSAGE_COUNT = "maxMessageCount";
-    String STORAGE = "maxStorage";
+    CqlIdentifier QUOTA_ROOT = CqlIdentifier.fromCql("quotaRoot");
+    CqlIdentifier MESSAGE_COUNT = CqlIdentifier.fromCql("maxMessageCount");
+    CqlIdentifier STORAGE = CqlIdentifier.fromCql("maxStorage");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java
index a3ad5e6abf..6ab2d26bd2 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIdTable.java
@@ -19,18 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.IMAP_UID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraMessageIdTable {
-
     String TABLE_NAME = "messageIdTable";
 
-    String MOD_SEQ = "modSeq";
-
-    String THREAD_ID = "threadId";
+    CqlIdentifier MOD_SEQ = CqlIdentifier.fromCql("modSeq");
 
-    String[] FIELDS = { MESSAGE_ID, MAILBOX_ID, IMAP_UID, THREAD_ID, MOD_SEQ,
-            Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS};
+    CqlIdentifier THREAD_ID = CqlIdentifier.fromCql("threadId");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java
index 8ab4e90dc8..8d40435fbd 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageIds.java
@@ -19,13 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import java.util.Locale;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraMessageIds {
-
-    String MESSAGE_ID = "messageId";
-    String MESSAGE_ID_LOWERCASE = MESSAGE_ID.toLowerCase(Locale.US);
-    String MAILBOX_ID = "mailboxId";
-    String MAILBOX_ID_LOWERCASE = MAILBOX_ID.toLowerCase(Locale.US);
-    String IMAP_UID = "uid";
+    CqlIdentifier MESSAGE_ID = CqlIdentifier.fromCql("messageId");
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier IMAP_UID = CqlIdentifier.fromCql("uid");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java
index 41a6df0438..21b22b6dd0 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageModseqTable.java
@@ -19,8 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMessageModseqTable {
     String TABLE_NAME = "modseq";
-    String MAILBOX_ID = "mailboxId";
-    String NEXT_MODSEQ = "nextModseq";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier NEXT_MODSEQ = CqlIdentifier.fromCql("nextModseq");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java
index 0566e2bf41..abf696ba02 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageUidTable.java
@@ -19,8 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMessageUidTable {
     String TABLE_NAME = "messageCounter";
-    String MAILBOX_ID = "mailboxId";
-    String NEXT_UID = "nextUid";
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxId");
+    CqlIdentifier NEXT_UID = CqlIdentifier.fromCql("nextUid");
 }
\ No newline at end of file
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV2Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV2Table.java
index 8ceb86ae5b..3a32ccef84 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV2Table.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV2Table.java
@@ -19,30 +19,32 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraMessageV2Table {
 
     String TABLE_NAME = "messageV2";
-    String INTERNAL_DATE = "internalDate";
-    String BODY_START_OCTET = "bodyStartOctet";
-    String FULL_CONTENT_OCTETS = "fullContentOctets";
-    String BODY_OCTECTS = "bodyOctets";
-    String TEXTUAL_LINE_COUNT = "textualLineCount";
-    String BODY_CONTENT = "bodyContent";
-    String HEADER_CONTENT = "headerContent";
-    String PROPERTIES = "properties";
-    String ATTACHMENTS = "attachments";
+    CqlIdentifier INTERNAL_DATE = CqlIdentifier.fromCql("internalDate");
+    CqlIdentifier BODY_START_OCTET = CqlIdentifier.fromCql("bodyStartOctet");
+    CqlIdentifier FULL_CONTENT_OCTETS = CqlIdentifier.fromCql("fullContentOctets");
+    CqlIdentifier BODY_OCTECTS = CqlIdentifier.fromCql("bodyOctets");
+    CqlIdentifier TEXTUAL_LINE_COUNT = CqlIdentifier.fromCql("textualLineCount");
+    CqlIdentifier BODY_CONTENT = CqlIdentifier.fromCql("bodyContent");
+    CqlIdentifier HEADER_CONTENT = CqlIdentifier.fromCql("headerContent");
+    CqlIdentifier PROPERTIES = CqlIdentifier.fromCql("properties");
+    CqlIdentifier ATTACHMENTS = CqlIdentifier.fromCql("attachments");
 
     interface Properties {
-        String NAMESPACE = "namespace";
-        String NAME = "name";
-        String VALUE = "value";
+        CqlIdentifier NAMESPACE = CqlIdentifier.fromCql("namespace");
+        CqlIdentifier NAME = CqlIdentifier.fromCql("name");
+        CqlIdentifier VALUE = CqlIdentifier.fromCql("value");
     }
 
     interface Attachments {
-        String ID = "id";
-        String NAME = "name";
-        String CID = "cid";
-        String IS_INLINE = "isInline";
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier NAME = CqlIdentifier.fromCql("name");
+        CqlIdentifier CID = CqlIdentifier.fromCql("cid");
+        CqlIdentifier IS_INLINE = CqlIdentifier.fromCql("isInline");
     }
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java
index 52a23d4ec6..a597ce0b57 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraMessageV3Table.java
@@ -19,45 +19,38 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import java.util.Locale;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraMessageV3Table {
-
     String TABLE_NAME = "messageV3";
-    String INTERNAL_DATE = "internalDate";
-    String INTERNAL_DATE_LOWERCASE = INTERNAL_DATE.toLowerCase(Locale.US);
-    String BODY_START_OCTET = "bodyStartOctet";
-    String BODY_START_OCTET_LOWERCASE = BODY_START_OCTET.toLowerCase(Locale.US);
-    String FULL_CONTENT_OCTETS = "fullContentOctets";
-    String FULL_CONTENT_OCTETS_LOWERCASE = FULL_CONTENT_OCTETS.toLowerCase(Locale.US);
-    String BODY_OCTECTS = "bodyOctets";
-    String TEXTUAL_LINE_COUNT = "textualLineCount";
-    String TEXTUAL_LINE_COUNT_LOWERCASE = TEXTUAL_LINE_COUNT.toLowerCase(Locale.US);
-    String BODY_CONTENT = "bodyContent";
-    String BODY_CONTENT_LOWERCASE = BODY_CONTENT.toLowerCase(Locale.US);
-    String HEADER_CONTENT = "headerContent";
-    String HEADER_CONTENT_LOWERCASE = HEADER_CONTENT.toLowerCase(Locale.US);
-    String ATTACHMENTS = "attachments";
+
+    CqlIdentifier INTERNAL_DATE = CqlIdentifier.fromCql("internalDate");
+    CqlIdentifier BODY_START_OCTET = CqlIdentifier.fromCql("bodyStartOctet");
+    CqlIdentifier FULL_CONTENT_OCTETS = CqlIdentifier.fromCql("fullContentOctets");
+    CqlIdentifier BODY_OCTECTS = CqlIdentifier.fromCql("bodyOctets");
+    CqlIdentifier TEXTUAL_LINE_COUNT = CqlIdentifier.fromCql("textualLineCount");
+    CqlIdentifier BODY_CONTENT = CqlIdentifier.fromCql("bodyContent");
+    CqlIdentifier HEADER_CONTENT = CqlIdentifier.fromCql("headerContent");
+    CqlIdentifier ATTACHMENTS = CqlIdentifier.fromCql("attachments");
 
     interface Properties {
-        String MEDIA_TYPE = "mediaType";
-        String SUB_TYPE = "subType";
-        String CONTENT_ID = "contentId";
-        String CONTENT_LOCATION = "contentLocation";
-        String CONTENT_DESCRIPTION = "contentDescription";
-        String CONTENT_TRANSFER_ENCODING = "contentTransferEncoding";
-        String CONTENT_DISPOSITION_TYPE = "contentDispositionType";
-        String CONTENT_DISPOSITION_PARAMETERS = "contentDispositionParameters";
-        String CONTENT_TYPE_PARAMETERS = "contentTypeParameters";
-        String CONTENT_MD5 = "contentMd5";
-        String CONTENT_LANGUAGE = "contentLanguage";
+        CqlIdentifier MEDIA_TYPE = CqlIdentifier.fromCql("mediaType");
+        CqlIdentifier SUB_TYPE = CqlIdentifier.fromCql("subType");
+        CqlIdentifier CONTENT_ID = CqlIdentifier.fromCql("contentId");
+        CqlIdentifier CONTENT_LOCATION = CqlIdentifier.fromCql("contentLocation");
+        CqlIdentifier CONTENT_DESCRIPTION = CqlIdentifier.fromCql("contentDescription");
+        CqlIdentifier CONTENT_TRANSFER_ENCODING = CqlIdentifier.fromCql("contentTransferEncoding");
+        CqlIdentifier CONTENT_DISPOSITION_TYPE = CqlIdentifier.fromCql("contentDispositionType");
+        CqlIdentifier CONTENT_DISPOSITION_PARAMETERS = CqlIdentifier.fromCql("contentDispositionParameters");
+        CqlIdentifier CONTENT_TYPE_PARAMETERS = CqlIdentifier.fromCql("contentTypeParameters");
+        CqlIdentifier CONTENT_MD5 = CqlIdentifier.fromCql("contentMd5");
+        CqlIdentifier CONTENT_LANGUAGE = CqlIdentifier.fromCql("contentLanguage");
     }
 
     interface Attachments {
-        String ID = "id";
-        String NAME = "name";
-        String CID = "cid";
-        String IS_INLINE = "isInline";
+        CqlIdentifier ID = CqlIdentifier.fromCql("id");
+        CqlIdentifier NAME = CqlIdentifier.fromCql("name");
+        CqlIdentifier CID = CqlIdentifier.fromCql("cid");
+        CqlIdentifier IS_INLINE = CqlIdentifier.fromCql("isInline");
     }
-
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java
index 91b2d12cb2..7ea4079c6c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraSubscriptionTable.java
@@ -19,11 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraSubscriptionTable {
 
     String TABLE_NAME = "subscription";
-    String USER = "user";
-    String MAILBOX = "mailbox";
-    String[] FIELDS = { MAILBOX, USER };
+    CqlIdentifier USER = CqlIdentifier.fromCql("user");
+    CqlIdentifier MAILBOX = CqlIdentifier.fromCql("mailbox");
 
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java
index 7a8c1b37c5..53275ade14 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadLookupTable.java
@@ -19,13 +19,10 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraThreadTable.USERNAME;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraThreadLookupTable {
     String TABLE_NAME = "threadLookupTable";
 
-    String MIME_MESSAGE_IDS = "mimeMessageIds";
-
-    String[] FIELDS = {MESSAGE_ID, USERNAME, MIME_MESSAGE_IDS};
+    CqlIdentifier MIME_MESSAGE_IDS = CqlIdentifier.fromCql("mimeMessageIds");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java
index 0db322a150..b437a9f35c 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraThreadTable.java
@@ -19,17 +19,14 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIdTable.THREAD_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface CassandraThreadTable {
     String TABLE_NAME = "threadTable";
 
-    String USERNAME = "username";
+    CqlIdentifier USERNAME = CqlIdentifier.fromCql("username");
 
-    String MIME_MESSAGE_ID = "mimeMessageId";
+    CqlIdentifier MIME_MESSAGE_ID = CqlIdentifier.fromCql("mimeMessageId");
 
-    String BASE_SUBJECT = "baseSubject";
-
-    String[] FIELDS = {MESSAGE_ID, THREAD_ID, USERNAME, MIME_MESSAGE_ID, BASE_SUBJECT};
+    CqlIdentifier BASE_SUBJECT = CqlIdentifier.fromCql("baseSubject");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java
index 65dff9fa24..d575d76151 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/CassandraUserMailboxRightsTable.java
@@ -19,10 +19,12 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
+
 public interface CassandraUserMailboxRightsTable {
     String TABLE_NAME = "UserMailboxACL";
 
-    String USER_NAME = "userName";
-    String MAILBOX_ID = "mailboxid";
-    String RIGHTS = "rights";
+    CqlIdentifier USER_NAME = CqlIdentifier.fromCql("userName");
+    CqlIdentifier MAILBOX_ID = CqlIdentifier.fromCql("mailboxid");
+    CqlIdentifier RIGHTS = CqlIdentifier.fromCql("rights");
 }
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java
index 0788b5dfc6..e0dd53208a 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/Flag.java
@@ -18,41 +18,38 @@
  ****************************************************************/
 package org.apache.james.mailbox.cassandra.table;
 
-import java.util.Locale;
-
 import javax.mail.Flags;
 
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 import com.google.common.collect.ImmutableMap;
 
 public interface Flag {
+    CqlIdentifier ANSWERED = CqlIdentifier.fromCql("flagAnswered");
+    CqlIdentifier DELETED = CqlIdentifier.fromCql("flagDeleted");
+    CqlIdentifier DRAFT = CqlIdentifier.fromCql("flagDraft");
+    CqlIdentifier RECENT = CqlIdentifier.fromCql("flagRecent");
+    CqlIdentifier SEEN = CqlIdentifier.fromCql("flagSeen");
+    CqlIdentifier FLAGGED = CqlIdentifier.fromCql("flagFlagged");
+    CqlIdentifier USER = CqlIdentifier.fromCql("flagUser");
+    CqlIdentifier USER_FLAGS = CqlIdentifier.fromCql("userFlags");
 
-    String ANSWERED = "flagAnswered";
-    String DELETED = "flagDeleted";
-    String DRAFT = "flagDraft";
-    String RECENT = "flagRecent";
-    String SEEN = "flagSeen";
-    String FLAGGED = "flagFlagged";
-    String USER = "flagUser";
-    String USER_FLAGS = "userFlags";
-    String USER_FLAGS_LOWERCASE = USER_FLAGS.toLowerCase(Locale.US);
-
-    String[] ALL_LOWERCASE = {
-        ANSWERED.toLowerCase(Locale.US),
-        DELETED.toLowerCase(Locale.US),
-        DRAFT.toLowerCase(Locale.US),
-        RECENT.toLowerCase(Locale.US),
-        SEEN.toLowerCase(Locale.US),
-        FLAGGED.toLowerCase(Locale.US),
-        USER.toLowerCase(Locale.US)
+    CqlIdentifier[] ALL_LOWERCASE = {
+        ANSWERED,
+        DELETED,
+        DRAFT,
+        RECENT,
+        SEEN,
+        FLAGGED,
+        USER
     };
 
-    ImmutableMap<String, Flags.Flag> JAVAX_MAIL_FLAG = ImmutableMap.<String, Flags.Flag>builder()
-        .put(ANSWERED.toLowerCase(Locale.US), Flags.Flag.ANSWERED)
-        .put(DELETED.toLowerCase(Locale.US), Flags.Flag.DELETED)
-        .put(DRAFT.toLowerCase(Locale.US), Flags.Flag.DRAFT)
-        .put(RECENT.toLowerCase(Locale.US), Flags.Flag.RECENT)
-        .put(SEEN.toLowerCase(Locale.US), Flags.Flag.SEEN)
-        .put(FLAGGED.toLowerCase(Locale.US), Flags.Flag.FLAGGED)
-        .put(USER.toLowerCase(Locale.US), Flags.Flag.USER)
+    ImmutableMap<CqlIdentifier, Flags.Flag> JAVAX_MAIL_FLAG = ImmutableMap.<CqlIdentifier, Flags.Flag>builder()
+        .put(ANSWERED, Flags.Flag.ANSWERED)
+        .put(DELETED, Flags.Flag.DELETED)
+        .put(DRAFT, Flags.Flag.DRAFT)
+        .put(RECENT, Flags.Flag.RECENT)
+        .put(SEEN, Flags.Flag.SEEN)
+        .put(FLAGGED, Flags.Flag.FLAGGED)
+        .put(USER, Flags.Flag.USER)
         .build();
 }
\ No newline at end of file
diff --git a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java
index df1dd3c1ac..27884a3ae8 100644
--- a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java
+++ b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/table/MessageIdToImapUid.java
@@ -19,22 +19,13 @@
 
 package org.apache.james.mailbox.cassandra.table;
 
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.IMAP_UID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MAILBOX_ID;
-import static org.apache.james.mailbox.cassandra.table.CassandraMessageIds.MESSAGE_ID;
-
-import java.util.Locale;
+import com.datastax.oss.driver.api.core.CqlIdentifier;
 
 public interface MessageIdToImapUid {
 
     String TABLE_NAME = "imapUidTable";
 
-    String MOD_SEQ = "modSeq";
-    String MOD_SEQ_LOWERCASE = MOD_SEQ.toLowerCase(Locale.US);
-
-    String THREAD_ID = "threadId";
-    String THREAD_ID_LOWERCASE = THREAD_ID.toLowerCase(Locale.US);
+    CqlIdentifier MOD_SEQ = CqlIdentifier.fromCql("modSeq");
 
-    String[] FIELDS = { MESSAGE_ID, MAILBOX_ID, IMAP_UID, THREAD_ID, MOD_SEQ,
-            Flag.ANSWERED, Flag.DELETED, Flag.DRAFT, Flag.FLAGGED, Flag.RECENT, Flag.SEEN, Flag.USER, Flag.USER_FLAGS };
+    CqlIdentifier THREAD_ID = CqlIdentifier.fromCql("threadId");
 }
diff --git a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java
index ad005d037b..6f76a71fef 100644
--- a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java
+++ b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/mail/CassandraMessageIdDAOTest.java
@@ -36,7 +36,6 @@ import org.apache.james.mailbox.ModSeq;
 import org.apache.james.mailbox.cassandra.ids.CassandraId;
 import org.apache.james.mailbox.cassandra.ids.CassandraMessageId;
 import org.apache.james.mailbox.cassandra.modules.CassandraMessageModule;
-import org.apache.james.mailbox.cassandra.table.Flag;
 import org.apache.james.mailbox.model.ComposedMessageId;
 import org.apache.james.mailbox.model.ComposedMessageIdWithMetaData;
 import org.apache.james.mailbox.model.MessageRange;
@@ -122,7 +121,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData metadata = ComposedMessageIdWithMetaData.builder()
             .composedMessageId(new ComposedMessageId(mailboxId, messageId, messageUid))
-            .flags(new Flags(Flag.ANSWERED))
+            .flags(new Flags(Flags.Flag.ANSWERED))
             .modSeq(ModSeq.of(2))
             .threadId(ThreadId.fromBaseMessageId(messageId))
             .build();
@@ -273,7 +272,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.ANSWERED))
+                .flags(new Flags(Flags.Flag.ANSWERED))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -315,7 +314,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.DELETED))
+                .flags(new Flags(Flags.Flag.DELETED))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -357,7 +356,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.DRAFT))
+                .flags(new Flags(Flags.Flag.DRAFT))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -399,7 +398,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.FLAGGED))
+                .flags(new Flags(Flags.Flag.FLAGGED))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -441,7 +440,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.RECENT))
+                .flags(new Flags(Flags.Flag.RECENT))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -483,7 +482,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.SEEN))
+                .flags(new Flags(Flags.Flag.SEEN))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();
@@ -525,7 +524,7 @@ class CassandraMessageIdDAOTest {
 
         ComposedMessageIdWithMetaData expectedComposedMessageId = ComposedMessageIdWithMetaData.builder()
                 .composedMessageId(composedMessageId)
-                .flags(new Flags(Flag.USER))
+                .flags(new Flags(Flags.Flag.USER))
                 .modSeq(ModSeq.of(2))
                 .threadId(ThreadId.fromBaseMessageId(messageId))
                 .build();


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org