const char *prefix;
} prefix_t;
-prefix_t BOOLEAN_PREFIX[] = {
+prefix_t BOOLEAN_PREFIX_INTERNAL[] = {
{ "type", "K" },
- { "tag", "L" },
- { "msgid", "Q" },
{ "thread", "H" },
{ "ref", "R" },
{ "timestamp", "KTS" },
};
+prefix_t BOOLEAN_PREFIX_EXTERNAL[] = {
+ { "tag", "L" },
+ { "id", "Q" }
+};
+
const char *
_find_prefix (const char *name)
{
unsigned int i;
- for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX); i++)
- if (strcmp (name, BOOLEAN_PREFIX[i].name) == 0)
- return BOOLEAN_PREFIX[i].prefix;
+ for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_INTERNAL); i++)
+ if (strcmp (name, BOOLEAN_PREFIX_INTERNAL[i].name) == 0)
+ return BOOLEAN_PREFIX_INTERNAL[i].prefix;
+
+ for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_EXTERNAL); i++)
+ if (strcmp (name, BOOLEAN_PREFIX_EXTERNAL[i].name) == 0)
+ return BOOLEAN_PREFIX_EXTERNAL[i].prefix;
fprintf (stderr, "Internal error: No prefix exists for '%s'\n", name);
exit (1);
notmuch_private_status_t status;
unsigned int doc_id;
- status = find_unique_doc_id (notmuch, "msgid", message_id, &doc_id);
+ status = find_unique_doc_id (notmuch, "id", message_id, &doc_id);
if (status == NOTMUCH_PRIVATE_STATUS_NO_DOCUMENT_FOUND)
return NULL;
struct stat st;
int err;
char *local_path = NULL;
+ unsigned int i;
if (path == NULL)
path = local_path = notmuch_database_default_path ();
notmuch->query_parser = new Xapian::QueryParser;
notmuch->query_parser->set_default_op (Xapian::Query::OP_AND);
notmuch->query_parser->set_database (*notmuch->xapian_db);
+
+ for (i = 0; i < ARRAY_SIZE (BOOLEAN_PREFIX_EXTERNAL); i++) {
+ prefix_t *prefix = &BOOLEAN_PREFIX_EXTERNAL[i];
+ notmuch->query_parser->add_boolean_prefix (prefix->name,
+ prefix->prefix);
+ }
} catch (const Xapian::Error &error) {
fprintf (stderr, "A Xapian exception occurred: %s\n",
error.get_msg().c_str());
static char *
timestamp_db_key (const char *key)
{
- if (strlen (key) + 1 > NOTMUCH_TERM_MAX) {
+ int term_len = strlen (_find_prefix ("timestamp")) + strlen (key);
+
+ if (term_len > NOTMUCH_TERM_MAX)
return notmuch_sha1_of_string (key);
- } else {
+ else
return strdup (key);
- }
}
notmuch_status_t