]> git.cworth.org Git - notmuch/blobdiff - lib/regexp-fields.cc
lib: do not phrase parse prefixed bracketed subexpressions
[notmuch] / lib / regexp-fields.cc
index c6d9d94f7686063bb59f76fbd4daf0a19ae81500..539915d892f9529d3d011dfa7611bb37aba718d2 100644 (file)
@@ -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;
@@ -235,7 +236,15 @@ RegexpFieldProcessor::operator() (const std::string & str)
            return parser.parse_query (query_str, NOTMUCH_QUERY_PARSER_FLAGS, term_prefix);
        } else {
            /* Boolean prefix */
-           std::string term = term_prefix + str;
+           std::string query_str;
+           std::string term;
+
+           if (str.length () > 1 && str.at (str.size () - 1) == '/')
+               query_str = str.substr (0, str.size () - 1);
+           else
+               query_str = str;
+
+           term = term_prefix + query_str;
            return Xapian::Query (term);
        }
     }