]> git.notmuchmail.org Git - notmuch/commitdiff
lib: factor out expansion of saved queries.
authorDavid Bremner <david@tethera.net>
Tue, 24 Aug 2021 15:17:36 +0000 (08:17 -0700)
committerDavid Bremner <david@tethera.net>
Sun, 5 Sep 2021 00:07:19 +0000 (17:07 -0700)
This is intended to allow use outside of the Xapian query parser.

lib/database-private.h
lib/query-fp.cc

index 9ee3b933578739ed389d8ea5cd842fdb88c2ee05..8b9d67feec7044934c6eff8d3a1b03d1bdb1fbc1 100644 (file)
@@ -327,6 +327,11 @@ _notmuch_regexp_to_query (notmuch_database_t *notmuch, Xapian::valueno slot, std
                          std::string regexp_str,
                          Xapian::Query &output, std::string &msg);
 
+/* thread-fp.cc */
+notmuch_status_t
+_notmuch_query_name_to_query (notmuch_database_t *notmuch, const std::string name,
+                             Xapian::Query &output);
+
 #if HAVE_SFSEXP
 /* parse-sexp.cc */
 notmuch_status_t
index b980b7f06669402c2f592ed0159a8c034ca1a157..75b1d875f4a733a732bf86e98fbba26acd01b201 100644 (file)
 #include "query-fp.h"
 #include <iostream>
 
-Xapian::Query
-QueryFieldProcessor::operator() (const std::string & name)
+notmuch_status_t
+_notmuch_query_name_to_query (notmuch_database_t *notmuch, const std::string name,
+                             Xapian::Query &output)
 {
     std::string key = "query." + name;
     char *expansion;
     notmuch_status_t status;
 
     status = notmuch_database_get_config (notmuch, key.c_str (), &expansion);
+    if (status)
+       return status;
+
+    output = notmuch->query_parser->parse_query (expansion, NOTMUCH_QUERY_PARSER_FLAGS);
+    return NOTMUCH_STATUS_SUCCESS;
+}
+
+Xapian::Query
+QueryFieldProcessor::operator() (const std::string & name)
+{
+    notmuch_status_t status;
+    Xapian::Query output;
+
+    status = _notmuch_query_name_to_query (notmuch, name, output);
     if (status) {
        throw Xapian::QueryParserError ("error looking up key" + name);
     }
 
-    return parser.parse_query (expansion, NOTMUCH_QUERY_PARSER_FLAGS);
+    return output;
+
 }