]> git.notmuchmail.org Git - notmuch/blobdiff - lib/query.cc
lib: remove use of notmuch_query_search_messages from query.cc
[notmuch] / lib / query.cc
index 9279915d21ccfbccb9ad9929a4089695a9f55928..f53215dbaf5902fca51d3c7dd5ac3628802ded00 100644 (file)
@@ -296,9 +296,12 @@ notmuch_query_search_messages_st (notmuch_query_t *query,
        return NOTMUCH_STATUS_SUCCESS;
 
     } catch (const Xapian::Error &error) {
-       fprintf (stderr, "A Xapian exception occurred performing query: %s\n",
-                error.get_msg().c_str());
-       fprintf (stderr, "Query string was: %s\n", query->query_string);
+       _notmuch_database_log (notmuch,
+                              "A Xapian exception occurred performing query: %s\n"
+                              "Query string was: %s\n",
+                              error.get_msg().c_str(),
+                              query->query_string);
+
        notmuch->exception_reported = TRUE;
        talloc_free (messages);
        return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
@@ -587,14 +590,22 @@ notmuch_query_count_messages (notmuch_query_t *query)
 
        enquire.set_query (final_query);
 
-       mset = enquire.get_mset (0, notmuch->xapian_db->get_doccount ());
+       /*
+        * Set the checkatleast parameter to the number of documents
+        * in the database to make get_matches_estimated() exact.
+        */
+       mset = enquire.get_mset (0, notmuch->xapian_db->get_doccount (),
+                                notmuch->xapian_db->get_doccount ());
 
        count = mset.get_matches_estimated();
 
     } catch (const Xapian::Error &error) {
-       fprintf (stderr, "A Xapian exception occurred: %s\n",
-                error.get_msg().c_str());
-       fprintf (stderr, "Query string was: %s\n", query->query_string);
+       _notmuch_database_log (notmuch,
+                              "A Xapian exception occurred performing query: %s\n"
+                              "Query string was: %s\n",
+                              error.get_msg().c_str(),
+                              query->query_string);
+
     }
 
     return count;
@@ -607,10 +618,14 @@ notmuch_query_count_threads (notmuch_query_t *query)
     GHashTable *hash;
     unsigned int count;
     notmuch_sort_t sort;
+    notmuch_status_t status;
 
     sort = query->sort;
     query->sort = NOTMUCH_SORT_UNSORTED;
-    messages = notmuch_query_search_messages (query);
+    status = notmuch_query_search_messages_st (query, &messages);
+    if (status)
+       return 0;
+
     query->sort = sort;
     if (messages == NULL)
        return 0;
@@ -643,3 +658,9 @@ notmuch_query_count_threads (notmuch_query_t *query)
 
     return count;
 }
+
+notmuch_database_t *
+notmuch_query_get_database (notmuch_query_t *query)
+{
+    return query->notmuch;
+}