The argument is that if the string passed to the field processor has no spaces, then the added quotes won't have any benefit except for disabling wildcards. But disabling wildcards doesn't seem very useful in the normal Xapian query parser, since they're stripped before generating terms anyway. It does mean that the query 'from:"foo*"' will not be precisely equivalent to 'from:foo' as it is for the non field-processor version. --- lib/regexp-fields.cc | 10 ++++++++-- test/T650-regexp-query.sh | 2 -- 2 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/lib/regexp-fields.cc b/lib/regexp-fields.cc index 42239a66..08c6ccb5 100644 --- a/lib/regexp-fields.cc +++ b/lib/regexp-fields.cc @@ -161,8 +161,14 @@ RegexpFieldProcessor::operator() (const std::string & str) } else { /* TODO replace this with a nicer API level triggering of * phrase parsing, when possible */ - std::string quoted='"' + str + '"'; - return parser.parse_query (quoted, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix); + std::string query_str; + + if (str.find (' ') != std::string::npos) + query_str = '"' + str + '"'; + else + query_str = str; + + return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix); } } #endif diff --git a/test/T650-regexp-query.sh b/test/T650-regexp-query.sh index ba4a64e0..c2b99d1b 100755 --- a/test/T650-regexp-query.sh +++ b/test/T650-regexp-query.sh @@ -20,12 +20,10 @@ notmuch search --output=messages 'subject:""' and from:cworth > OUTPUT test_expect_equal_file cworth.msg-ids OUTPUT test_begin_subtest "xapian wildcard search for from:" -test_subtest_known_broken notmuch search --output=messages 'from:cwo*' > OUTPUT test_expect_equal_file cworth.msg-ids OUTPUT test_begin_subtest "xapian wildcard search for subject:" -test_subtest_known_broken test_expect_equal $(notmuch count 'subject:count*') 1 test_begin_subtest "regexp from search, case sensitive" -- 2.11.0 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch