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);
 }