This will be used to avoid needing a database access to resolve a db prefix from the corresponding UI prefix (e.g. when indexing). Arguably the setup of the seperate header map does not belong here, since it is about indexing rather than querying, but we currently don't have any other indexing setup to do. --- lib/database-private.h | 5 +++++ lib/database.cc | 16 ++++++++++++++++ lib/notmuch-private.h | 7 +++++++ lib/thread.cc | 2 -- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/lib/database-private.h b/lib/database-private.h index 293f2db4..9d1dabf1 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -221,6 +221,11 @@ struct _notmuch_database { Xapian::ValueRangeProcessor *value_range_processor; Xapian::ValueRangeProcessor *date_range_processor; Xapian::ValueRangeProcessor *last_mod_range_processor; + + /* XXX it's slightly gross to use two parallel string->string maps + * here, but at least they are small */ + notmuch_string_map_t *user_prefix; + notmuch_string_map_t *user_header; }; /* Prior to database version 3, features were implied by the database diff --git a/lib/database.cc b/lib/database.cc index a3a17b68..80235344 100644 --- a/lib/database.cc +++ b/lib/database.cc @@ -334,6 +334,14 @@ _setup_user_query_fields (notmuch_database_t *notmuch) notmuch_config_list_t *list; notmuch_status_t status; + notmuch->user_prefix = _notmuch_string_map_create (notmuch); + if (notmuch->user_prefix == NULL) + return NOTMUCH_STATUS_OUT_OF_MEMORY; + + notmuch->user_header = _notmuch_string_map_create (notmuch); + if (notmuch->user_header == NULL) + return NOTMUCH_STATUS_OUT_OF_MEMORY; + status = notmuch_database_get_config_list (notmuch, CONFIG_HEADER_PREFIX, &list); if (status) return status; @@ -345,6 +353,14 @@ _setup_user_query_fields (notmuch_database_t *notmuch) const char *key = notmuch_config_list_key (list) + sizeof (CONFIG_HEADER_PREFIX) - 1; + _notmuch_string_map_append (notmuch->user_prefix, + key, + _user_prefix (notmuch, key)); + + _notmuch_string_map_append (notmuch->user_header, + key, + notmuch_config_list_value (list)); + query_field.name = talloc_strdup (notmuch, key); query_field.prefix = _user_prefix (notmuch, key); query_field.flags = NOTMUCH_FIELD_PROBABILISTIC diff --git a/lib/notmuch-private.h b/lib/notmuch-private.h index 39d11a91..1ef26e37 100644 --- a/lib/notmuch-private.h +++ b/lib/notmuch-private.h @@ -181,6 +181,11 @@ typedef struct _notmuch_doc_id_set notmuch_doc_id_set_t; const char * _find_prefix (const char *name); +/* Lookup a prefix value by name, including possibly user defined prefixes + */ +const char * +_notmuch_database_prefix (notmuch_database_t *notmuch, const char *name); + char * _notmuch_message_id_compressed (void *ctx, const char *message_id); @@ -678,6 +683,8 @@ struct _notmuch_indexopts { #define CONFIG_HEADER_PREFIX "index.header." +#define EMPTY_STRING(s) ((s)[0] == '\0') + NOTMUCH_END_DECLS #ifdef __cplusplus diff --git a/lib/thread.cc b/lib/thread.cc index 47c90664..ae830064 100644 --- a/lib/thread.cc +++ b/lib/thread.cc @@ -30,8 +30,6 @@ #define THREAD_DEBUG(format, ...) do {} while (0) /* ignored */ #endif -#define EMPTY_STRING(s) ((s)[0] == '\0') - struct _notmuch_thread { notmuch_database_t *notmuch; char *thread_id; -- 2.20.1 _______________________________________________ notmuch mailing list notmuch@notmuchmail.org https://notmuchmail.org/mailman/listinfo/notmuch