Mercurial > dovecot > original-hg > dovecot-1.2
changeset 7821:654cd4d966be HEAD
dict sql: Iterated keys need to contain private/shared prefix.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 11 Jun 2008 23:55:36 +0300 |
parents | 3fa91ced11e8 |
children | 5abe05d7d093 |
files | src/lib-dict/dict-sql.c |
diffstat | 1 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-dict/dict-sql.c Wed Jun 11 23:48:57 2008 +0300 +++ b/src/lib-dict/dict-sql.c Wed Jun 11 23:55:36 2008 +0300 @@ -28,6 +28,8 @@ struct dict_iterate_context ctx; struct sql_result *result; + char *prev_key; + bool priv; }; struct sql_dict_transaction_context { @@ -220,6 +222,8 @@ ctx->result = NULL; return &ctx->ctx; } + ctx->priv = priv; + T_BEGIN { string_t *query = t_str_new(256); str_printfa(query, "SELECT %s, %s FROM %s WHERE ", @@ -268,6 +272,7 @@ { struct sql_dict_iterate_context *ctx = (struct sql_dict_iterate_context *)_ctx; + const char *key; int ret; if (ctx->result == NULL) @@ -276,7 +281,14 @@ if ((ret = sql_result_next_row(ctx->result)) <= 0) return ret; - *key_r = sql_result_get_field_value(ctx->result, 0); + key = sql_result_get_field_value(ctx->result, 0); + i_free(ctx->prev_key); + if (ctx->priv) + ctx->prev_key = i_strconcat(DICT_PATH_PRIVATE, key, NULL); + else + ctx->prev_key = i_strconcat(DICT_PATH_SHARED, key, NULL); + + *key_r = ctx->prev_key; *value_r = sql_result_get_field_value(ctx->result, 1); return 1; } @@ -287,6 +299,7 @@ (struct sql_dict_iterate_context *)_ctx; sql_result_free(ctx->result); + i_free(ctx->prev_key); i_free(ctx); }