# HG changeset patch # User Timo Sirainen # Date 1449572140 -7200 # Node ID a776ee107aa270e9c19e456dfa183c0f6a3cc98f # Parent ba0dd0dcc2230b3677fbc1e26bd59bd1bc7b6cae lib-storage: Code cleanup - moved BODY/TEXT "" optimization to mail_search_args_simplify() diff -r ba0dd0dcc223 -r a776ee107aa2 src/lib-storage/mail-search-args-simplify.c --- a/src/lib-storage/mail-search-args-simplify.c Tue Dec 08 12:24:42 2015 +0200 +++ b/src/lib-storage/mail-search-args-simplify.c Tue Dec 08 12:55:40 2015 +0200 @@ -540,11 +540,18 @@ case SEARCH_LARGER: merged = mail_search_args_merge_size(&ctx, args); break; + case SEARCH_BODY: + case SEARCH_TEXT: + if (args->value.str[0] == '\0') { + /* BODY "" and TEXT "" matches everything */ + args->type = SEARCH_ALL; + ctx.removals = TRUE; + break; + } + /* fall through */ case SEARCH_HEADER: case SEARCH_HEADER_ADDRESS: case SEARCH_HEADER_COMPRESS_LWSP: - case SEARCH_BODY: - case SEARCH_TEXT: merged = mail_search_args_merge_text(&ctx, args); break; default: diff -r ba0dd0dcc223 -r a776ee107aa2 src/lib-storage/mail-search-register-imap.c --- a/src/lib-storage/mail-search-register-imap.c Tue Dec 08 12:24:42 2015 +0200 +++ b/src/lib-storage/mail-search-register-imap.c Tue Dec 08 12:55:40 2015 +0200 @@ -277,12 +277,6 @@ if (mail_search_build_get_utf8(ctx, sarg->value.str, &sarg->value.str) < 0) return NULL; - - if (sarg->value.str[0] == '\0') { - /* optimization: BODY "" matches everything - (but do this only after checking charset and key are ok) */ - return mail_search_build_new(ctx, SEARCH_ALL); - } return sarg; } diff -r ba0dd0dcc223 -r a776ee107aa2 src/lib-storage/test-mail-search-args-simplify.c --- a/src/lib-storage/test-mail-search-args-simplify.c Tue Dec 08 12:24:42 2015 +0200 +++ b/src/lib-storage/test-mail-search-args-simplify.c Tue Dec 08 12:55:40 2015 +0200 @@ -97,6 +97,16 @@ { "TEXT foo BODY foo", "TEXT foo BODY foo" }, { "OR ( TEXT foo OR TEXT foo TEXT foo ) ( TEXT foo ( TEXT foo ) )", "TEXT foo" }, + /* value="" tests */ + { "HEADER foo ", "HEADER FOO \"\"" }, + { "SUBJECT ", "SUBJECT \"\"" }, + { "BODY ", "ALL" }, + { "TEXT ", "ALL" }, + { "HEADER foo .", "HEADER FOO ." }, + { "SUBJECT .", "SUBJECT ." }, + { "BODY .", "BODY ." }, + { "TEXT .", "TEXT ." }, + /* OR: drop redundant args */ { "OR ( TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" }, { "OR ( TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" },