Hi Alexander,
Alexander Adolf writes:
>
> That was the other option. I thought I'd post it here first, to see
> whether there would be any momentum for including it in notmuch
> itself?
That actually sounds like a good idea. Maybe just send it as a patch to
the mailinglist? Not sure if there
The omission of the 'extern "C"' machinery seems like an oversight.
---
util/unicode-util.h | 7 +++
1 file changed, 7 insertions(+)
diff --git a/util/unicode-util.h b/util/unicode-util.h
index 32d1e6ef..1bb9336a 100644
--- a/util/unicode-util.h
+++ b/util/unicode-util.h
@@ -4,9 +4,16 @@
Most of the function will be re-usable when creating a query from an
s-expression.
---
lib/query.cc | 19 ---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/lib/query.cc b/lib/query.cc
index 792aba21..39b85e91 100644
--- a/lib/query.cc
+++ b/lib/query.cc
@@ -84,9
There is not much of a parser here yet, but it already does some
useful error reporting. Most functionality sketched in the
documentation is not implemented yet; detailed documentation will
follow with the implementation.
---
doc/conf.py | 4 ++
doc/index.rst
Macros implement lazy evaluation and lexical scope. The former is
needed to make certain natural constructs work sensibly (e.g. (tag
,param)) but the latter is mainly future-proofing in case the DSL is
is extended to allow local bindings.
For technical background, see chapters 6 and 17 of [1]
This is somewhat less DWIM than the Xapian query parser, but it has
the advantage of simplicity.
---
doc/man7/notmuch-sexp-queries.rst | 10 --
lib/parse-sexp.cc | 10 +++---
test/T081-sexpr-search.sh | 5 -
3 files changed, 19 insertions(+), 6
This will help provide more meaningful error messages without special
casing on the client side.
---
bindings/python-cffi/notmuch2/_build.py | 1 +
bindings/python-cffi/notmuch2/_errors.py | 3 +++
lib/database.cc | 2 ++
lib/notmuch.h| 4
The previous code had the somewhat bizarre effect that the (notmuch
specific) query string was "*" (interpreted as MatchAll) and the
allegedly parsed xapian_query was "MatchNothing".
This commit also reduces code duplication.
---
lib/query.cc | 34 ++
1 file
This is necessary so that programs can take infix syntax queries from
a user and use the sexp query syntax to construct e.g. a refinement of
that query.
---
doc/man7/notmuch-sexp-queries.rst | 7 +
lib/parse-sexp.cc | 34
test/T081-sexpr-search.sh
All operations and (Xapian) fields will eventually have an entry in
the prefixes table. The flags field is just a placeholder for now, but
will eventually distinguish between various kinds of prefixes.
---
doc/man7/notmuch-sexp-queries.rst | 16 ---
lib/parse-sexp.cc | 76
This is equivalent to adding the same field name "" for multiple
prefixes in the Xapian query parser, but we have to explicitely
construct the resulting query.
---
lib/parse-sexp.cc | 36
test/T081-sexpr-search.sh | 31 +++
Anything that is quoted or not purely word characters is considered a
phrase. Phrases are not stemmed, because the stems do not have
positional information in the database. It is less efficient to scan
the term twice, but it avoids a second pass to add prefixes, so maybe
it balances out. In any
It turns out there is not really much code in query-fp.cc useful for
supporting the new syntax. The code we could potentially factor out
amounts to calling notmuch_database_get_config; both the key
construction and the parsing of the results are specific to the query
syntax involved.
---
The many tests potentially overkill, but they could catch typos in the
prefixes table. As a simplifying assumption, for now we assume a
single argument to the wildcard operator, as this matches the Xapian
semantics. The name 'starts-with' is chosen to emphasize the supported
case of wildcards in
The configure part is essentially the same as the other checks using
pkg-config. Since the optional inclusion of this feature changes what
options are available to the user, include it in the "built_with"
pseudo-configuration keys.
---
configure| 26 +-
This commit does not enable using saved s-expression queries, only
saving and retrieving them from the config file or the database. Use
in queries will be enabled in a following commit.
---
doc/man1/notmuch-config.rst | 5 +
notmuch-config.c| 1 +
test/T081-sexpr-search.sh |
The code here is just gluing together _notmuch_query_expand with the
existing sexp parser infrastructure.
---
doc/man7/notmuch-sexp-queries.rst | 20 +++
lib/parse-sexp.cc | 56 +--
test/T081-sexpr-search.sh | 52
When dealing with recursive queries (i.e. thread:{foo}) it turns out
to be useful just to deal with the underlying Xapian objects, and not
wrap them in notmuch objects.
---
lib/database-private.h | 7 ++
lib/query.cc | 51 --
2 files changed,
This provides functionality analogous to query: in the Xapian
QueryParser based parser. Perhaps counterintuitively, the saved
queries currently have to be in the original query syntax (i.e. not
s-expressions).
---
doc/man7/notmuch-sexp-queries.rst | 6 ++
lib/parse-sexp.cc |
This enables using the same stemmer in both query parsers.
---
lib/database-private.h | 1 +
lib/open.cc| 3 ++-
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/lib/database-private.h b/lib/database-private.h
index f206efaf..85d55299 100644
--- a/lib/database-private.h
No functionality change, just an extra argument carried everywhere.
---
lib/parse-sexp.cc | 49 +--
1 file changed, 30 insertions(+), 19 deletions(-)
diff --git a/lib/parse-sexp.cc b/lib/parse-sexp.cc
index 53168d57..188acffc 100644
---
At least to the degree that the Xapian QueryParser based parser
also supports them. Support short alias 'rx' as it seems to make more
complex queries nicer to read.
---
doc/man7/notmuch-sexp-queries.rst | 8
lib/parse-sexp.cc | 54 ++-
This is intended to allow use outside of the Xapian query parser.
---
lib/database-private.h | 5 +
lib/query-fp.cc| 22 +++---
2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/lib/database-private.h b/lib/database-private.h
index 9ee3b933..8b9d67fe
It will be convenient not to have to construct a notmuch query object
when parsing subqueries, so the commit rewrites the query
expansion (currently only used for thread:{} queries) using only
Xapian. As a bonus it seems about 15% faster in initial experiments.
---
lib/database-private.h | 16
Initially support selection of query syntax in two subcommands to
enable testing.
---
notmuch-search.c | 13 +
test/T080-search.sh | 5 +
test/T095-address.sh | 5 +
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/notmuch-search.c b/notmuch-search.c
We use "boolean" to describe fields that should generate terms
literally without stemming or phrase splitting. This terminology
might not be ideal but it is already enshrined in
notmuch-search-terms(7).
---
doc/man7/notmuch-sexp-queries.rst | 18 +-
lib/parse-sexp.cc | 49
Set the parsing syntax when the (notmuch) query object is
created. Initially the library always returns a trivial query that
matches all messages when using s-expression syntax.
It seems better to select the syntax at query creation time because
the lazy parsing is an implementation detail.
---
The broken tests are because we do not yet handle phrase searches.
---
doc/man7/notmuch-sexp-queries.rst | 62 +--
lib/parse-sexp.cc | 19 +-
test/T081-sexpr-search.sh | 57
3 files changed, 133
This will allow re-use of this code outside of the Xapian query parser.
---
lib/database-private.h | 5 +++
lib/regexp-fields.cc | 81 +-
lib/regexp-fields.h| 6
3 files changed, 68 insertions(+), 24 deletions(-)
diff --git
One subtle aspect is the replacement of _find_prefix with
_notmuch_database_prefix, which understands user headers. Otherwise
the code mainly consists of creating a fake prefix record (since the
user prefixes are not in the prefix table) and error handling.
---
doc/man7/notmuch-sexp-queries.rst |
In fact most of the code path is in common, only the caching of terms
in the query needs to be added for s-expression queries.
---
lib/query.cc | 34 ++---
test/T081-sexpr-search.sh | 40 +++
2 files changed, 63
Users that insist on using a literal '*' as a tag, can continue to do
so by quoting it when searching.
---
doc/man7/notmuch-sexp-queries.rst | 19 ++--
lib/parse-sexp.cc | 5
test/T081-sexpr-search.sh | 48 +++
3 files changed, 70
Two main user visible changes since v3.
1) I changed the option from
--query-syntax=sexp
to
--query=sexp
This is arguably a bit more ambiguous (are we specifying a query
"sexp" to search for?) but considerably less painful to type. I
previously mentioned `--squery`, but it is a
33 matches
Mail list logo