aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Spaeth <sebastian@sspaeth.de>2010-03-19 08:32:29 +0100
committerSebastian Spaeth <sebastian@sspaeth.de>2010-03-19 08:32:29 +0100
commitcd19699e0d32eccc6481c0a3294b38c4fe0042e8 (patch)
tree2e3229c7b2f847e2029a8c28f53d028d615663a1
parent350a6884de21e845c6574233df9510809c86cb71 (diff)
Implement Database.count_messages()
-rw-r--r--cnotmuch/database.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/cnotmuch/database.py b/cnotmuch/database.py
index 9c1be675..6a74f5d5 100644
--- a/cnotmuch/database.py
+++ b/cnotmuch/database.py
@@ -250,6 +250,11 @@ class Query(object):
_search_messages = nmlib.notmuch_query_search_messages
_search_messages.restype = c_void_p
+
+ """notmuch_query_count_messages"""
+ _count_messages = _nmlib.notmuch_query_count_messages
+ _count_messages.restype = c_uint
+
def __init__(self, db, querystr):
"""
:param db: An open database which we derive the Query from.
@@ -327,6 +332,24 @@ class Query(object):
return Messages(msgs_p,self)
+ def count_messages(self):
+ """Estimate the number of messages matching the query
+
+ This function performs a search and returns Xapian's best
+ guess as to the number of matching messages. It is somewhat
+ faster than performing :meth:`search_messages` and counting
+ the result with `len()`. Technically, it wraps the underlying
+ *notmuch_query_count_messages* function.
+
+ :returns: :class:`Messages`
+ :exception: :exc:`NotmuchError`
+
+ * STATUS.NOT_INITIALIZED if query is not inited
+ """
+ if self._query is None:
+ raise NotmuchError(STATUS.NOT_INITIALIZED)
+
+ return Query._count_messages(self._query)
def __del__(self):
"""Close and free the Query"""