lib: only trigger phrase processing for regexp fields when needed
authorDavid Bremner <david@tethera.net>
Sat, 18 Mar 2017 02:23:51 +0000 (23:23 -0300)
committerDavid Bremner <david@tethera.net>
Fri, 24 Mar 2017 12:24:13 +0000 (09:24 -0300)
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
test/T650-regexp-query.sh

index 8e740a810064a8e80bae40ad75045b975c7c2286..9dcf973263743ea01721bf139569cafa17577943 100644 (file)
@@ -158,8 +158,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
index 1db6a76b98a8dd03b4c118b3b05e84834d5e1089..61739e873eb214364f0f3b60748fa30279580787 100755 (executable)
@@ -12,12 +12,10 @@ fi
 notmuch search --output=messages from:cworth > cworth.msg-ids
 
 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"