X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fdatabase-private.h;h=727b1d616f248f6aa3c5662985e0f69048a3c700;hp=e2e4bc8721744a91d2b06cfadef8c959f5d48de7;hb=bc11759dd1fd198661657b741bc0143c9af309a4;hpb=1cdb96d3c4a2fc5ddf3a6e5c73c59c0f0e65cae2 diff --git a/lib/database-private.h b/lib/database-private.h index e2e4bc87..727b1d61 100644 --- a/lib/database-private.h +++ b/lib/database-private.h @@ -13,7 +13,7 @@ * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program. If not, see http://www.gnu.org/licenses/ . + * along with this program. If not, see https://www.gnu.org/licenses/ . * * Author: Carl Worth */ @@ -32,9 +32,11 @@ #include "notmuch-private.h" -#include +#ifdef SILENCE_XAPIAN_DEPRECATION_WARNINGS +#define XAPIAN_DEPRECATED(D) D +#endif -#pragma GCC visibility push(hidden) +#include /* Bit masks for _notmuch_database::features. Features are named, * independent aspects of the database schema. @@ -92,6 +94,20 @@ enum _notmuch_features { * * Introduced: version 3. */ NOTMUCH_FEATURE_GHOSTS = 1 << 4, + + + /* If set, then the database was created after the introduction of + * indexed mime types. If unset, then the database may contain a + * mixture of messages with indexed and non-indexed mime types. + * + * Introduced: version 3. */ + NOTMUCH_FEATURE_INDEXED_MIMETYPES = 1 << 5, + + /* If set, messages store the revision number of the last + * modification in NOTMUCH_VALUE_LAST_MOD. + * + * Introduced: version 3. */ + NOTMUCH_FEATURE_LAST_MOD = 1 << 6, }; /* In C++, a named enum is its own type, so define bitwise operators @@ -130,6 +146,38 @@ operator&=(_notmuch_features &a, _notmuch_features b) return a; } +/* + * Configuration options for xapian database fields */ +typedef enum notmuch_field_flags { + NOTMUCH_FIELD_NO_FLAGS = 0, + NOTMUCH_FIELD_EXTERNAL = 1 << 0, + NOTMUCH_FIELD_PROBABILISTIC = 1 << 1, + NOTMUCH_FIELD_PROCESSOR = 1 << 2, +} notmuch_field_flag_t; + +/* + * define bitwise operators to hide casts */ +inline notmuch_field_flag_t +operator|(notmuch_field_flag_t a, notmuch_field_flag_t b) +{ + return static_cast( + static_cast(a) | static_cast(b)); +} + +inline notmuch_field_flag_t +operator&(notmuch_field_flag_t a, notmuch_field_flag_t b) +{ + return static_cast( + static_cast(a) & static_cast(b)); +} + +#define NOTMUCH_QUERY_PARSER_FLAGS (Xapian::QueryParser::FLAG_BOOLEAN | \ + Xapian::QueryParser::FLAG_PHRASE | \ + Xapian::QueryParser::FLAG_LOVEHATE | \ + Xapian::QueryParser::FLAG_BOOLEAN_ANY_CASE | \ + Xapian::QueryParser::FLAG_WILDCARD | \ + Xapian::QueryParser::FLAG_PURE_NOT) + struct _notmuch_database { notmuch_bool_t exception_reported; @@ -137,6 +185,8 @@ struct _notmuch_database { notmuch_database_mode_t mode; int atomic_nesting; + /* TRUE if changes have been made in this atomic section */ + notmuch_bool_t atomic_dirty; Xapian::Database *xapian_db; /* Bit mask of features used by this database. This is a @@ -146,10 +196,25 @@ struct _notmuch_database { unsigned int last_doc_id; uint64_t last_thread_id; + /* error reporting; this value persists only until the + * next library call. May be NULL */ + char *status_string; + + /* Highest committed revision number. Modifications are recorded + * under a higher revision number, which can be generated with + * notmuch_database_new_revision. */ + unsigned long revision; + const char *uuid; + + /* Keep track of the number of times the database has been re-opened + * (or other global invalidations of notmuch's caching) + */ + unsigned long view; Xapian::QueryParser *query_parser; Xapian::TermGenerator *term_gen; Xapian::ValueRangeProcessor *value_range_processor; Xapian::ValueRangeProcessor *date_range_processor; + Xapian::ValueRangeProcessor *last_mod_range_processor; }; /* Prior to database version 3, features were implied by the database @@ -161,12 +226,14 @@ struct _notmuch_database { /* Current database features. If any of these are missing from a * database, request an upgrade. - * NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES is not included because - * upgrade doesn't currently introduce the feature (though brand new - * databases will have it). */ + * NOTMUCH_FEATURE_FROM_SUBJECT_ID_VALUES and + * NOTMUCH_FEATURE_INDEXED_MIMETYPES are not included because upgrade + * doesn't currently introduce the features (though brand new databases + * will have it). */ #define NOTMUCH_FEATURES_CURRENT \ (NOTMUCH_FEATURE_FILE_TERMS | NOTMUCH_FEATURE_DIRECTORY_DOCS | \ - NOTMUCH_FEATURE_BOOL_FOLDER) + NOTMUCH_FEATURE_BOOL_FOLDER | NOTMUCH_FEATURE_GHOSTS | \ + NOTMUCH_FEATURE_LAST_MOD) /* Return the list of terms from the given iterator matching a prefix. * The prefix will be stripped from the strings in the returned list. @@ -179,6 +246,4 @@ _notmuch_database_get_terms_with_prefix (void *ctx, Xapian::TermIterator &i, Xapian::TermIterator &end, const char *prefix); -#pragma GCC visibility pop - #endif