Mercurial > dovecot > core-2.2
changeset 22142:7181f55cae2c
lib-storage: mail_search_args_to_imap() - don't add parenthesis around OR
There's no need to write "(OR a b)" when "OR a b" works just the same.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 30 May 2017 23:53:44 +0300 |
parents | a37bfca0d2e4 |
children | 98e35a5592b1 |
files | src/lib-storage/mail-search-args-imap.c src/lib-storage/mail-search-mime.c src/lib-storage/test-mail-search-args-imap.c src/lib-storage/test-mail-search-args-simplify.c |
diffstat | 4 files changed, 50 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-storage/mail-search-args-imap.c Fri Jun 09 13:17:38 2017 +0300 +++ b/src/lib-storage/mail-search-args-imap.c Tue May 30 23:53:44 2017 +0300 @@ -20,7 +20,8 @@ { const struct mail_search_arg *arg; - str_append_c(dest, '('); + if (prefix[0] == '\0') + str_append_c(dest, '('); for (arg = args; arg != NULL; arg = arg->next) { if (arg->next != NULL) str_append(dest, prefix); @@ -29,7 +30,8 @@ if (arg->next != NULL) str_append_c(dest, ' '); } - str_append_c(dest, ')'); + if (prefix[0] == '\0') + str_append_c(dest, ')'); return TRUE; }
--- a/src/lib-storage/mail-search-mime.c Fri Jun 09 13:17:38 2017 +0300 +++ b/src/lib-storage/mail-search-mime.c Tue May 30 23:53:44 2017 +0300 @@ -355,7 +355,8 @@ { const struct mail_search_mime_arg *arg; - str_append_c(dest, '('); + if (prefix[0] == '\0') + str_append_c(dest, '('); for (arg = args; arg != NULL; arg = arg->next) { if (arg->next != NULL) str_append(dest, prefix); @@ -364,7 +365,8 @@ if (arg->next != NULL) str_append_c(dest, ' '); } - str_append_c(dest, ')'); + if (prefix[0] == '\0') + str_append_c(dest, ')'); return TRUE; }
--- a/src/lib-storage/test-mail-search-args-imap.c Fri Jun 09 13:17:38 2017 +0300 +++ b/src/lib-storage/test-mail-search-args-imap.c Tue May 30 23:53:44 2017 +0300 @@ -58,7 +58,7 @@ { "INTHREAD ORDEREDSUBJECT seen", "INTHREAD ORDEREDSUBJECT (SEEN)" }, { "INTHREAD REFS seen", "INTHREAD REFS (SEEN)" }, { "INTHREAD REFS ( OR text foo OR keyword bar seen )", - "INTHREAD REFS (((OR TEXT foo OR KEYWORD bar SEEN)))" }, + "INTHREAD REFS ((OR TEXT foo OR KEYWORD bar SEEN))" }, { "X-GUID foo", NULL }, { "X-MAILBOX foo", NULL }, { "X-REAL-UID 1,5:6,10:15", NULL }, @@ -80,13 +80,13 @@ "MIMEPART LOCATION http://www.dovecot.org" }, { "MIMEPART NOT MD5 373def35afde6378efd6172dfeadfd", NULL }, { "MIMEPART OR PARAM charset utf-8 TYPE text", - "MIMEPART (OR PARAM CHARSET utf-8 TYPE text)" }, + "MIMEPART OR PARAM CHARSET utf-8 TYPE text" }, { "MIMEPART ( OR SIZE LARGER 25 SIZE SMALLER 1023 )", - "MIMEPART (OR SIZE LARGER 25 SIZE SMALLER 1023)" }, + "MIMEPART OR SIZE LARGER 25 SIZE SMALLER 1023" }, { "MIMEPART ( TYPE video SUBTYPE mpeg )", "MIMEPART (TYPE video SUBTYPE mpeg)" }, { "( OR MIMEPART ( DEPTH 2 INDEX 1 ) MIMEPART ( DEPTH MAX 4 INDEX 3 ) )", - "((OR MIMEPART (DEPTH 2 INDEX 1) MIMEPART (DEPTH MAX 4 INDEX 3)))" }, + "(OR MIMEPART (DEPTH 2 INDEX 1) MIMEPART (DEPTH MAX 4 INDEX 3))" }, { "MIMEPART FILENAME IS frop.txt", NULL }, { "MIMEPART FILENAME BEGINS frop", NULL }, { "MIMEPART FILENAME ENDS .txt", NULL }, @@ -99,7 +99,7 @@ { "MIMEPART ( SUBJECT Frop TO henkie SENTON 20-Feb-2017 )", "MIMEPART (SUBJECT Frop TO henkie SENTON \"20-Feb-2017\")" }, { "MIMEPART ( OR SENTBEFORE 20-May-2015 SENTSINCE 20-Feb-2017 )", - "MIMEPART (OR SENTBEFORE \"20-May-2015\" SENTSINCE \"20-Feb-2017\")" }, + "MIMEPART OR SENTBEFORE \"20-May-2015\" SENTSINCE \"20-Feb-2017\"" }, { "MIMEPART ( ID <frop> PARENT ID <friep> )", "MIMEPART (ID <frop> PARENT (ID <friep>))" }, { "MIMEPART ( ID <frop> CHILD ( DESCRIPTION frop ID friep ) )",
--- a/src/lib-storage/test-mail-search-args-simplify.c Fri Jun 09 13:17:38 2017 +0300 +++ b/src/lib-storage/test-mail-search-args-simplify.c Tue May 30 23:53:44 2017 +0300 @@ -27,30 +27,30 @@ { "( ( TEXT foo ) )", "TEXT foo" }, { "( ( TEXT foo ) ( TEXT bar ) )", "TEXT foo TEXT bar" }, - { "OR ( TEXT foo ) ( TEXT bar )", "(OR TEXT foo TEXT bar)" }, + { "OR ( TEXT foo ) ( TEXT bar )", "OR TEXT foo TEXT bar" }, { "OR ( TEXT foo ) OR ( TEXT bar ) ( TEXT baz )", - "(OR TEXT foo OR TEXT bar TEXT baz)" }, + "OR TEXT foo OR TEXT bar TEXT baz" }, { "OR ( ( TEXT foo TEXT foo2 ) ) ( ( TEXT bar ( TEXT baz ) ) )", - "(OR (TEXT foo TEXT foo2) (TEXT bar TEXT baz))" }, + "OR (TEXT foo TEXT foo2) (TEXT bar TEXT baz)" }, { "NOT ( TEXT foo )", "NOT TEXT foo" }, { "NOT ( NOT ( TEXT foo ) )", "TEXT foo" }, { "NOT OR ( TEXT foo ) ( TEXT bar )", "NOT TEXT foo NOT TEXT bar" }, { "NOT ( OR ( TEXT foo ) ( TEXT bar ) )", "NOT TEXT foo NOT TEXT bar" }, - { "NOT ( TEXT foo TEXT bar )", "(OR NOT TEXT foo NOT TEXT bar)" }, + { "NOT ( TEXT foo TEXT bar )", "OR NOT TEXT foo NOT TEXT bar" }, { "ANSWERED FLAGGED SEEN", "(ANSWERED FLAGGED SEEN)" }, - { "OR ( ANSWERED FLAGGED SEEN ) DRAFT", "(OR (ANSWERED FLAGGED SEEN) DRAFT)" }, + { "OR ( ANSWERED FLAGGED SEEN ) DRAFT", "OR (ANSWERED FLAGGED SEEN) DRAFT" }, { "ANSWERED TEXT foo FLAGGED SEEN", "(ANSWERED FLAGGED SEEN) TEXT foo" }, { "NOT ( ANSWERED FLAGGED SEEN )", "NOT (ANSWERED FLAGGED SEEN)" }, { "OR NOT ANSWERED OR NOT FLAGGED NOT SEEN", "NOT (ANSWERED FLAGGED SEEN)" }, - { "OR NOT ANSWERED OR NOT FLAGGED SEEN", "(OR NOT (ANSWERED FLAGGED) SEEN)" }, - { "OR NOT ANSWERED OR FLAGGED NOT SEEN", "(OR NOT (ANSWERED SEEN) FLAGGED)" }, - { "NOT ANSWERED OR FLAGGED NOT SEEN", "NOT ANSWERED (OR FLAGGED NOT SEEN)" }, + { "OR NOT ANSWERED OR NOT FLAGGED SEEN", "OR NOT (ANSWERED FLAGGED) SEEN" }, + { "OR NOT ANSWERED OR FLAGGED NOT SEEN", "OR NOT (ANSWERED SEEN) FLAGGED" }, + { "NOT ANSWERED OR FLAGGED NOT SEEN", "NOT ANSWERED OR FLAGGED NOT SEEN" }, { "NOT ANSWERED OR NOT FLAGGED NOT SEEN", "NOT ANSWERED NOT (FLAGGED SEEN)" }, { "ANSWERED NOT FLAGGED SEEN NOT DRAFT", "(ANSWERED SEEN) NOT FLAGGED NOT DRAFT" }, { "OR NOT ANSWERED NOT SEEN", "NOT (ANSWERED SEEN)" }, - { "OR NOT ANSWERED OR NOT SEEN TEXT foo", "(OR NOT (ANSWERED SEEN) TEXT foo)" }, + { "OR NOT ANSWERED OR NOT SEEN TEXT foo", "OR NOT (ANSWERED SEEN) TEXT foo" }, { "ANSWERED ANSWERED", "ANSWERED" }, { "ANSWERED NOT ANSWERED", "NOT ALL" }, @@ -64,8 +64,8 @@ { "KEYWORD foo KEYWORD bar", "KEYWORD foo KEYWORD bar" }, { "NOT KEYWORD foo", "NOT KEYWORD foo" }, { "NOT KEYWORD foo NOT KEYWORD bar", "NOT KEYWORD foo NOT KEYWORD bar" }, - { "OR KEYWORD foo KEYWORD bar", "(OR KEYWORD foo KEYWORD bar)" }, - { "OR NOT KEYWORD foo NOT KEYWORD bar", "(OR NOT KEYWORD foo NOT KEYWORD bar)" }, + { "OR KEYWORD foo KEYWORD bar", "OR KEYWORD foo KEYWORD bar" }, + { "OR NOT KEYWORD foo NOT KEYWORD bar", "OR NOT KEYWORD foo NOT KEYWORD bar" }, { "KEYWORD foo KEYWORD foo", "KEYWORD foo" }, { "KEYWORD foo NOT KEYWORD foo", "NOT ALL" }, @@ -114,7 +114,7 @@ { "ON 03-Aug-2014 ON 03-Aug-2014", "ON \"03-Aug-2014\"" }, { "ON 03-Aug-2014 ON 04-Aug-2014", "ON \"03-Aug-2014\" ON \"04-Aug-2014\"" }, /* this could be replaced with e.g. NOT ALL */ - { "OR ON 03-Aug-2014 ON 04-Aug-2014", "(OR ON \"03-Aug-2014\" ON \"04-Aug-2014\")" }, + { "OR ON 03-Aug-2014 ON 04-Aug-2014", "OR ON \"03-Aug-2014\" ON \"04-Aug-2014\"" }, { "SINCE 03-Aug-2014 SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"03-Aug-2014\"" }, { "OR SINCE 01-Aug-2014 SINCE 02-Aug-2014", "SINCE \"01-Aug-2014\"" }, @@ -128,7 +128,7 @@ { "OR SMALLER 1 OR SMALLER 3 SMALLER 2", "SMALLER 3" }, { "SMALLER 3 NOT SMALLER 1 SMALLER 2", "SMALLER 2 NOT SMALLER 1" }, { "SMALLER 3 LARGER 5", "SMALLER 3 LARGER 5" }, /* this could be replaced with e.g. NOT ALL */ - { "OR SMALLER 3 LARGER 5", "(OR SMALLER 3 LARGER 5)" }, + { "OR SMALLER 3 LARGER 5", "OR SMALLER 3 LARGER 5" }, { "LARGER 3 LARGER 1 LARGER 2", "LARGER 3" }, { "OR LARGER 1 LARGER 2", "LARGER 1" }, @@ -179,45 +179,45 @@ { "OR TEXT common1 OR ( TEXT unique1 TEXT common1 ) ( TEXT unique3 TEXT common1 )", "TEXT common1" }, /* OR: extract common AND */ - { "OR ( TEXT common1 TEXT unique1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" }, - { "OR ( TEXT unique1 TEXT common1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" }, - { "OR ( TEXT common1 TEXT unique1 ) ( TEXT unique2 TEXT common1 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" }, - { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common1" }, + { "OR ( TEXT common1 TEXT unique1 ) ( TEXT common1 TEXT unique2 )", "OR TEXT unique1 TEXT unique2 TEXT common1" }, + { "OR ( TEXT unique1 TEXT common1 ) ( TEXT unique2 TEXT common1 )", "OR TEXT unique1 TEXT unique2 TEXT common1" }, + { "OR ( TEXT common1 TEXT unique1 ) ( TEXT unique2 TEXT common1 )", "OR TEXT unique1 TEXT unique2 TEXT common1" }, + { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 )", "OR TEXT unique1 TEXT unique2 TEXT common1" }, - { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 TEXT unique3 )", "(OR TEXT unique1 (TEXT unique2 TEXT unique3)) TEXT common1" }, - { "OR ( TEXT common1 TEXT common2 TEXT unique1 ) ( TEXT common1 TEXT common2 TEXT unique2 )", "(OR TEXT unique1 TEXT unique2) TEXT common2 TEXT common1" }, - { "OR ( TEXT common1 TEXT common2 TEXT unique1 TEXT unique2 ) ( TEXT common1 TEXT common2 TEXT unique3 TEXT unique4 )", "(OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4)) TEXT common2 TEXT common1" }, + { "OR ( TEXT unique1 TEXT common1 ) ( TEXT common1 TEXT unique2 TEXT unique3 )", "OR TEXT unique1 (TEXT unique2 TEXT unique3) TEXT common1" }, + { "OR ( TEXT common1 TEXT common2 TEXT unique1 ) ( TEXT common1 TEXT common2 TEXT unique2 )", "OR TEXT unique1 TEXT unique2 TEXT common2 TEXT common1" }, + { "OR ( TEXT common1 TEXT common2 TEXT unique1 TEXT unique2 ) ( TEXT common1 TEXT common2 TEXT unique3 TEXT unique4 )", "OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4) TEXT common2 TEXT common1" }, /* non-matching cases */ - { "OR ( TEXT unique1 TEXT unique2 ) TEXT unique3", "(OR (TEXT unique1 TEXT unique2) TEXT unique3)" }, - { "OR ( TEXT unique1 TEXT unique2 ) ( TEXT unique3 TEXT unique4 )", "(OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4))" }, - { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT unique2 ) TEXT unique3", "(OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT unique2) TEXT unique3)" }, - { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT common2 ) ( TEXT common2 TEXT unique2 )", "(OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT common2) (TEXT common2 TEXT unique2))" }, + { "OR ( TEXT unique1 TEXT unique2 ) TEXT unique3", "OR (TEXT unique1 TEXT unique2) TEXT unique3" }, + { "OR ( TEXT unique1 TEXT unique2 ) ( TEXT unique3 TEXT unique4 )", "OR (TEXT unique1 TEXT unique2) (TEXT unique3 TEXT unique4)" }, + { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT unique2 ) TEXT unique3", "OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT unique2) TEXT unique3" }, + { "OR ( TEXT common1 TEXT unique1 ) OR ( TEXT common1 TEXT common2 ) ( TEXT common2 TEXT unique2 )", "OR (TEXT common1 TEXT unique1) OR (TEXT common1 TEXT common2) (TEXT common2 TEXT unique2)" }, /* SUB: drop redundant args */ { "( OR TEXT common1 TEXT unique1 ) TEXT common1", "TEXT common1" }, { "( OR TEXT unique1 TEXT common1 ) TEXT common1", "TEXT common1" }, { "TEXT common1 ( OR TEXT common1 TEXT unique1 )", "TEXT common1" }, { "TEXT common1 ( OR TEXT unique1 TEXT common1 )", "TEXT common1" }, - { "( OR TEXT common1 TEXT common2 ) ( OR TEXT common1 OR TEXT common2 TEXT unique1 )", "(OR TEXT common1 TEXT common2)" }, + { "( OR TEXT common1 TEXT common2 ) ( OR TEXT common1 OR TEXT common2 TEXT unique1 )", "OR TEXT common1 TEXT common2" }, { "TEXT common1 ( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique3 TEXT common1 )", "TEXT common1" }, - { "OR ( TEXT common1 ( OR TEXT unique1 TEXT common1 ) ) TEXT unique1", "(OR TEXT common1 TEXT unique1)" }, + { "OR ( TEXT common1 ( OR TEXT unique1 TEXT common1 ) ) TEXT unique1", "OR TEXT common1 TEXT unique1" }, /* SUB: extract common OR */ - { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" }, - { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique2 TEXT common1 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" }, - { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT unique2 TEXT common1 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" }, - { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) TEXT common1)" }, + { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 )", "OR (TEXT unique1 TEXT unique2) TEXT common1" }, + { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT unique2 TEXT common1 )", "OR (TEXT unique1 TEXT unique2) TEXT common1" }, + { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT unique2 TEXT common1 )", "OR (TEXT unique1 TEXT unique2) TEXT common1" }, + { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 TEXT unique2 )", "OR (TEXT unique1 TEXT unique2) TEXT common1" }, - { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 OR TEXT unique2 TEXT unique3 )", "(OR (TEXT unique1 (OR TEXT unique2 TEXT unique3)) TEXT common1)" }, - { "( OR TEXT common1 OR TEXT common2 TEXT unique1 ) ( OR TEXT common1 OR TEXT common2 TEXT unique2 )", "(OR (TEXT unique1 TEXT unique2) OR TEXT common2 TEXT common1)" }, - { "( OR TEXT common1 OR TEXT common2 OR TEXT unique1 TEXT unique2 ) ( OR TEXT common1 OR TEXT common2 OR TEXT unique3 TEXT unique4 )", "(OR ((OR TEXT unique1 TEXT unique2) (OR TEXT unique3 TEXT unique4)) OR TEXT common2 TEXT common1)" }, + { "( OR TEXT unique1 TEXT common1 ) ( OR TEXT common1 OR TEXT unique2 TEXT unique3 )", "OR (TEXT unique1 OR TEXT unique2 TEXT unique3) TEXT common1" }, + { "( OR TEXT common1 OR TEXT common2 TEXT unique1 ) ( OR TEXT common1 OR TEXT common2 TEXT unique2 )", "OR (TEXT unique1 TEXT unique2) OR TEXT common2 TEXT common1" }, + { "( OR TEXT common1 OR TEXT common2 OR TEXT unique1 TEXT unique2 ) ( OR TEXT common1 OR TEXT common2 OR TEXT unique3 TEXT unique4 )", "OR (OR TEXT unique1 TEXT unique2 OR TEXT unique3 TEXT unique4) OR TEXT common2 TEXT common1" }, /* non-matching cases */ - { "( OR TEXT unique1 TEXT unique2 ) TEXT unique3", "(OR TEXT unique1 TEXT unique2) TEXT unique3" }, - { "( OR TEXT unique1 TEXT unique2 ) ( OR TEXT unique3 TEXT unique4 )", "(OR TEXT unique1 TEXT unique2) (OR TEXT unique3 TEXT unique4)" }, - { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 ) TEXT unique3", "(OR TEXT common1 TEXT unique1) (OR TEXT common1 TEXT unique2) TEXT unique3" }, - { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT common2 ) ( OR TEXT common2 TEXT unique2 )", "(OR TEXT common1 TEXT unique1) (OR TEXT common1 TEXT common2) (OR TEXT common2 TEXT unique2)" }, + { "( OR TEXT unique1 TEXT unique2 ) TEXT unique3", "OR TEXT unique1 TEXT unique2 TEXT unique3" }, + { "( OR TEXT unique1 TEXT unique2 ) ( OR TEXT unique3 TEXT unique4 )", "OR TEXT unique1 TEXT unique2 OR TEXT unique3 TEXT unique4" }, + { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT unique2 ) TEXT unique3", "OR TEXT common1 TEXT unique1 OR TEXT common1 TEXT unique2 TEXT unique3" }, + { "( OR TEXT common1 TEXT unique1 ) ( OR TEXT common1 TEXT common2 ) ( OR TEXT common2 TEXT unique2 )", "OR TEXT common1 TEXT unique1 OR TEXT common1 TEXT common2 OR TEXT common2 TEXT unique2" }, }; static struct mail_search_args *