We try to match the rules discussed in the last commit: probabilistic fields are implicit AND, and boolean fields are implicit OR, unless they can be repeated (tag: being the prominent example of a repeating, i.e. non-exclusive field). --- lib/database-private.h | 1 + lib/database.cc | 27 ++++++++++++++++++++------- test/T760-implicit-operators.sh | 3 --- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/lib/database-private.h b/lib/database-private.h index 87ae1bdf..a5eb83cb 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -159,6 +159,7 @@ typedef enum notmuch_field_flags { NOTMUCH_FIELD_EXTERNAL = 1 << 0, NOTMUCH_FIELD_PROBABILISTIC = 1 << 1, NOTMUCH_FIELD_PROCESSOR = 1 << 2, + NOTMUCH_FIELD_GROUP = 1 << 3, } notmuch_field_flag_t; /* diff --git a/lib/database.cc b/lib/database.cc index 24b7ec43..4148df5a 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -272,16 +272,23 @@ prefix_t prefix_table[] = { { "body", "", NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROBABILISTIC }, { "thread", "G", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | + NOTMUCH_FIELD_GROUP + }, { "tag", "K", NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, { "is", "K", NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, - { "id", "Q", NOTMUCH_FIELD_EXTERNAL }, + { "id", "Q", NOTMUCH_FIELD_EXTERNAL | + NOTMUCH_FIELD_GROUP }, { "mid", "Q", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | + NOTMUCH_FIELD_GROUP + }, { "path", "P", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | + NOTMUCH_FIELD_GROUP + }, { "property", "XPROPERTY", NOTMUCH_FIELD_EXTERNAL }, /* * Unconditionally add ':' to reduce potential ambiguity with @@ -290,10 +297,14 @@ prefix_t prefix_table[] = { * discussion. */ { "folder", "XFOLDER:", NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | + NOTMUCH_FIELD_GROUP + }, #if HAVE_XAPIAN_FIELD_PROCESSOR { "date", NULL, NOTMUCH_FIELD_EXTERNAL | - NOTMUCH_FIELD_PROCESSOR }, + NOTMUCH_FIELD_PROCESSOR | + NOTMUCH_FIELD_GROUP + }, { "query", NULL, NOTMUCH_FIELD_EXTERNAL | NOTMUCH_FIELD_PROCESSOR }, #endif @@ -400,7 +411,9 @@ _setup_query_field (const prefix_t *prefix, notmuch_database_t *notmuch) /* we treat all field-processor fields as boolean in order to get the raw input */ if (prefix->prefix) notmuch->query_parser->add_prefix ("", prefix->prefix); - notmuch->query_parser->add_boolean_prefix (prefix->name, fp); + notmuch->query_parser->add_boolean_prefix (prefix->name, fp, + !(prefix->flags & NOTMUCH_FIELD_PROBABILISTIC) && + (prefix->flags & NOTMUCH_FIELD_GROUP)); } else { _setup_query_field_default (prefix, notmuch); } diff --git a/test/T760-implicit-operators.sh b/test/T760-implicit-operators.sh index 40f0bc22..118a9de2 100755 --- a/test/T760-implicit-operators.sh +++ b/test/T760-implicit-operators.sh @@ -18,7 +18,6 @@ test_prob() { test_expect_equal_file /dev/null OUTPUT test_begin_subtest "field '$1' is implicit AND" - $2 notmuch search $1:agent and $1:tla > EXPECTED notmuch search $1:agent $1:tla > OUTPUT test_expect_equal_file EXPECTED OUTPUT @@ -40,7 +39,6 @@ test_prob_regex() { test_expect_equal_file /dev/null OUTPUT test_begin_subtest "regex for '$1' implicit AND" - $2 notmuch search --output=messages id:$1@one > EXPECTED notmuch search --output=messages $1:/agent/ $1:/tla/ > OUTPUT test_expect_equal_file EXPECTED OUTPUT @@ -107,7 +105,6 @@ notmuch tag +one id:tag@one notmuch tag +two id:tag@two test_begin_subtest "'tag' is implicit AND" -test_subtest_known_broken notmuch search --output=messages tag:one tag:two > OUTPUT test_expect_equal_file /dev/null OUTPUT -- 2.23.0.rc1 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch