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 b78a414317cd7b26897d832e0a11cd31dc10c046 Author: Benoit TELLIER <[email protected]> AuthorDate: Mon Dec 1 15:59:07 2025 +0100 JAMES-3340 Leverage Optional for row -> ThreadId transformation --- .../cassandra/projections/CassandraEmailQueryView.java | 14 ++++---------- .../postgres/projections/PostgresEmailQueryViewDAO.java | 14 ++++---------- 2 files changed, 8 insertions(+), 20 deletions(-) diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java index 68d6dcfdf7..58bd2b3178 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/projections/CassandraEmailQueryView.java @@ -35,7 +35,7 @@ import static org.apache.james.jmap.cassandra.projections.table.CassandraEmailQu import java.time.Instant; import java.time.ZonedDateTime; -import java.util.UUID; +import java.util.Optional; import java.util.function.Function; import jakarta.inject.Inject; @@ -243,20 +243,14 @@ public class CassandraEmailQueryView implements EmailQueryView { private Function<Row, EmailEntry> asEmailEntry(CqlIdentifier dateField) { return (Row row) -> { CassandraMessageId messageId = CassandraMessageId.Factory.of(row.getUuid(MESSAGE_ID)); - ThreadId threadId = getThreadIdFromRow(row, messageId); + ThreadId threadId = Optional.ofNullable(row.get(CassandraEmailQueryViewTable.THREAD_ID, TypeCodecs.TIMEUUID)) + .map(uuid -> ThreadId.fromBaseMessageId(CassandraMessageId.Factory.of(uuid))) + .orElseGet(() -> ThreadId.fromBaseMessageId(messageId)); Instant messageDate = row.getInstant(dateField); return new EmailEntry(messageId, threadId, messageDate); }; } - private ThreadId getThreadIdFromRow(Row row, MessageId messageId) { - UUID threadIdUUID = row.get(CassandraEmailQueryViewTable.THREAD_ID, TypeCodecs.TIMEUUID); - if (threadIdUUID == null) { - return ThreadId.fromBaseMessageId(messageId); - } - return ThreadId.fromBaseMessageId(CassandraMessageId.Factory.of(threadIdUUID)); - } - @Override public Mono<Void> delete(MailboxId mailboxId, MessageId messageId) { CassandraMessageId cassandraMessageId = (CassandraMessageId) messageId; diff --git a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java index 6e05589ba7..aa49bfd174 100644 --- a/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java +++ b/server/data/data-jmap-postgres/src/main/java/org/apache/james/jmap/postgres/projections/PostgresEmailQueryViewDAO.java @@ -30,7 +30,7 @@ import static org.apache.james.jmap.postgres.projections.PostgresEmailQueryViewD import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZonedDateTime; -import java.util.UUID; +import java.util.Optional; import java.util.function.Function; import jakarta.inject.Inject; @@ -114,20 +114,14 @@ public class PostgresEmailQueryViewDAO { private Function<Record, EmailEntry> asEmailEntry(Field<OffsetDateTime> dateField) { return (Record record) -> { PostgresMessageId messageId = PostgresMessageId.Factory.of(record.get(MESSAGE_ID)); - ThreadId threadId = getThreadIdFromRecord(record, messageId); + ThreadId threadId = Optional.ofNullable(record.get(THREAD_ID)) + .map(uuid -> ThreadId.fromBaseMessageId(PostgresMessageId.Factory.of(uuid))) + .orElseGet(() -> ThreadId.fromBaseMessageId(messageId)); Instant messageDate = record.get(dateField).toInstant(); return new EmailEntry(messageId, threadId, messageDate); }; } - private ThreadId getThreadIdFromRecord(Record record, MessageId messageId) { - UUID threadIdUUID = record.get(THREAD_ID); - if (threadIdUUID == null) { - return ThreadId.fromBaseMessageId(messageId); - } - return ThreadId.fromBaseMessageId(PostgresMessageId.Factory.of(threadIdUUID)); - } - public Mono<Void> delete(PostgresMailboxId mailboxId, PostgresMessageId messageId) { return postgresExecutor.executeVoid(dslContext -> Mono.from(dslContext.deleteFrom(TABLE_NAME) .where(MAILBOX_ID.eq(mailboxId.asUuid())) --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
