mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 10:28:09 +01:00
lib: do not phrase parse prefixed bracketed subexpressions
Since Xapian does not preserve quotes when passing the subquery to a field processor, we have to make a guess as to what the user intended. Here the added assumption is that a string surrounded by parens is not intended to be a phrase.
This commit is contained in:
parent
c9ed87f39f
commit
8ed6a172b3
3 changed files with 16 additions and 6 deletions
|
@ -275,11 +275,13 @@ the same phrase.
|
|||
- a.list.of.words
|
||||
|
||||
Both parenthesised lists of terms and quoted phrases are ok with
|
||||
probabilistic prefixes such as **to:**, **from:**, and **subject:**. In particular
|
||||
probabilistic prefixes such as **to:**, **from:**, and **subject:**.
|
||||
For prefixes supporting regex search, the parenthesised list should be
|
||||
quoted. In particular
|
||||
|
||||
::
|
||||
|
||||
subject:(pizza free)
|
||||
subject:"(pizza free)"
|
||||
|
||||
is equivalent to
|
||||
|
||||
|
|
|
@ -227,7 +227,8 @@ RegexpFieldProcessor::operator() (const std::string & str)
|
|||
* phrase parsing, when possible */
|
||||
std::string query_str;
|
||||
|
||||
if (*str.rbegin () != '*' || str.find (' ') != std::string::npos)
|
||||
if ((str.at (0) != '(' || *str.rbegin () != ')') &&
|
||||
(*str.rbegin () != '*' || str.find (' ') != std::string::npos))
|
||||
query_str = '"' + str + '"';
|
||||
else
|
||||
query_str = str;
|
||||
|
|
|
@ -66,23 +66,30 @@ EOF
|
|||
test_expect_equal_file EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "bracketed subject search (with dquotes)"
|
||||
test_subtest_known_broken
|
||||
notmuch search subject:notmuch and subject:show > EXPECTED
|
||||
notmuch search 'subject:"(show notmuch)"' > OUTPUT
|
||||
test_expect_equal_file_nonempty EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "bracketed subject search (with dquotes and operator 'or')"
|
||||
test_subtest_known_broken
|
||||
notmuch search subject:notmuch or subject:show > EXPECTED
|
||||
notmuch search 'subject:"(notmuch or show)"' > OUTPUT
|
||||
test_expect_equal_file_nonempty EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "bracketed subject search (with dquotes and operator 'and')"
|
||||
test_subtest_known_broken
|
||||
notmuch search subject:notmuch and subject:show > EXPECTED
|
||||
notmuch search 'subject:"(notmuch and show)"' > OUTPUT
|
||||
test_expect_equal_file_nonempty EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "bracketed subject search (with phrase, operator 'or')"
|
||||
notmuch search 'subject:"mailing list"' or subject:FreeBSD > EXPECTED
|
||||
notmuch search 'subject:"(""mailing list"" or FreeBSD)"' > OUTPUT
|
||||
test_expect_equal_file_nonempty EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "bracketed subject search (with phrase, operator 'and')"
|
||||
notmuch search search 'subject:"notmuch show"' and subject:commands > EXPECTED
|
||||
notmuch search 'subject:"(""notmuch show"" and commands)"' > OUTPUT
|
||||
test_expect_equal_file_nonempty EXPECTED OUTPUT
|
||||
|
||||
test_begin_subtest "xapian wildcard search for from:"
|
||||
notmuch search --output=messages 'from:cwo*' > OUTPUT
|
||||
test_expect_equal_file cworth.msg-ids OUTPUT
|
||||
|
|
Loading…
Reference in a new issue