fts-api-private.h revision de11cf486e0d0448537b1b5d546496ab85e7cda8
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen#ifndef FTS_API_PRIVATE_H
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen#define FTS_API_PRIVATE_H
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen#include "fts-api.h"
b87761f9bbef949f31dae297e619ac3f5e9c2b2eTimo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenstruct fts_backend_vfuncs {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct fts_backend *(*init)(struct mailbox *box);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen void (*deinit)(struct fts_backend *backend);
de5f478d9e7ae7b8e58082e0b30b6ce1f034236aTimo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*get_last_uid)(struct fts_backend *backend, uint32_t *last_uid_r);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*get_all_last_uids)(struct fts_backend *backend, pool_t pool,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(fts_backend_uid_map) *last_uids);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*build_init)(struct fts_backend *backend, uint32_t *last_uid_r,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct fts_backend_build_context **ctx_r);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen void (*build_hdr)(struct fts_backend_build_context *ctx, uint32_t uid);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen bool (*build_body_begin)(struct fts_backend_build_context *ctx,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen uint32_t uid, const char *content_type,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen const char *content_disposition);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen void (*build_body_end)(struct fts_backend_build_context *ctx);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*build_more)(struct fts_backend_build_context *ctx,
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen const unsigned char *data, size_t size);
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen int (*build_deinit)(struct fts_backend_build_context *ctx);
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen void (*expunge)(struct fts_backend *backend, struct mail *mail);
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen void (*expunge_finish)(struct fts_backend *backend,
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen struct mailbox *box, bool committed);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*refresh)(struct fts_backend *backend);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*lookup)(struct fts_backend *backend, const char *key,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen enum fts_lookup_flags flags,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *definite_uids,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *maybe_uids);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen int (*filter)(struct fts_backend *backend, const char *key,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen enum fts_lookup_flags flags,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *definite_uids,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *maybe_uids);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen int (*lookup2)(struct fts_backend_lookup_context *ctx,
a1044a46a8f3512173f4ea2684ef1fc3e61645c7Timo Sirainen ARRAY_TYPE(seq_range) *definite_uids,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *maybe_uids,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(fts_score_map) *scores);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen};
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenenum fts_backend_flags {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen /* Backend supports virtual mailbox lookups. */
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen FTS_BACKEND_FLAG_VIRTUAL_LOOKUPS = 0x02,
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen /* Backend supports indexing binary MIME parts */
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen FTS_BACKEND_FLAG_BINARY_MIME_PARTS = 0x04
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen};
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenstruct fts_backend {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen const char *name;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen enum fts_backend_flags flags;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct fts_backend_vfuncs v;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct mailbox *box;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen unsigned int building:1;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen};
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenstruct fts_backend_build_context {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct fts_backend *backend;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
4db61af2cfe2b206113bcc4b6153521679702bb4Timo Sirainen unsigned int failed:1;
2ccb478c35972517721ce415d81fcbd11a73fad3Timo Sirainen};
37e8420b32a0fa3442c405616980e45beb494104Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenstruct fts_backend_lookup_field {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen const char *key;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen enum fts_lookup_flags flags;
61f39b0358a72ebc693d84ba5bac74489ee7df41Timo Sirainen};
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenstruct fts_backend_lookup_context {
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen struct fts_backend *backend;
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen pool_t pool;
1fb5e50695bbbc0da082e5a6f19f29d2bb2f6531Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_DEFINE(fields, struct fts_backend_lookup_field);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen};
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenvoid fts_backend_register(const struct fts_backend *backend);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenvoid fts_backend_unregister(const char *name);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenbool fts_backend_default_can_index(const char *content_type);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainenvoid fts_filter_uids(ARRAY_TYPE(seq_range) *definite_dest,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen const ARRAY_TYPE(seq_range) *definite_filter,
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen ARRAY_TYPE(seq_range) *maybe_dest,
e22ec7998afd426c53c658483ce66b6e404e27c6Timo Sirainen const ARRAY_TYPE(seq_range) *maybe_filter);
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen#endif
b772ddf3cfb606dddaa465b317a0dc01bf06c6e4Timo Sirainen