mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
lib: cache user prefixes in database object
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 separate 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.
This commit is contained in:
parent
575493e785
commit
b52cda90f0
4 changed files with 23 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -678,6 +678,8 @@ struct _notmuch_indexopts {
|
|||
|
||||
#define CONFIG_HEADER_PREFIX "index.header."
|
||||
|
||||
#define EMPTY_STRING(s) ((s)[0] == '\0')
|
||||
|
||||
NOTMUCH_END_DECLS
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue