static int driver_mysql_connect(struct sql_db *_db)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
const char *unix_socket, *host;
unsigned long client_flags = db->client_flags;
unsigned int secs_used;
static void driver_mysql_disconnect(struct sql_db *_db)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
if (db->mysql != NULL)
mysql_close(db->mysql);
db->mysql = NULL;
static void driver_mysql_deinit_v(struct sql_db *_db)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
_db->no_reconnect = TRUE;
sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
static const char *
driver_mysql_escape_string(struct sql_db *_db, const char *string)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
size_t len = strlen(string);
char *to;
static void driver_mysql_exec(struct sql_db *_db, const char *query)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
struct event *event = event_create(_db->event);
(void)driver_mysql_do_query(db, query, event);
static struct sql_result *
driver_mysql_query_s(struct sql_db *_db, const char *query)
{
- struct mysql_db *db = (struct mysql_db *)_db;
+ struct mysql_db *db = container_of(_db, struct mysql_db, api);
struct mysql_result *result;
struct event *event;
int ret;
static void driver_mysql_result_free(struct sql_result *_result)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
i_assert(_result != &sql_not_connected_result);
if (_result->callback)
static int driver_mysql_result_next_row(struct sql_result *_result)
{
- struct mysql_result *result = (struct mysql_result *)_result;
- struct mysql_db *db = (struct mysql_db *)_result->db;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
+ struct mysql_db *db = container_of(_result->db, struct mysql_db, api);
int ret;
if (result->result == NULL) {
static unsigned int
driver_mysql_result_get_fields_count(struct sql_result *_result)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
driver_mysql_result_fetch_fields(result);
return result->fields_count;
static const char *
driver_mysql_result_get_field_name(struct sql_result *_result, unsigned int idx)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
driver_mysql_result_fetch_fields(result);
i_assert(idx < result->fields_count);
static int driver_mysql_result_find_field(struct sql_result *_result,
const char *field_name)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
unsigned int i;
driver_mysql_result_fetch_fields(result);
driver_mysql_result_get_field_value(struct sql_result *_result,
unsigned int idx)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
return (const char *)result->row[idx];
}
driver_mysql_result_get_field_value_binary(struct sql_result *_result,
unsigned int idx, size_t *size_r)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
unsigned long *lengths;
lengths = mysql_fetch_lengths(result->result);
static const char *const *
driver_mysql_result_get_values(struct sql_result *_result)
{
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
return (const char *const *)result->row;
}
static const char *driver_mysql_result_get_error(struct sql_result *_result)
{
- struct mysql_db *db = (struct mysql_db *)_result->db;
+ struct mysql_db *db = container_of(_result->db, struct mysql_db, api);
const char *errstr;
unsigned int idle_time;
int err;
ctx->failed = TRUE;
ret = -1;
} else if (affected_rows_r != NULL) {
- struct mysql_result *result = (struct mysql_result *)_result;
+ struct mysql_result *result =
+ container_of(_result, struct mysql_result, api);
i_assert(result->affected_rows != (my_ulonglong)-1);
*affected_rows_r = result->affected_rows;
const char **error_r)
{
struct mysql_transaction_context *ctx =
- (struct mysql_transaction_context *)_ctx;
- struct mysql_db *db = (struct mysql_db *)_ctx->db;
+ container_of(_ctx, struct mysql_transaction_context, ctx);
+ struct mysql_db *db = container_of(_ctx->db, struct mysql_db, api);
int ret = 1;
*error_r = NULL;
driver_mysql_transaction_rollback(struct sql_transaction_context *_ctx)
{
struct mysql_transaction_context *ctx =
- (struct mysql_transaction_context *)_ctx;
+ container_of(_ctx, struct mysql_transaction_context, ctx);
if (ctx->failed) {
bool rolledback = FALSE;
unsigned int *affected_rows)
{
struct mysql_transaction_context *ctx =
- (struct mysql_transaction_context *)_ctx;
+ container_of(_ctx, struct mysql_transaction_context, ctx);
sql_transaction_add_query(&ctx->ctx, ctx->query_pool,
query, affected_rows);