dovecot-2.2: lib-storage: mail_search_args_simplify() handles no...
dovecot at dovecot.org
dovecot at dovecot.org
Tue Dec 8 11:31:22 UTC 2015
details: http://hg.dovecot.org/dovecot-2.2/rev/c75cb045e83f
changeset: 19491:c75cb045e83f
user: Timo Sirainen <tss at iki.fi>
date: Tue Dec 08 13:23:19 2015 +0200
description:
lib-storage: mail_search_args_simplify() handles now ALL better.
diffstat:
src/lib-storage/mail-search-args-simplify.c | 23 ++++++++++++++++++++++-
src/lib-storage/test-mail-search-args-simplify.c | 10 ++++++++++
2 files changed, 32 insertions(+), 1 deletions(-)
diffs (60 lines):
diff -r f894dbea7226 -r c75cb045e83f src/lib-storage/mail-search-args-simplify.c
--- a/src/lib-storage/mail-search-args-simplify.c Tue Dec 08 13:13:24 2015 +0200
+++ b/src/lib-storage/mail-search-args-simplify.c Tue Dec 08 13:23:19 2015 +0200
@@ -464,7 +464,7 @@
struct mail_search_arg **argsp, bool parent_and)
{
struct mail_search_simplify_ctx ctx;
- struct mail_search_arg *sub;
+ struct mail_search_arg *sub, **all_argsp = argsp;
bool merged;
memset(&ctx, 0, sizeof(ctx));
@@ -527,6 +527,27 @@
/* try to merge arguments */
merged = FALSE;
switch (args->type) {
+ case SEARCH_ALL: {
+ if (*all_argsp == args && args->next == NULL) {
+ /* this arg has no siblings - no merging */
+ break;
+ }
+ if ((parent_and && !args->match_not) ||
+ (!parent_and && args->match_not)) {
+ /* .. AND ALL ..
+ .. OR NOT ALL ..
+ This arg is irrelevant -> drop */
+ merged = TRUE;
+ break;
+ }
+ /* .. AND NOT ALL ..
+ .. OR ALL ..
+ The other args are irrelevant -> drop them */
+ *all_argsp = args;
+ args->next = NULL;
+ ctx.removals = TRUE;
+ break;
+ }
case SEARCH_FLAGS:
merged = mail_search_args_merge_flags(&ctx, args);
break;
diff -r f894dbea7226 -r c75cb045e83f src/lib-storage/test-mail-search-args-simplify.c
--- a/src/lib-storage/test-mail-search-args-simplify.c Tue Dec 08 13:13:24 2015 +0200
+++ b/src/lib-storage/test-mail-search-args-simplify.c Tue Dec 08 13:23:19 2015 +0200
@@ -11,6 +11,16 @@
const char *input;
const char *output;
} tests[] = {
+ { "ALL", "ALL" },
+ { "NOT ALL", "NOT ALL" },
+ { "ALL NOT ALL", "NOT ALL" },
+ { "ALL NOT ALL TEXT foo", "NOT ALL" },
+ { "OR ALL NOT ALL", "ALL" },
+ { "OR ALL OR NOT ALL TEXT foo", "ALL" },
+ { "OR ALL OR TEXT foo TEXT bar", "ALL" },
+ { "OR TEXT FOO ( ALL NOT ALL )", "TEXT FOO" },
+ { "TEXT FOO OR ALL NOT ALL", "TEXT FOO" },
+
{ "TEXT foo", "TEXT foo" },
{ "( TEXT foo )", "TEXT foo" },
{ "( ( TEXT foo ) )", "TEXT foo" },
More information about the dovecot-cvs
mailing list