mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-23 01:44:52 +01:00
Drop the storage of thread ID(s) in a value.
Now that we are iterating over the thread terms instead, we can drop this redundant storage (which should shrink our database a tiny bit).
This commit is contained in:
parent
5941b91a5e
commit
1c2bac747e
3 changed files with 25 additions and 37 deletions
36
database.cc
36
database.cc
|
@ -192,26 +192,34 @@ find_unique_document (notmuch_database_t *notmuch,
|
||||||
return NOTMUCH_PRIVATE_STATUS_SUCCESS;
|
return NOTMUCH_PRIVATE_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX: Should rewrite this to accept a notmuch_message_t* instead of
|
||||||
|
* a Xapian:Document and then we could just use
|
||||||
|
* notmuch_message_get_thread_ids instead of duplicating its logic
|
||||||
|
* here. */
|
||||||
static void
|
static void
|
||||||
insert_thread_id (GHashTable *thread_ids, Xapian::Document doc)
|
insert_thread_id (GHashTable *thread_ids, Xapian::Document doc)
|
||||||
{
|
{
|
||||||
string value_string;
|
string value_string;
|
||||||
const char *value, *id, *comma;
|
Xapian::TermIterator i;
|
||||||
|
const char *prefix_str = _find_prefix ("thread");
|
||||||
|
char prefix;
|
||||||
|
|
||||||
value_string = doc.get_value (NOTMUCH_VALUE_THREAD);
|
assert (strlen (prefix_str) == 1);
|
||||||
value = value_string.c_str();
|
|
||||||
if (strlen (value)) {
|
prefix = *prefix_str;
|
||||||
id = value;
|
|
||||||
while (*id) {
|
i = doc.termlist_begin ();
|
||||||
comma = strchr (id, ',');
|
i.skip_to (prefix_str);
|
||||||
if (comma == NULL)
|
|
||||||
comma = id + strlen (id);
|
while (1) {
|
||||||
|
if (i == doc.termlist_end ())
|
||||||
|
break;
|
||||||
|
value_string = *i;
|
||||||
|
if (value_string.empty () || value_string[0] != prefix)
|
||||||
|
break;
|
||||||
g_hash_table_insert (thread_ids,
|
g_hash_table_insert (thread_ids,
|
||||||
strndup (id, comma - id), NULL);
|
strdup (value_string.c_str () + 1), NULL);
|
||||||
id = comma;
|
i++;
|
||||||
if (*id)
|
|
||||||
id++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
20
message.cc
20
message.cc
|
@ -292,26 +292,7 @@ void
|
||||||
_notmuch_message_add_thread_id (notmuch_message_t *message,
|
_notmuch_message_add_thread_id (notmuch_message_t *message,
|
||||||
const char *thread_id)
|
const char *thread_id)
|
||||||
{
|
{
|
||||||
std::string id_str;
|
|
||||||
|
|
||||||
_notmuch_message_add_term (message, "thread", thread_id);
|
_notmuch_message_add_term (message, "thread", thread_id);
|
||||||
|
|
||||||
id_str = message->doc.get_value (NOTMUCH_VALUE_THREAD);
|
|
||||||
|
|
||||||
if (id_str.empty ()) {
|
|
||||||
message->doc.add_value (NOTMUCH_VALUE_THREAD, thread_id);
|
|
||||||
} else {
|
|
||||||
size_t pos;
|
|
||||||
|
|
||||||
/* Think about using a hash here if there's any performance
|
|
||||||
* problem. */
|
|
||||||
pos = id_str.find (thread_id);
|
|
||||||
if (pos == std::string::npos) {
|
|
||||||
id_str.append (",");
|
|
||||||
id_str.append (thread_id);
|
|
||||||
message->doc.add_value (NOTMUCH_VALUE_THREAD, id_str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -351,7 +332,6 @@ _notmuch_message_ensure_thread_id (notmuch_message_t *message)
|
||||||
|
|
||||||
thread_id_generate (&thread_id);
|
thread_id_generate (&thread_id);
|
||||||
_notmuch_message_add_term (message, "thread", thread_id.str);
|
_notmuch_message_add_term (message, "thread", thread_id.str);
|
||||||
message->doc.add_value (NOTMUCH_VALUE_THREAD, thread_id.str);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Synchronize changes made to message->doc out into the database. */
|
/* Synchronize changes made to message->doc out into the database. */
|
||||||
|
|
|
@ -40,6 +40,7 @@ NOTMUCH_BEGIN_DECLS
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include <talloc.h>
|
#include <talloc.h>
|
||||||
|
|
||||||
|
@ -71,8 +72,7 @@ NOTMUCH_BEGIN_DECLS
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
NOTMUCH_VALUE_TIMESTAMP = 0,
|
NOTMUCH_VALUE_TIMESTAMP = 0,
|
||||||
NOTMUCH_VALUE_MESSAGE_ID,
|
NOTMUCH_VALUE_MESSAGE_ID
|
||||||
NOTMUCH_VALUE_THREAD
|
|
||||||
} notmuch_value_t;
|
} notmuch_value_t;
|
||||||
|
|
||||||
/* Xapian (with flint backend) complains if we provide a term longer
|
/* Xapian (with flint backend) complains if we provide a term longer
|
||||||
|
|
Loading…
Reference in a new issue