dovecot-2.2: dict-sql: dict_lookup_async() didn't call callback ...

dovecot at dovecot.org dovecot at dovecot.org
Wed Oct 14 10:52:25 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/a5e47d9637c3
changeset: 19303:a5e47d9637c3
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Oct 14 13:32:02 2015 +0300
description:
dict-sql: dict_lookup_async() didn't call callback on query build failures.

diffstat:

 src/lib-dict/dict-sql.c |  26 ++++++++++++++++++++------
 1 files changed, 20 insertions(+), 6 deletions(-)

diffs (65 lines):

diff -r 3b1e7941542f -r a5e47d9637c3 src/lib-dict/dict-sql.c
--- a/src/lib-dict/dict-sql.c	Tue Oct 13 21:57:29 2015 +0300
+++ b/src/lib-dict/dict-sql.c	Wed Oct 14 13:32:02 2015 +0300
@@ -337,7 +337,8 @@
 
 static int
 sql_lookup_get_query(struct sql_dict *dict, const char *key,
-		     string_t *query, const struct dict_sql_map **map_r)
+		     string_t *query, const struct dict_sql_map **map_r,
+		     const char **error_r)
 {
 	const struct dict_sql_map *map;
 	ARRAY_TYPE(const_string) values;
@@ -345,14 +346,16 @@
 
 	map = *map_r = sql_dict_find_map(dict, key, &values);
 	if (map == NULL) {
-		i_error("sql dict lookup: Invalid/unmapped key: %s", key);
+		*error_r = t_strdup_printf(
+			"sql dict lookup: Invalid/unmapped key: %s", key);
 		return -1;
 	}
 	str_printfa(query, "SELECT %s FROM %s",
 		    map->value_field, map->table);
 	if (sql_dict_where_build(dict, map, &values, key[0],
 				 SQL_DICT_RECURSE_NONE, query, &error) < 0) {
-		i_error("sql dict lookup: Failed to lookup key %s: %s", key, error);
+		*error_r = t_strdup_printf(
+			"sql dict lookup: Failed to lookup key %s: %s", key, error);
 		return -1;
 	}
 	return 0;
@@ -424,9 +427,12 @@
 
 	T_BEGIN {
 		string_t *query = t_str_new(256);
+		const char *error;
 
-		ret = sql_lookup_get_query(dict, key, query, &map);
-		if (ret == 0)
+		ret = sql_lookup_get_query(dict, key, query, &map, &error);
+		if (ret < 0)
+			i_error("%s", error);
+		else
 			result = sql_query_s(dict->db, str_c(query));
 	} T_END;
 
@@ -485,8 +491,16 @@
 
 	T_BEGIN {
 		string_t *query = t_str_new(256);
+		const char *error;
 
-		if (sql_lookup_get_query(dict, key, query, &map) == 0) {
+		if (sql_lookup_get_query(dict, key, query, &map, &error) < 0) {
+			struct dict_lookup_result result;
+
+			memset(&result, 0, sizeof(result));
+			result.ret = -1;
+			result.error = error;
+			callback(&result, context);
+		} else {
 			ctx = i_new(struct sql_dict_lookup_context, 1);
 			ctx->callback = callback;
 			ctx->context = context;


More information about the dovecot-cvs mailing list