#include <xapian.h>
-#pragma GCC visibility push(hidden)
-
/* Bit masks for _notmuch_database::features. Features are named,
* independent aspects of the database schema.
*
*
* Introduced: version 3. */
NOTMUCH_FEATURE_LAST_MOD = 1 << 6,
+
+ /* If set, unprefixed terms are stored only for the message body,
+ * not for headers.
+ *
+ * Introduced: version 3. */
+ NOTMUCH_FEATURE_UNPREFIX_BODY_ONLY = 1 << 7,
};
/* In C++, a named enum is its own type, so define bitwise operators
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<notmuch_field_flag_t>(
+ static_cast<unsigned>(a) | static_cast<unsigned>(b));
+}
+
+inline notmuch_field_flag_t
+operator&(notmuch_field_flag_t a, notmuch_field_flag_t b)
+{
+ return static_cast<notmuch_field_flag_t>(
+ static_cast<unsigned>(a) & static_cast<unsigned>(b));
+}
+
#define NOTMUCH_QUERY_PARSER_FLAGS (Xapian::QueryParser::FLAG_BOOLEAN | \
Xapian::QueryParser::FLAG_PHRASE | \
Xapian::QueryParser::FLAG_LOVEHATE | \
Xapian::QueryParser::FLAG_PURE_NOT)
struct _notmuch_database {
- notmuch_bool_t exception_reported;
+ bool exception_reported;
char *path;
notmuch_database_mode_t mode;
int atomic_nesting;
- /* TRUE if changes have been made in this atomic section */
- notmuch_bool_t atomic_dirty;
+ /* true if changes have been made in this atomic section */
+ bool atomic_dirty;
Xapian::Database *xapian_db;
/* Bit mask of features used by this database. This is a
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;
-#if HAVE_XAPIAN_FIELD_PROCESSOR
- Xapian::FieldProcessor *date_field_processor;
- Xapian::FieldProcessor *query_field_processor;
-#endif
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
Xapian::TermIterator &end,
const char *prefix);
-#pragma GCC visibility pop
-
+void
+_notmuch_database_find_doc_ids (notmuch_database_t *notmuch,
+ const char *prefix_name,
+ const char *value,
+ Xapian::PostingIterator *begin,
+ Xapian::PostingIterator *end);
#endif