changeset 19488:a776ee107aa2

lib-storage: Code cleanup - moved BODY/TEXT "" optimization to mail_search_args_simplify()
author Timo Sirainen <tss@iki.fi>
date Tue, 08 Dec 2015 12:55:40 +0200
parents ba0dd0dcc223
children 93bff1584e5e
files src/lib-storage/mail-search-args-simplify.c src/lib-storage/mail-search-register-imap.c src/lib-storage/test-mail-search-args-simplify.c
diffstat 3 files changed, 19 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- 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:
--- 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;
 }
 
--- 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" },