This will be used in a following commit to provide the equivalant of thread:{} syntax for s-expression queries. --- lib/parse-sexp.cc | 13 +++++-------- lib/parse-sexp.h | 14 ++++++++++++-- lib/query.cc | 23 ++++++++++++++++++++++- 3 files changed, 39 insertions(+), 11 deletions(-)
diff --git a/lib/parse-sexp.cc b/lib/parse-sexp.cc index c0d0b596..cfd503d9 100644 --- a/lib/parse-sexp.cc +++ b/lib/parse-sexp.cc @@ -1,5 +1,5 @@ #include "database-private.h" -#include "sexp.h" +#include "parse-sexp.h" #include "parse-time-vrp.h" #include "query-fp.h" #include "regexp-fields.h" @@ -81,9 +81,6 @@ static _sexp_keyword_t keywords[] = { } }; -static notmuch_status_t _sexp_to_xapian_query (notmuch_database_t *notmuch, const sexp_t *sx, - Xapian::Query &output); - static notmuch_status_t _sexp_combine_query (notmuch_database_t *notmuch, Xapian::Query::op operation, @@ -102,7 +99,7 @@ _sexp_combine_query (notmuch_database_t *notmuch, return NOTMUCH_STATUS_SUCCESS; } - status = _sexp_to_xapian_query (notmuch, sx, subquery); + status = _notmuch_sexp_to_xapian_query (notmuch, sx, subquery); if (status) return status; @@ -123,7 +120,7 @@ _notmuch_sexp_string_to_xapian_query (notmuch_database_t *notmuch, const char *q if (! sx) return NOTMUCH_STATUS_BAD_QUERY_SYNTAX; - return _sexp_to_xapian_query (notmuch, sx, output); + return _notmuch_sexp_to_xapian_query (notmuch, sx, output); } static void @@ -241,8 +238,8 @@ _sexp_parse_keywords (notmuch_database_t *notmuch, const char *prefix, const sex * element defining and operation, or as a special case the empty * list */ -static notmuch_status_t -_sexp_to_xapian_query (notmuch_database_t *notmuch, const sexp_t *sx, Xapian::Query &output) +notmuch_status_t +_notmuch_sexp_to_xapian_query (notmuch_database_t *notmuch, const sexp_t *sx, Xapian::Query &output) { const _sexp_op_t *op; diff --git a/lib/parse-sexp.h b/lib/parse-sexp.h index a358bf26..eb78cbda 100644 --- a/lib/parse-sexp.h +++ b/lib/parse-sexp.h @@ -1,6 +1,16 @@ #ifndef _PARSE_SEXP_H #define _PARSE_SEXP_H /* parse_sexp.cc */ -notmuch_status_t _notmuch_sexp_string_to_xapian_query (notmuch_database_t *notmuch, const - char *querystr, Xapian::Query &output); +#include <sexp.h> + +notmuch_status_t _notmuch_sexp_string_to_xapian_query (notmuch_database_t *notmuch, + const char *querystr, + Xapian::Query &output); + +notmuch_status_t _notmuch_sexp_to_xapian_query (notmuch_database_t *notmuch, const sexp_t *sx, + Xapian::Query &output); + +notmuch_status_t _notmuch_query_from_sexpr (notmuch_database_t *notmuch, const sexp_t *sexp, + notmuch_query_t *&output); + #endif diff --git a/lib/query.cc b/lib/query.cc index 0916860e..4ada3fe0 100644 --- a/lib/query.cc +++ b/lib/query.cc @@ -112,7 +112,10 @@ _notmuch_query_constructor (notmuch_database_t *notmuch, query->notmuch = notmuch; - query->query_string = talloc_strdup (query, query_string); + if (query_string) + query->query_string = talloc_strdup (query, query_string); + else + query->query_string = NULL; query->sort = NOTMUCH_SORT_NEWEST_FIRST; @@ -193,6 +196,24 @@ _notmuch_query_ensure_parsed_xapian (notmuch_query_t *query) return NOTMUCH_STATUS_SUCCESS; } +notmuch_status_t +_notmuch_query_from_sexpr (notmuch_database_t *notmuch, const sexp_t *sexp, notmuch_query_t *&output) +{ + notmuch_status_t status; + notmuch_query_t *query = _notmuch_query_constructor (notmuch, NULL); + + status = _notmuch_sexp_to_xapian_query (notmuch, sexp, query->xapian_query); + if (status) + return status; + + query->syntax = NOTMUCH_QUERY_SYNTAX_SEXPR; + query->parsed = true; + + output = query; + + return NOTMUCH_STATUS_SUCCESS; +} + static notmuch_status_t _notmuch_query_ensure_parsed_sexpr (notmuch_query_t *query) { -- 2.30.2 _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org