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-leave@notmuchmail.org