Add internal functions to search for alternate doc types

Publicly we are only exposing the non-ghost documents (of "type"
"mail").  But internally we might want to inspect the ghost messages
as well.

This changeset adds two new private interfaces to queries to recover
information about alternate document types.
This commit is contained in:
Daniel Kahn Gillmor 2016-04-08 22:54:49 -03:00 committed by David Bremner
parent 604d1e0977
commit 011fc41d4d
2 changed files with 27 additions and 2 deletions

View file

@ -477,6 +477,17 @@ void
_notmuch_doc_id_set_remove (notmuch_doc_id_set_t *doc_ids, _notmuch_doc_id_set_remove (notmuch_doc_id_set_t *doc_ids,
unsigned int doc_id); unsigned int doc_id);
/* querying xapian documents by type (e.g. "mail" or "ghost"): */
notmuch_status_t
_notmuch_query_search_documents (notmuch_query_t *query,
const char *type,
notmuch_messages_t **out);
notmuch_status_t
_notmuch_query_count_documents (notmuch_query_t *query,
const char *type,
unsigned *count_out);
/* message.cc */ /* message.cc */
void void

View file

@ -186,6 +186,14 @@ notmuch_query_search_messages (notmuch_query_t *query)
notmuch_status_t notmuch_status_t
notmuch_query_search_messages_st (notmuch_query_t *query, notmuch_query_search_messages_st (notmuch_query_t *query,
notmuch_messages_t **out) notmuch_messages_t **out)
{
return _notmuch_query_search_documents (query, "mail", out);
}
notmuch_status_t
_notmuch_query_search_documents (notmuch_query_t *query,
const char *type,
notmuch_messages_t **out)
{ {
notmuch_database_t *notmuch = query->notmuch; notmuch_database_t *notmuch = query->notmuch;
const char *query_string = query->query_string; const char *query_string = query->query_string;
@ -208,7 +216,7 @@ notmuch_query_search_messages_st (notmuch_query_t *query,
Xapian::Enquire enquire (*notmuch->xapian_db); Xapian::Enquire enquire (*notmuch->xapian_db);
Xapian::Query mail_query (talloc_asprintf (query, "%s%s", Xapian::Query mail_query (talloc_asprintf (query, "%s%s",
_find_prefix ("type"), _find_prefix ("type"),
"mail")); type));
Xapian::Query string_query, final_query, exclude_query; Xapian::Query string_query, final_query, exclude_query;
Xapian::MSet mset; Xapian::MSet mset;
Xapian::MSetIterator iterator; Xapian::MSetIterator iterator;
@ -553,6 +561,12 @@ notmuch_query_count_messages (notmuch_query_t *query)
notmuch_status_t notmuch_status_t
notmuch_query_count_messages_st (notmuch_query_t *query, unsigned *count_out) notmuch_query_count_messages_st (notmuch_query_t *query, unsigned *count_out)
{
return _notmuch_query_count_documents (query, "mail", count_out);
}
notmuch_status_t
_notmuch_query_count_documents (notmuch_query_t *query, const char *type, unsigned *count_out)
{ {
notmuch_database_t *notmuch = query->notmuch; notmuch_database_t *notmuch = query->notmuch;
const char *query_string = query->query_string; const char *query_string = query->query_string;
@ -562,7 +576,7 @@ notmuch_query_count_messages_st (notmuch_query_t *query, unsigned *count_out)
Xapian::Enquire enquire (*notmuch->xapian_db); Xapian::Enquire enquire (*notmuch->xapian_db);
Xapian::Query mail_query (talloc_asprintf (query, "%s%s", Xapian::Query mail_query (talloc_asprintf (query, "%s%s",
_find_prefix ("type"), _find_prefix ("type"),
"mail")); type));
Xapian::Query string_query, final_query, exclude_query; Xapian::Query string_query, final_query, exclude_query;
Xapian::MSet mset; Xapian::MSet mset;
unsigned int flags = (Xapian::QueryParser::FLAG_BOOLEAN | unsigned int flags = (Xapian::QueryParser::FLAG_BOOLEAN |