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

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


The following commit(s) were added to refs/heads/master by this push:
     new 0ecbadb0e4 JAMES-4123 Improvment for deleted search override: handle 
ALL criterion
0ecbadb0e4 is described below

commit 0ecbadb0e42984982b7ac4889d5d2acc769a48c1
Author: Benoit TELLIER <[email protected]>
AuthorDate: Thu Apr 23 10:11:18 2026 +0200

    JAMES-4123 Improvment for deleted search override: handle ALL criterion
---
 .../search/DeletedWithRangeSearchOverride.java     | 16 +++++------
 .../search/DeletedWithRangeSearchOverrideTest.java | 31 ++++++++++++++++++++++
 2 files changed, 38 insertions(+), 9 deletions(-)

diff --git 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
index bf486c7d10..560d090641 100644
--- 
a/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
+++ 
b/mailbox/cassandra/src/main/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverride.java
@@ -48,22 +48,20 @@ public class DeletedWithRangeSearchOverride implements 
ListeningMessageSearchInd
         return searchQuery.getCriteria().size() == 2
             && 
searchQuery.getCriteria().contains(SearchQuery.flagIsSet(Flags.Flag.DELETED))
             && searchQuery.getCriteria().stream()
-                .anyMatch(criterion -> criterion instanceof 
SearchQuery.UidCriterion)
+                .anyMatch(criterion -> criterion instanceof 
SearchQuery.UidCriterion
+                    || criterion instanceof SearchQuery.AllCriterion)
             && searchQuery.getSorts().equals(SearchQuery.DEFAULT_SORTS);
     }
 
     @Override
     public Flux<MessageUid> search(MailboxSession session, Mailbox mailbox, 
SearchQuery searchQuery) {
-        SearchQuery.UidCriterion uidArgument = 
searchQuery.getCriteria().stream()
+        return searchQuery.getCriteria().stream()
             .filter(criterion -> criterion instanceof SearchQuery.UidCriterion)
             .map(SearchQuery.UidCriterion.class::cast)
             .findAny()
-            .orElseThrow(() -> new RuntimeException("Missing Uid argument"));
-
-        SearchQuery.UidRange[] uidRanges = 
uidArgument.getOperator().getRange();
-
-        return Flux.fromIterable(ImmutableList.copyOf(uidRanges))
-            .concatMap(range -> dao.retrieveDeletedMessage((CassandraId) 
mailbox.getMailboxId(),
-                MessageRange.range(range.getLowValue(), 
range.getHighValue())));
+            .map(uidCriterion -> 
Flux.fromIterable(ImmutableList.copyOf(uidCriterion.getOperator().getRange()))
+                .concatMap(range -> dao.retrieveDeletedMessage((CassandraId) 
mailbox.getMailboxId(),
+                    MessageRange.range(range.getLowValue(), 
range.getHighValue()))))
+            .orElseGet(() -> dao.retrieveDeletedMessage((CassandraId) 
mailbox.getMailboxId(), MessageRange.all()));
     }
 }
diff --git 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
index 1e666b6d53..c6c997be78 100644
--- 
a/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
+++ 
b/mailbox/cassandra/src/test/java/org/apache/james/mailbox/cassandra/search/DeletedWithRangeSearchOverrideTest.java
@@ -74,6 +74,18 @@ class DeletedWithRangeSearchOverrideTest {
             .isTrue();
     }
 
+    @Test
+    void deletedWithAllQueryShouldBeApplicable() {
+        assertThat(testee.applicable(
+            SearchQuery.builder()
+                .andCriteria(SearchQuery.flagIsSet(DELETED))
+                .andCriteria(SearchQuery.all())
+                .sorts(DEFAULT_SORTS)
+                .build(),
+            MAILBOX_SESSION))
+            .isTrue();
+    }
+
     @Test
     void deletedQueryShouldNotBeApplicable() {
         assertThat(testee.applicable(
@@ -129,4 +141,23 @@ class DeletedWithRangeSearchOverrideTest {
                 .build()).collectList().block())
             .containsOnly(messageUid2, messageUid3, messageUid4);
     }
+
+    @Test
+    void searchWithAllShouldReturnAllMailboxEntries() {
+        MessageUid messageUid = MessageUid.of(1);
+        MessageUid messageUid2 = MessageUid.of(2);
+        MessageUid messageUid3 = MessageUid.of(3);
+
+        dao.addDeleted((CassandraId) MAILBOX.getMailboxId(), 
messageUid).block();
+        dao.addDeleted((CassandraId) MAILBOX.getMailboxId(), 
messageUid2).block();
+        dao.addDeleted((CassandraId) MAILBOX.getMailboxId(), 
messageUid3).block();
+
+        assertThat(testee.search(MAILBOX_SESSION, MAILBOX,
+            SearchQuery.builder()
+                .andCriteria(SearchQuery.flagIsSet(DELETED))
+                .andCriteria(SearchQuery.all())
+                .sorts(DEFAULT_SORTS)
+                .build()).collectList().block())
+            .containsOnly(messageUid, messageUid2, messageUid3);
+    }
 }
\ No newline at end of file


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

Reply via email to