]> git.notmuchmail.org Git - notmuch/blobdiff - lib/regexp-fields.cc
lib: handle empty string in regexp field processors
[notmuch] / lib / regexp-fields.cc
index 8e740a810064a8e80bae40ad75045b975c7c2286..1651677cd8638b759a9f96838237a98aa2ef5af2 100644 (file)
@@ -148,6 +148,11 @@ RegexpFieldProcessor::RegexpFieldProcessor (std::string prefix, Xapian::QueryPar
 Xapian::Query
 RegexpFieldProcessor::operator() (const std::string & str)
 {
+    if (str.size () == 0)
+       return Xapian::Query(Xapian::Query::OP_AND_NOT,
+                            Xapian::Query::MatchAll,
+                            Xapian::Query (Xapian::Query::OP_WILDCARD, term_prefix));
+
     if (str.at (0) == '/') {
        if (str.at (str.size () - 1) == '/'){
            RegexpPostingSource *postings = new RegexpPostingSource (slot, str.substr(1,str.size () - 2));
@@ -158,8 +163,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