struct sql_dict *dict = (struct sql_dict *)_dict;
const struct dict_sql_map *map;
struct sql_result *result = NULL;
+ string_t *query = t_str_new(256);
+ const char *error;
int ret;
- T_BEGIN {
- string_t *query = t_str_new(256);
- const char *error;
-
- 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;
-
+ ret = sql_lookup_get_query(dict, key, query, &map, &error);
if (ret < 0) {
+ i_error("%s", error);
*value_r = NULL;
return -1;
}
+ result = sql_query_s(dict->db, str_c(query));
ret = sql_result_next_row(result);
if (ret <= 0) {
struct sql_dict *dict = (struct sql_dict *)_dict;
const struct dict_sql_map *map;
struct sql_dict_lookup_context *ctx;
+ string_t *query = t_str_new(256);
+ const char *error;
- T_BEGIN {
- string_t *query = t_str_new(256);
- const char *error;
-
- if (sql_lookup_get_query(dict, key, query, &map, &error) < 0) {
- struct dict_lookup_result result;
+ if (sql_lookup_get_query(dict, key, query, &map, &error) < 0) {
+ struct dict_lookup_result result;
- i_zero(&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;
- ctx->map = map;
- sql_query(dict->db, str_c(query),
- sql_dict_lookup_async_callback, ctx);
- }
- } T_END;
+ i_zero(&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;
+ ctx->map = map;
+ sql_query(dict->db, str_c(query),
+ sql_dict_lookup_async_callback, ctx);
+ }
}
static const struct dict_sql_map *
static int sql_dict_iterate_next_query(struct sql_dict_iterate_context *ctx)
{
struct sql_dict *dict = (struct sql_dict *)ctx->ctx.dict;
+ string_t *query = t_str_new(256);
const char *error;
unsigned int path_idx = ctx->path_idx;
int ret;
- T_BEGIN {
- string_t *query = t_str_new(256);
-
- ret = sql_dict_iterate_build_next_query(ctx, query, &error);
- if (ret < 0) {
- /* failed */
- i_error("sql dict iterate failed for %s: %s",
- ctx->paths[path_idx], error);
- } else if (ret == 0) {
- /* this is expected error */
- } else if ((ctx->flags & DICT_ITERATE_FLAG_ASYNC) == 0) {
- ctx->result = sql_query_s(dict->db, str_c(query));
- } else {
- i_assert(ctx->result == NULL);
- ctx->synchronous_result = TRUE;
- sql_query(dict->db, str_c(query),
- sql_dict_iterate_callback, ctx);
- ctx->synchronous_result = FALSE;
- }
- } T_END;
+ ret = sql_dict_iterate_build_next_query(ctx, query, &error);
+ if (ret < 0) {
+ /* failed */
+ i_error("sql dict iterate failed for %s: %s",
+ ctx->paths[path_idx], error);
+ } else if (ret == 0) {
+ /* this is expected error */
+ } else if ((ctx->flags & DICT_ITERATE_FLAG_ASYNC) == 0) {
+ ctx->result = sql_query_s(dict->db, str_c(query));
+ } else {
+ i_assert(ctx->result == NULL);
+ ctx->synchronous_result = TRUE;
+ sql_query(dict->db, str_c(query),
+ sql_dict_iterate_callback, ctx);
+ ctx->synchronous_result = FALSE;
+ }
return ret;
}
struct sql_dict *dict = (struct sql_dict *)_ctx->dict;
const struct dict_sql_map *map;
ARRAY_TYPE(const_string) values;
+ struct dict_sql_build_query build;
+ struct dict_sql_build_query_field field;
+ const char *query, *error;
map = sql_dict_find_map(dict, key, &values);
if (map == NULL) {
return;
}
- T_BEGIN {
- struct dict_sql_build_query build;
- struct dict_sql_build_query_field field;
- const char *query, *error;
-
- field.map = map;
- field.value = value;
+ field.map = map;
+ field.value = value;
- i_zero(&build);
- build.dict = dict;
- t_array_init(&build.fields, 1);
- array_append(&build.fields, &field, 1);
- build.extra_values = &values;
- build.key1 = key[0];
+ i_zero(&build);
+ build.dict = dict;
+ t_array_init(&build.fields, 1);
+ array_append(&build.fields, &field, 1);
+ build.extra_values = &values;
+ build.key1 = key[0];
- if (sql_dict_set_query(ctx, &build, &query, &error) < 0) {
- i_error("dict-sql: Failed to set %s=%s: %s",
- key, value, error);
- ctx->failed = TRUE;
- } else {
- sql_update(ctx->sql_ctx, query);
- }
- } T_END;
+ if (sql_dict_set_query(ctx, &build, &query, &error) < 0) {
+ i_error("dict-sql: Failed to set %s=%s: %s",
+ key, value, error);
+ ctx->failed = TRUE;
+ } else {
+ sql_update(ctx->sql_ctx, query);
+ }
}
static void sql_dict_unset(struct dict_transaction_context *_ctx,
struct sql_dict *dict = (struct sql_dict *)_ctx->dict;
const struct dict_sql_map *map;
ARRAY_TYPE(const_string) values;
+ string_t *query = t_str_new(256);
+ const char *error;
if (ctx->prev_inc_map != NULL)
sql_dict_prev_inc_flush(ctx);
return;
}
- T_BEGIN {
- string_t *query = t_str_new(256);
- const char *error;
-
- str_printfa(query, "DELETE FROM %s", map->table);
- sql_dict_transaction_add_timestamp(ctx, query);
- if (sql_dict_where_build(dict, map, &values, key[0],
- SQL_DICT_RECURSE_NONE, query, &error) < 0) {
- i_error("dict-sql: Failed to delete %s: %s", key, error);
- ctx->failed = TRUE;
- } else {
- sql_update(ctx->sql_ctx, str_c(query));
- }
- } T_END;
+ str_printfa(query, "DELETE FROM %s", map->table);
+ sql_dict_transaction_add_timestamp(ctx, query);
+ if (sql_dict_where_build(dict, map, &values, key[0],
+ SQL_DICT_RECURSE_NONE, query, &error) < 0) {
+ i_error("dict-sql: Failed to delete %s: %s", key, error);
+ ctx->failed = TRUE;
+ } else {
+ sql_update(ctx->sql_ctx, str_c(query));
+ }
}
static void
struct sql_dict *dict = (struct sql_dict *)ctx->ctx.dict;
const struct dict_sql_map *map;
ARRAY_TYPE(const_string) values;
+ struct dict_sql_build_query build;
+ struct dict_sql_build_query_field field;
+ const char *query, *error;
map = sql_dict_find_map(dict, key, &values);
i_assert(map != NULL);
- T_BEGIN {
- struct dict_sql_build_query build;
- struct dict_sql_build_query_field field;
- const char *query, *error;
+ field.map = map;
+ field.value = t_strdup_printf("%lld", diff);
- field.map = map;
- field.value = t_strdup_printf("%lld", diff);
+ i_zero(&build);
+ build.dict = dict;
+ t_array_init(&build.fields, 1);
+ array_append(&build.fields, &field, 1);
+ build.extra_values = &values;
+ build.key1 = key[0];
+ build.inc = TRUE;
- i_zero(&build);
- build.dict = dict;
- t_array_init(&build.fields, 1);
- array_append(&build.fields, &field, 1);
- build.extra_values = &values;
- build.key1 = key[0];
- build.inc = TRUE;
-
- if (sql_dict_update_query(ctx, &build, &query, &error) < 0) {
- i_error("dict-sql: Failed to increase %s: %s", key, error);
- ctx->failed = TRUE;
- } else {
- sql_update_get_rows(ctx->sql_ctx, query,
- sql_dict_next_inc_row(ctx));
- }
- } T_END;
+ if (sql_dict_update_query(ctx, &build, &query, &error) < 0) {
+ i_error("dict-sql: Failed to increase %s: %s", key, error);
+ ctx->failed = TRUE;
+ } else {
+ sql_update_get_rows(ctx->sql_ctx, query,
+ sql_dict_next_inc_row(ctx));
+ }
}
static void sql_dict_prev_set_flush(struct sql_dict_transaction_context *ctx)
ctx->prev_inc_key, key, &values)) {
sql_dict_prev_inc_flush(ctx);
sql_dict_atomic_inc_real(ctx, key, diff);
- } else T_BEGIN {
+ } else {
struct dict_sql_build_query build;
struct dict_sql_build_query_field *field;
const char *query, *error;
i_free_and_null(ctx->prev_inc_key);
ctx->prev_inc_map = NULL;
- } T_END;
+ }
}
static struct dict sql_dict = {
pool_t orig_pool = pool;
int ret;
- T_BEGIN {
- ldap_dict_lookup_async(dict, key, ldap_dict_lookup_done, &res);
+ ldap_dict_lookup_async(dict, key, ldap_dict_lookup_done, &res);
- if ((ret = ldap_dict_wait(dict)) == 0) {
- if (res.ret == 0) {
- *value_r = p_strdup(orig_pool, res.value);
- } else ret = res.ret;
- }
- } T_END;
+ if ((ret = ldap_dict_wait(dict)) == 0) {
+ if (res.ret == 0) {
+ *value_r = p_strdup(orig_pool, res.value);
+ } else ret = res.ret;
+ }
return ret;
}
/* key needs to be transformed into something else */
ARRAY_TYPE(const_string) values;
- T_BEGIN {
- const char *attributes[2] = {0, 0};
- t_array_init(&values, 8);
- const struct dict_ldap_map *map = ldap_dict_find_map(ctx, key, &values);
-
- if (map != NULL) {
- op->map = map;
- attributes[0] = map->value_attribute;
- /* build lookup */
- i_zero(&input);
- input.base_dn = map->base_dn;
- input.scope = map->scope_val;
- ldap_dict_build_query(ctx, map, &values, strncmp(key, DICT_PATH_PRIVATE, strlen(DICT_PATH_PRIVATE))==0, query);
- input.filter = str_c(query);
- input.attributes = attributes;
- input.timeout_secs = ctx->set->timeout;
- ctx->pending++;
- ldap_search_start(ctx->client, &input, ldap_dict_lookup_callback, op);
- } else {
- op->res.error = "no such key";
- callback(&(op->res), context);
- pool_unref(&oppool);
- }
- } T_END;
+ const char *attributes[2] = {0, 0};
+ t_array_init(&values, 8);
+ const struct dict_ldap_map *map = ldap_dict_find_map(ctx, key, &values);
+
+ if (map != NULL) {
+ op->map = map;
+ attributes[0] = map->value_attribute;
+ /* build lookup */
+ i_zero(&input);
+ input.base_dn = map->base_dn;
+ input.scope = map->scope_val;
+ ldap_dict_build_query(ctx, map, &values, strncmp(key, DICT_PATH_PRIVATE, strlen(DICT_PATH_PRIVATE))==0, query);
+ input.filter = str_c(query);
+ input.attributes = attributes;
+ input.timeout_secs = ctx->set->timeout;
+ ctx->pending++;
+ ldap_search_start(ctx->client, &input, ldap_dict_lookup_callback, op);
+ } else {
+ op->res.error = "no such key";
+ callback(&(op->res), context);
+ pool_unref(&oppool);
+ }
}
struct dict dict_driver_ldap = {