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]