]> git.notmuchmail.org Git - notmuch/blobdiff - query.cc
Rework Makefile just a bit to enable adding flags for more compiler warnings
[notmuch] / query.cc
index a15de9664a5ac4b8d15f5e567f873364a39d2f9a..88d76ef19ff6c2b825d81bbb256e218607c6f839 100644 (file)
--- a/query.cc
+++ b/query.cc
@@ -41,6 +41,10 @@ notmuch_query_create (notmuch_database_t *notmuch,
 {
     notmuch_query_t *query;
 
+#ifdef DEBUG_QUERY
+    fprintf (stderr, "Query string is:\n%s\n", query_string);
+#endif
+
     query = talloc (NULL, notmuch_query_t);
     if (unlikely (query == NULL))
        return NULL;
@@ -88,13 +92,15 @@ notmuch_query_search (notmuch_query_t *query)
 
     try {
        Xapian::Enquire enquire (*notmuch->xapian_db);
-       Xapian::Query mail_query ("Kmail");
+       Xapian::Query mail_query (talloc_asprintf (query, "%s%s",
+                                                  _find_prefix ("type"),
+                                                  "mail"));
        Xapian::Query string_query, final_query;
        Xapian::MSet mset;
-       unsigned int flags = (Xapian::QueryParser::FLAG_BOOLEAN &
-                             Xapian::QueryParser::FLAG_PHRASE &
-                             Xapian::QueryParser::FLAG_LOVEHATE &
-                             Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE &
+       unsigned int flags = (Xapian::QueryParser::FLAG_BOOLEAN |
+                             Xapian::QueryParser::FLAG_PHRASE |
+                             Xapian::QueryParser::FLAG_LOVEHATE |
+                             Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE |
                              Xapian::QueryParser::FLAG_WILDCARD);
 
        if (strcmp (query_string, "") == 0) {
@@ -108,16 +114,20 @@ notmuch_query_search (notmuch_query_t *query)
 
        switch (query->sort) {
        case NOTMUCH_SORT_DATE_OLDEST_FIRST:
-           enquire.set_sort_by_value (NOTMUCH_VALUE_DATE, FALSE);
+           enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, FALSE);
            break;
        case NOTMUCH_SORT_DATE_NEWEST_FIRST:
-           enquire.set_sort_by_value (NOTMUCH_VALUE_DATE, TRUE);
+           enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, TRUE);
            break;
        case NOTMUCH_SORT_MESSAGE_ID:
            enquire.set_sort_by_value (NOTMUCH_VALUE_MESSAGE_ID, FALSE);
            break;
        }
 
+#if DEBUG_QUERY
+       fprintf (stderr, "Final query is:\n%s\n", final_query.get_description().c_str());
+#endif
+
        enquire.set_query (final_query);
 
        mset = enquire.get_mset (0, notmuch->xapian_db->get_doccount ());
@@ -155,12 +165,23 @@ notmuch_results_has_more (notmuch_results_t *results)
 notmuch_message_t *
 notmuch_results_get (notmuch_results_t *results)
 {
+    notmuch_message_t *message;
     Xapian::docid doc_id;
+    notmuch_private_status_t status;
 
     doc_id = *results->iterator;
 
-    return _notmuch_message_create (results,
-                                   results->notmuch, doc_id);
+    message = _notmuch_message_create (results,
+                                      results->notmuch, doc_id,
+                                      &status);
+
+    if (message == NULL &&
+       status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
+    {
+       INTERNAL_ERROR ("a results iterator contains a non-existent document ID.\n");
+    }
+
+    return message;
 }
 
 void