lib/open: track which parameters are passed

This will be used to fine tune the loading of configuration for
certain special configuration items (initially just "database.path").
This commit is contained in:
David Bremner 2021-10-27 22:34:18 -03:00
parent 378415a557
commit d467444085
2 changed files with 49 additions and 4 deletions

View file

@ -190,6 +190,39 @@ operator& (notmuch_field_flag_t a, notmuch_field_flag_t b)
Xapian::QueryParser::FLAG_WILDCARD | \ Xapian::QueryParser::FLAG_WILDCARD | \
Xapian::QueryParser::FLAG_PURE_NOT) Xapian::QueryParser::FLAG_PURE_NOT)
/*
* Which parameters were explicit when the database was opened */
typedef enum {
NOTMUCH_PARAM_NONE = 0,
NOTMUCH_PARAM_DATABASE = 1 << 0,
NOTMUCH_PARAM_CONFIG = 1 << 1,
NOTMUCH_PARAM_PROFILE = 1 << 2,
} notmuch_open_param_t;
/*
* define bitwise operators to hide casts */
inline notmuch_open_param_t
operator| (notmuch_open_param_t a, notmuch_open_param_t b)
{
return static_cast<notmuch_open_param_t>(
static_cast<unsigned>(a) | static_cast<unsigned>(b));
}
inline notmuch_open_param_t&
operator|= (notmuch_open_param_t &a, notmuch_open_param_t b)
{
a = a | b;
return a;
}
inline notmuch_open_param_t
operator& (notmuch_open_param_t a, notmuch_open_param_t b)
{
return static_cast<notmuch_open_param_t>(
static_cast<unsigned>(a) & static_cast<unsigned>(b));
}
struct _notmuch_database { struct _notmuch_database {
bool exception_reported; bool exception_reported;
@ -249,6 +282,9 @@ struct _notmuch_database {
/* Cached and possibly overridden configuration */ /* Cached and possibly overridden configuration */
notmuch_string_map_t *config; notmuch_string_map_t *config;
/* Track what parameters were specified when opening */
notmuch_open_param_t params;
}; };
/* Prior to database version 3, features were implied by the database /* Prior to database version 3, features were implied by the database

View file

@ -247,7 +247,7 @@ _choose_database_path (void *ctx,
} }
static notmuch_database_t * static notmuch_database_t *
_alloc_notmuch () _alloc_notmuch (const char *database_path, const char *config_path, const char *profile)
{ {
notmuch_database_t *notmuch; notmuch_database_t *notmuch;
@ -263,6 +263,15 @@ _alloc_notmuch ()
notmuch->transaction_count = 0; notmuch->transaction_count = 0;
notmuch->transaction_threshold = 0; notmuch->transaction_threshold = 0;
notmuch->view = 1; notmuch->view = 1;
notmuch->params = NOTMUCH_PARAM_NONE;
if (database_path)
notmuch->params |= NOTMUCH_PARAM_DATABASE;
if (config_path)
notmuch->params |= NOTMUCH_PARAM_CONFIG;
if (profile)
notmuch->params |= NOTMUCH_PARAM_PROFILE;
return notmuch; return notmuch;
} }
@ -510,7 +519,7 @@ notmuch_database_open_with_config (const char *database_path,
_notmuch_init (); _notmuch_init ();
notmuch = _alloc_notmuch (); notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) { if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY; status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE; goto DONE;
@ -610,7 +619,7 @@ notmuch_database_create_with_config (const char *database_path,
_notmuch_init (); _notmuch_init ();
notmuch = _alloc_notmuch (); notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) { if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY; status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE; goto DONE;
@ -812,7 +821,7 @@ notmuch_database_load_config (const char *database_path,
_notmuch_init (); _notmuch_init ();
notmuch = _alloc_notmuch (); notmuch = _alloc_notmuch (database_path, config_path, profile);
if (! notmuch) { if (! notmuch) {
status = NOTMUCH_STATUS_OUT_OF_MEMORY; status = NOTMUCH_STATUS_OUT_OF_MEMORY;
goto DONE; goto DONE;