fts-storage.c revision 38a4c09de37bc2ebdc38427a2b958c46dfdcffb1
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen/* Copyright (c) 2006-2007 Dovecot authors, see the included COPYING file */
1f1e81aab38d833d1c9cdc244c91fd762e0080d4Timo Sirainen struct timeval search_start_time, last_notify;
1f1e81aab38d833d1c9cdc244c91fd762e0080d4Timo Sirainen union mailbox_transaction_module_context module_ctx;
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainenstatic MODULE_CONTEXT_DEFINE_INIT(fts_storage_module,
e82af44fe25ca9b88210f313548dc08538e4a677Timo Sirainenstatic MODULE_CONTEXT_DEFINE_INIT(fts_mail_module, &mail_module_register);
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainenstatic int fts_mailbox_close(struct mailbox *box)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainenstatic int fts_build_mail_flush_headers(struct fts_storage_build_context *ctx)
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen if (fts_backend_build_more(ctx->build, ctx->uid, str_data(ctx->headers),
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainenstatic bool fts_build_want_index_part(const struct message_block *block)
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen /* we'll index only text/xxx and message/rfc822 parts for now */
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainenstatic void fts_build_mail_header(struct fts_storage_build_context *ctx,
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen const struct message_header_line *hdr = block->hdr;
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen /* hdr->full_value is always set because we get the block from
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen message_decoder */
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen str_append_n(ctx->headers, hdr->middle, hdr->middle_len);
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen str_append_n(ctx->headers, hdr->full_value, hdr->full_value_len);
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainenstatic int fts_build_mail(struct fts_storage_build_context *ctx, uint32_t uid)
517d1e7142d57299c733b30423e35e7e1f8d01d6Timo Sirainen if (mail_get_stream(ctx->mail, NULL, NULL, &input) < 0)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen parser = message_parser_init(pool_datastack_create(), input,
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen ret = message_parser_parse_next_block(parser, &raw_block);
91e4199476cb2add8143c18583fa57e1decfea88Timo Sirainen if (raw_block.hdr == NULL && raw_block.size != 0 &&
0727e38ac12efb8963a339daf56255e2be1f29fcTimo Sirainen /* skipping this body */
1f1e81aab38d833d1c9cdc244c91fd762e0080d4Timo Sirainen if (!message_decoder_decode_next_block(decoder, &raw_block,
98a711be68ba64e1cabf8cacc150af44421e2ac9Timo Sirainen /* end of headers */
70cb37c37e4dce8f57cd3f882f7444e76b918befTimo Sirainen if (fts_backend_build_more(ctx->build, ctx->uid,
08aea01ef9a9d20703e0fcf8618e6195c0037a44Timo Sirainenstatic int fts_build_init(struct fts_search_context *fctx)
08aea01ef9a9d20703e0fcf8618e6195c0037a44Timo Sirainen struct mailbox_transaction_context *t = fctx->t;
08aea01ef9a9d20703e0fcf8618e6195c0037a44Timo Sirainen struct fts_backend *backend = fctx->build_backend;
70cb37c37e4dce8f57cd3f882f7444e76b918befTimo Sirainen if (fts_backend_get_last_uid(backend, &last_uid) < 0)
08aea01ef9a9d20703e0fcf8618e6195c0037a44Timo Sirainen mailbox_get_uids(t->box, last_uid+1, (uint32_t)-1,
int ret = 0;
return ret;
const char *text;
float percentage;
t_push();
t_pop();
unsigned int count = 0;
int ret;
t_push();
t_pop();
if (ret < 0)
return TRUE;
return FALSE;
return TRUE;
return TRUE;
static struct mail_search_context *
fctx->t = t;
return ctx;
return ctx;
int ret;
if (ret == 0) {
if (ret > 0)
case SEARCH_TEXT:
case SEARCH_BODY:
case SEARCH_BODY_FAST:
case SEARCH_TEXT_FAST:
bool use_maybe;
int ret;
&def_count);
&maybe_count);
if (use_maybe)
if (!use_maybe) {
return ret;
static struct mail *
return _mail;
const char *const *tmp;
FTS_BACKEND_FLAG_SUBSTRING_LOOKUPS) != 0) {
*tmp);
*tmp);
static struct mailbox_transaction_context *
struct mailbox_transaction_context *t;
bool committed)
int ret;
return ret;
const char *env;