fts-backend-lucene.c revision 809923ba26218971792182ae8894936f9ac99364
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster/* Copyright (c) 2006-2008 Dovecot authors, see the included COPYING file */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic MODULE_CONTEXT_DEFINE_INIT(fts_lucene_storage_module,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic void fts_backend_select(struct lucene_fts_backend *backend)
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenk if (backend->lstorage->selected_box != backend->box) {
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster lucene_index_select_mailbox(backend->lstorage->index,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster backend->lstorage->selected_box = backend->box;
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic struct fts_backend *fts_backend_lucene_init(struct mailbox *box)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster path = mail_storage_get_mailbox_index_dir(box->storage,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster /* in-memory indexes */
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster path = t_strconcat(path, "/"LUCENE_INDEX_DIR_NAME, NULL);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster lock_path = t_strdup_printf("%s/"LUCENE_LOCK_SUBDIR_NAME, path);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster i_error("mkdir_parents(%s) failed: %m", lock_path);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster lstorage = i_new(struct lucene_mail_storage, 1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster lstorage->index = lucene_index_init(path, lock_path);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster MODULE_CONTEXT_SET(box->storage, fts_lucene_storage_module,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterstatic void fts_backend_lucene_deinit(struct fts_backend *_backend)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_get_last_uid(struct fts_backend *_backend,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return lucene_index_get_last_uid(backend->lstorage->index, last_uid_r);
4709b991352c6de69ba02928ed6cbf373ca62ed5jeff.schenkfts_backend_lucene_build_init(struct fts_backend *_backend,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster if (lucene_index_build_init(backend->lstorage->index,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster ctx = i_new(struct fts_backend_build_context, 1);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_build_more(struct fts_backend_build_context *ctx,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster i_assert(backend->lstorage->selected_box == backend->box);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster return lucene_index_build_more(backend->lstorage->index,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_build_deinit(struct fts_backend_build_context *ctx)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster i_assert(backend->lstorage->selected_box == backend->box);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster lucene_index_build_deinit(backend->lstorage->index);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_expunge(struct fts_backend *_backend, struct mail *mail)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster (void)lucene_index_expunge(backend->lstorage->index, mail->uid);
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_expunge_finish(struct fts_backend *_backend ATTR_UNUSED,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_lock(struct fts_backend *_backend ATTR_UNUSED)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_unlock(struct fts_backend *_backend ATTR_UNUSED)
8af80418ba1ec431c8027fa9668e5678658d3611Allan Fosterfts_backend_lucene_lookup(struct fts_backend *_backend,
8af80418ba1ec431c8027fa9668e5678658d3611Allan Foster i_assert((flags & FTS_LOOKUP_FLAG_INVERT) == 0);