Set the parsing syntax when the (notmuch) query object is created. Initially the library always returns a trivial query that matches all messages. --- lib/notmuch.h | 4 ++++ lib/query.cc | 49 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 49 insertions(+), 4 deletions(-)
diff --git a/lib/notmuch.h b/lib/notmuch.h index 3b28bea3..a9abdd18 100644 --- a/lib/notmuch.h +++ b/lib/notmuch.h @@ -961,6 +961,10 @@ notmuch_query_t * notmuch_query_create (notmuch_database_t *database, const char *query_string); +notmuch_query_t * +notmuch_query_create_sexpr (notmuch_database_t *database, + const char *query_string); + /** * Sort values for notmuch_query_set_sort. */ diff --git a/lib/query.cc b/lib/query.cc index 39b85e91..9d2b6e50 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -23,6 +23,13 @@ #include <glib.h> /* GHashTable, GPtrArray */ +#include "sexp.h" + +typedef enum { + NOTMUCH_QUERY_SYNTAX_XAPIAN, + NOTMUCH_QUERY_SYNTAX_SEXPR, +} notmuch_query_syntax_t; + struct _notmuch_query { notmuch_database_t *notmuch; const char *query_string; @@ -30,6 +37,7 @@ struct _notmuch_query { notmuch_string_list_t *exclude_terms; notmuch_exclude_t omit_excluded; bool parsed; + notmuch_query_syntax_t syntax; Xapian::Query xapian_query; std::set<std::string> terms; }; @@ -126,15 +134,29 @@ notmuch_query_create (notmuch_database_t *notmuch, if (! query) return NULL; + query->syntax = NOTMUCH_QUERY_SYNTAX_XAPIAN; + return query; } -static notmuch_status_t -_notmuch_query_ensure_parsed (notmuch_query_t *query) +notmuch_query_t * +notmuch_query_create_sexpr (notmuch_database_t *notmuch, + const char *query_string) { - if (query->parsed) - return NOTMUCH_STATUS_SUCCESS; + notmuch_query_t *query = _notmuch_query_constructor (notmuch, query_string); + + if (! query) + return NULL; + + query->syntax = NOTMUCH_QUERY_SYNTAX_SEXPR; + + return query; +} + +static notmuch_status_t +_notmuch_query_ensure_parsed_xapian (notmuch_query_t *query) +{ try { query->xapian_query = query->notmuch->query_parser-> @@ -167,6 +189,25 @@ _notmuch_query_ensure_parsed (notmuch_query_t *query) return NOTMUCH_STATUS_SUCCESS; } +static notmuch_status_t +_notmuch_query_ensure_parsed_sexpr (notmuch_query_t *query) +{ + query->xapian_query = Xapian::Query::MatchAll; + return NOTMUCH_STATUS_SUCCESS; +} + +static notmuch_status_t +_notmuch_query_ensure_parsed (notmuch_query_t *query) +{ + if (query->parsed) + return NOTMUCH_STATUS_SUCCESS; + + if (query->syntax == NOTMUCH_QUERY_SYNTAX_SEXPR) + return _notmuch_query_ensure_parsed_sexpr (query); + + return _notmuch_query_ensure_parsed_xapian (query); +} + const char * notmuch_query_get_query_string (const notmuch_query_t *query) { -- 2.30.2 _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org