From: Timo Sirainen Date: Mon, 4 Apr 2011 13:02:05 +0000 (+0300) Subject: lib-storage: Removed struct mail_private.extra_* fields. X-Git-Tag: 2.1.alpha1~274 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=045aa2f81225ceffbffe71a088dabb8881c65512;p=thirdparty%2Fdovecot%2Fcore.git lib-storage: Removed struct mail_private.extra_* fields. There isn't much point in keeping them separated. --- diff --git a/src/lib-storage/index/index-mail-headers.c b/src/lib-storage/index/index-mail-headers.c index 69db763977..aba72d49b9 100644 --- a/src/lib-storage/index/index-mail-headers.c +++ b/src/lib-storage/index/index-mail-headers.c @@ -152,7 +152,6 @@ get_header_field_idx(struct mailbox *box, const char *field, bool index_mail_want_parse_headers(struct index_mail *mail) { if (mail->wanted_headers != NULL || - mail->mail.extra_wanted_headers != NULL || mail->data.save_bodystructure_header) return TRUE; @@ -225,13 +224,6 @@ void index_mail_parse_header_init(struct index_mail *mail, &mail->header_match_value); } } - if (mail->mail.extra_wanted_headers != NULL) { - headers = mail->mail.extra_wanted_headers; - for (i = 0; i < headers->count; i++) { - array_idx_set(&mail->header_match, headers->idx[i], - &mail->header_match_value); - } - } /* register also all the other headers that exist in cache file */ T_BEGIN { diff --git a/src/lib-storage/index/index-search.c b/src/lib-storage/index/index-search.c index f67c06a8fa..e96d124ef0 100644 --- a/src/lib-storage/index/index-search.c +++ b/src/lib-storage/index/index-search.c @@ -1036,41 +1036,55 @@ static int search_build_inthreads(struct index_search_context *ctx, static void wanted_sort_fields_get(struct mailbox *box, const enum mail_sort_type *sort_program, + struct mailbox_header_lookup_ctx *wanted_headers, enum mail_fetch_field *wanted_fields_r, struct mailbox_header_lookup_ctx **headers_ctx_r) { - const char *headers[2]; + ARRAY_TYPE(const_string) headers; + const char *header; + unsigned int i; *wanted_fields_r = 0; *headers_ctx_r = NULL; - headers[0] = headers[1] = NULL; + t_array_init(&headers, 8); + header = NULL; switch (sort_program[0] & MAIL_SORT_MASK) { case MAIL_SORT_ARRIVAL: - *wanted_fields_r = MAIL_FETCH_RECEIVED_DATE; + *wanted_fields_r |= MAIL_FETCH_RECEIVED_DATE; break; case MAIL_SORT_CC: - headers[0] = "Cc"; + header = "Cc"; break; case MAIL_SORT_DATE: - *wanted_fields_r = MAIL_FETCH_DATE; + *wanted_fields_r |= MAIL_FETCH_DATE; break; case MAIL_SORT_FROM: - headers[0] = "From"; + header = "From"; break; case MAIL_SORT_SIZE: - *wanted_fields_r = MAIL_FETCH_VIRTUAL_SIZE; + *wanted_fields_r |= MAIL_FETCH_VIRTUAL_SIZE; break; case MAIL_SORT_SUBJECT: - headers[0] = "Subject"; + header = "Subject"; break; case MAIL_SORT_TO: - headers[0] = "To"; + header = "To"; break; } + if (header != NULL) + array_append(&headers, &header, 1); + + if (wanted_headers != NULL) { + for (i = 0; wanted_headers->name[i] != NULL; i++) + array_append(&headers, &wanted_headers->name[i], 1); + } - if (headers[0] != NULL) - *headers_ctx_r = mailbox_header_lookup_init(box, headers); + if (array_count(&headers) > 0) { + (void)array_append_space(&headers); + *headers_ctx_r = mailbox_header_lookup_init(box, + array_idx(&headers, 0)); + } } struct mail_search_context * @@ -1089,11 +1103,6 @@ index_storage_search_init(struct mailbox_transaction_context *t, ctx->view = t->view; ctx->mail_ctx.args = args; ctx->mail_ctx.sort_program = index_sort_program_init(t, sort_program); - ctx->mail_ctx.wanted_fields = wanted_fields; - if (wanted_headers != NULL) { - ctx->mail_ctx.wanted_headers = wanted_headers; - mailbox_header_lookup_ref(wanted_headers); - } ctx->max_mails = t->box->storage->set->mail_prefetch_count + 1; if (ctx->max_mails == 0) @@ -1119,10 +1128,14 @@ index_storage_search_init(struct mailbox_transaction_context *t, } if (sort_program != NULL) { - wanted_sort_fields_get(ctx->box, sort_program, - &ctx->extra_wanted_fields, - &ctx->extra_wanted_headers); + wanted_sort_fields_get(ctx->box, sort_program, wanted_headers, + &ctx->mail_ctx.wanted_fields, + &ctx->mail_ctx.wanted_headers); + } else if (wanted_headers != NULL) { + ctx->mail_ctx.wanted_headers = wanted_headers; + mailbox_header_lookup_ref(wanted_headers); } + ctx->mail_ctx.wanted_fields |= wanted_fields; search_get_seqset(ctx, status.messages, args->args); (void)mail_search_args_foreach(args->args, search_init_arg, ctx); @@ -1157,8 +1170,6 @@ int index_storage_search_deinit(struct mail_search_context *_ctx) if (ctx->mail_ctx.wanted_headers != NULL) mailbox_header_lookup_unref(&ctx->mail_ctx.wanted_headers); - if (ctx->extra_wanted_headers != NULL) - mailbox_header_lookup_unref(&ctx->extra_wanted_headers); if (ctx->mail_ctx.sort_program != NULL) index_sort_program_deinit(&ctx->mail_ctx.sort_program); if (ctx->thread_ctx != NULL) @@ -1456,8 +1467,6 @@ struct mail *index_search_get_mail(struct index_search_context *ctx) imail = (struct index_mail *)mail; imail->search_mail = TRUE; imail->mail.stats_track = TRUE; - imail->mail.extra_wanted_fields = ctx->extra_wanted_fields; - imail->mail.extra_wanted_headers = ctx->extra_wanted_headers; array_append(&ctx->mails, &mail, 1); return mail; diff --git a/src/lib-storage/index/index-thread.c b/src/lib-storage/index/index-thread.c index cbe154a86d..59126a5925 100644 --- a/src/lib-storage/index/index-thread.c +++ b/src/lib-storage/index/index-thread.c @@ -7,13 +7,10 @@ #include "bsearch-insert-pos.h" #include "hash2.h" #include "message-id.h" -#include "mail-index-private.h" -#include "mail-index-sync-private.h" #include "mail-search.h" #include "mail-search-build.h" #include "mailbox-search-result-private.h" #include "index-storage.h" -#include "index-search-private.h" #include "index-thread-private.h" #include @@ -298,11 +295,10 @@ static int mail_thread_index_map_build(struct mail_thread_context *ctx) NULL }; struct mail_thread_mailbox *tbox = MAIL_THREAD_CONTEXT(ctx->box); + struct mailbox_header_lookup_ctx *headers_ctx; struct mail_search_args *search_args; struct mail_search_context *search_ctx; - struct index_search_context *search_ctx_i; struct mail *mail; - struct mail_private *pmail; uint32_t last_uid, seq1, seq2; int ret = 0; @@ -318,10 +314,8 @@ static int mail_thread_index_map_build(struct mail_thread_context *ctx) &tbox->msgid_hash); } - ctx->tmp_mail = mail_alloc(ctx->t, 0, NULL); - pmail = (struct mail_private *)ctx->tmp_mail; - pmail->extra_wanted_headers = - mailbox_header_lookup_init(ctx->box, wanted_headers); + headers_ctx = mailbox_header_lookup_init(ctx->box, wanted_headers); + ctx->tmp_mail = mail_alloc(ctx->t, 0, headers_ctx); /* add all missing UIDs */ ctx->strmap_sync = mail_index_strmap_view_sync_init(tbox->strmap_view, @@ -336,11 +330,8 @@ static int mail_thread_index_map_build(struct mail_thread_context *ctx) search_args = mail_search_build_init(); mail_search_build_add_seqset(search_args, seq1, seq2); - search_ctx = mailbox_search_init(ctx->t, search_args, NULL, 0, NULL); - - search_ctx_i = (struct index_search_context *)search_ctx; - search_ctx_i->extra_wanted_headers = - mailbox_header_lookup_init(ctx->box, wanted_headers); + search_ctx = mailbox_search_init(ctx->t, search_args, NULL, + 0, headers_ctx); while (mailbox_search_next(search_ctx, &mail)) { if (mail_thread_map_add_mail(ctx, mail) < 0) { @@ -586,9 +577,6 @@ int mail_thread_init(struct mailbox *box, struct mail_search_args *args, static void mail_thread_clear(struct mail_thread_context *ctx) { - struct mail_private *pmail = (struct mail_private *)ctx->tmp_mail; - - mailbox_header_lookup_unref(&pmail->extra_wanted_headers); mail_free(&ctx->tmp_mail); (void)mailbox_transaction_commit(&ctx->t); } diff --git a/src/lib-storage/mail-storage-private.h b/src/lib-storage/mail-storage-private.h index 3fc74a5a37..ed774771ee 100644 --- a/src/lib-storage/mail-storage-private.h +++ b/src/lib-storage/mail-storage-private.h @@ -336,12 +336,6 @@ struct mail_private { pool_t pool; ARRAY_DEFINE(module_contexts, union mail_module_context *); - /* temporary extra wanted fields/headers that should be looked up - automatically if possible. for example sort_program fields during - search. */ - enum mail_fetch_field extra_wanted_fields; - struct mailbox_header_lookup_ctx *extra_wanted_headers; - /* these statistics are never reset by mail-storage API: */ unsigned long stats_open_lookup_count;