Mercurial > dovecot > core-2.2
changeset 19303:a5e47d9637c3
dict-sql: dict_lookup_async() didn't call callback on query build failures.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 14 Oct 2015 13:32:02 +0300 |
parents | 3b1e7941542f |
children | 8f7a0201ebe3 |
files | src/lib-dict/dict-sql.c |
diffstat | 1 files changed, 20 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- 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;