From c58ee818b5e116d00172c8406149106c97c2e377 Mon Sep 17 00:00:00 2001
From: Carl Worth <cworth@cworth.org>
Date: Wed, 21 Oct 2009 23:10:19 -0700
Subject: [PATCH] Bring back the insert_thread_id function.

We deleted this in favor of our fancy new thread_ids iterator
from the message object. But one of the previous callers of
insert_thread_id isn't using notmuch_message_t yet. I made
the mistake of thinking I could just call g_hash_table_insert
directly, but the problem was that nobody was splitting
up the thread_id string at its commas.

So with this, we were inserting bogus comma-separated IDs
into the hash table, so thread_id values were ballooning
out of control. Should be much better now.
---
 database.cc | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/database.cc b/database.cc
index e46fe5d8..77b2eff2 100644
--- a/database.cc
+++ b/database.cc
@@ -111,6 +111,29 @@ find_message_by_docid (Xapian::Database *db, Xapian::docid docid)
     return db->get_document (docid);
 }
 
+static void
+insert_thread_id (GHashTable *thread_ids, Xapian::Document doc)
+{
+    string value_string;
+    const char *value, *id, *comma;
+
+    value_string = doc.get_value (NOTMUCH_VALUE_THREAD);
+    value = value_string.c_str();
+    if (strlen (value)) {
+	id = value;
+	while (*id) {
+	    comma = strchr (id, ',');
+	    if (comma == NULL)
+		comma = id + strlen (id);
+	    g_hash_table_insert (thread_ids,
+				 strndup (id, comma - id), NULL);
+	    id = comma;
+	    if (*id)
+		id++;
+	}
+    }
+}
+
 notmuch_message_t *
 notmuch_database_find_message (notmuch_database_t *notmuch,
 			       const char *message_id)
@@ -152,16 +175,8 @@ find_thread_ids (notmuch_database_t *notmuch,
 
     find_messages_by_term (db, "ref", message_id, &child, &children_end);
     for ( ; child != children_end; child++) {
-	const char *thread_id;
 	doc = find_message_by_docid (db, *child);
-
-	thread_id = doc.get_value (NOTMUCH_VALUE_THREAD).c_str ();
-	if (strlen (thread_id) == 0) {
-	    fprintf (stderr, "Database error: Message with doc_id %u has empty thread-id value (value index %d)\n",
-		     *child, NOTMUCH_VALUE_THREAD);
-	} else {
-	    g_hash_table_insert (thread_ids, strdup (thread_id), NULL);
-	}
+	insert_thread_id (thread_ids, doc);
     }
 
     for (i = 0; i < parents->len; i++) {
-- 
2.45.2