fts-storage.c revision f0bf9880c05266114a9b85bf95b72f6cdf83b901
76b43e4417bab52e913da39b5f5bc2a130d3f149Timo Sirainen/* Copyright (C) 2006 Timo Sirainen */
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen *((void **)array_idx_modifiable(&(obj)->module_contexts, \
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen const char *env;
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenstatic unsigned int fts_storage_module_id = 0;
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenstatic int fts_mailbox_close(struct mailbox *box)
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenstatic int uid_range_to_seq(struct mailbox *box,
ac713658d206e8d001fef7c0e36945793f2eb942Timo Sirainen unsigned int i, count;
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainen for (i = 0; i < count; i++) {
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen if (mailbox_get_uids(box, range[i].seq1, range[i].seq2,
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainenstatic int fts_build_mail_flush(struct fts_storage_build_context *ctx)
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen if (fts_backend_build_more(ctx->build, ctx->uid, str_data(ctx->headers),
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenstatic bool fts_build_update_save_part(struct fts_storage_build_context *ctx,
b44650b0f48a4b5f0dc240ed836833a00b643b9fTimo Sirainen /* we'll index only text/xxx and message/rfc822 parts for now */
a3dd97fb6d92a89c3de0597fed2d4b044c7aeb84Timo Sirainenstatic int fts_build_mail_header(struct fts_storage_build_context *ctx,
473080c7c0d25ddfdf77e7dfa0ba8f73c6c669d5Timo Sirainen const struct message_header_line *hdr = block->hdr;
157bce86d0a01477bb8ebd0d380e6b2297f326f7Timo Sirainen /* hdr->full_value is always set because we get the block from
8eb94c5190ba09bb6f6f068eec7bf96750f08d1dTimo Sirainen message_decoder */
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen str_append_n(ctx->headers, hdr->middle, hdr->middle_len);
8eb94c5190ba09bb6f6f068eec7bf96750f08d1dTimo Sirainen str_append_n(ctx->headers, hdr->full_value, hdr->full_value_len);
e9503210d3521a6833ed62dc332fc42ffb0e7a13Timo Sirainen if (strcasecmp(hdr->name, "Content-Type") == 0) {
747e77e3ab073a8e9e69c7a3e71b4593c5655d03Timo Sirainenstatic int fts_build_mail(struct fts_storage_build_context *ctx)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen input = mail_get_stream(ctx->mail, NULL, NULL);
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen parser = message_parser_init(pool_datastack_create(), input);
e9503210d3521a6833ed62dc332fc42ffb0e7a13Timo Sirainen ret = message_parser_parse_next_block(parser, &raw_block);
25ee72451d16374ed27fdbf829f4ec756c778352Timo Sirainen if (!message_decoder_decode_next_block(decoder, &raw_block,
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen /* end of headers */
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen if (fts_build_update_save_part(ctx, &block)) {
43a66a0b16299bd4f7615acd85e98bd3832c54d5Timo Sirainen if (fts_backend_build_more(ctx->build, ctx->mail->uid,
return ret;
struct mailbox_transaction_context *t)
int ret = 0;
return ret;
unsigned int count = 0;
int ret;
t_push();
t_pop();
if (ret < 0)
const char *key;
case SEARCH_BODY_FAST:
case SEARCH_TEXT_FAST:
case SEARCH_BODY:
case SEARCH_TEXT:
case SEARCH_HEADER:
uid_result) < 0) {
FTS_BACKEND_FLAG_DEFINITE_LOOKUPS) != 0) {
case SEARCH_OR:
case SEARCH_SUB:
const char *key;
return TRUE;
return TRUE;
return FALSE;
case SEARCH_BODY_FAST:
case SEARCH_TEXT_FAST:
case SEARCH_BODY:
case SEARCH_TEXT:
case SEARCH_HEADER:
case SEARCH_OR:
case SEARCH_SUB:
static struct mail_search_context *
return ctx;
return ctx;
int ret;
if (ret == 0) {
if (ret == 0)
unsigned int count;
int ret;
return ret;
static struct mail *
return _mail;
const char *const *tmp;
FTS_BACKEND_FLAG_EXACT_LOOKUPS) != 0) {
*tmp);
*tmp);
static struct mailbox_transaction_context *
struct mailbox_transaction_context *t;
bool committed)
int ret;
return ret;
const char *env;
if (!fts_storage_module_id_set) {