From: Aki Tuomi Date: Fri, 29 May 2026 11:21:00 +0000 (+0000) Subject: [PATCH] lib-sql: Add sql_result_new_error() helper X-Git-Tag: archive/raspbian/1%2.4.1+dfsg1-6+rpi1+deb13u7^2~83 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=b799c46000e360179fa6206df5494893abfb84c5;p=dovecot.git [PATCH] lib-sql: Add sql_result_new_error() helper Gbp-Pq: Name 0001-lib-sql-Add-sql_result_new_error-helper.patch --- diff --git a/src/lib-sql/sql-api.c b/src/lib-sql/sql-api.c index a25334b..7017ec5 100644 --- a/src/lib-sql/sql-api.c +++ b/src/lib-sql/sql-api.c @@ -66,6 +66,49 @@ ARRAY_TYPE(sql_drivers) sql_drivers; static void sql_query_delayed_callback(struct sql_query_result_delayed *cb); static void sql_commit_delayed_callback(struct sql_commit_result_delayed *cb); +struct sql_result_error { + struct sql_result result; + char *error; +}; + +static void sql_result_error_free(struct sql_result *_result) +{ + struct sql_result_error *result = + container_of(_result, struct sql_result_error, result); + i_free(result->error); + i_free(result); +} + +static int sql_result_error_next_row(struct sql_result *result ATTR_UNUSED) +{ + return -1; +} + +static const char * +sql_result_error_get_error(struct sql_result *_result) +{ + struct sql_result_error *result = + container_of(_result, struct sql_result_error, result); + return result->error; +} + +static const struct sql_result_vfuncs sql_result_error_vfuncs = { + .free = sql_result_error_free, + .next_row = sql_result_error_next_row, + .get_error = sql_result_error_get_error, +}; + +static struct sql_result *sql_result_new_error(const char *error) ATTR_UNUSED; +static struct sql_result *sql_result_new_error(const char *error) +{ + struct sql_result_error *result = i_new(struct sql_result_error, 1); + result->result.v = sql_result_error_vfuncs; + result->result.failed = TRUE; + result->result.refcount = 1; + result->error = i_strdup(error); + return &result->result; +} + void sql_drivers_init_without_drivers(void) { i_array_init(&sql_drivers, 8);