static const char *driver_cassandra_table_prefix(struct sql_db *_db)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
return db->table_prefix == NULL ? "" : db->table_prefix;
}
static int driver_cassandra_connect(struct sql_db *_db)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
CassFuture *future;
i_assert(db->api.state == SQL_DB_STATE_DISCONNECTED);
static void driver_cassandra_disconnect(struct sql_db *_db)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
driver_cassandra_close(db, "Disconnected");
}
static void driver_cassandra_deinit_v(struct sql_db *_db)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
driver_cassandra_close(db, "Deinitialized");
static void driver_cassandra_log_result(struct cassandra_result *result,
bool all_pages, long long reply_usecs)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
struct timeval now;
unsigned int row_count;
static void driver_cassandra_result_free(struct sql_result *_result)
{
- struct cassandra_db *db = (struct cassandra_db *)_result->db;
+ struct cassandra_db *db = container_of(_result->db,struct cassandra_db, api);
struct cassandra_result *result = (struct cassandra_result *)_result;
long long reply_usecs;
static void result_finish(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
bool free_result = TRUE;
result->finished = TRUE;
static void query_resend_with_fallback(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
time_t last_warning =
ioloop_time - db->last_fallback_warning[result->query_type];
static void query_callback(CassFuture *future, void *context)
{
struct cassandra_result *result = context;
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
CassError error = cass_future_error_code(future);
if (error != CASS_OK) {
static void driver_cassandra_init_statement(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
cass_statement_set_consistency(result->statement, result->consistency);
static void driver_cassandra_result_send_query(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
CassFuture *future;
i_assert(result->statement != NULL);
static bool
driver_cassandra_want_fallback_query(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
unsigned int failure_count = db->fallback_failures[result->query_type];
unsigned int i, msecs = CASSANDRA_FALLBACK_FIRST_RETRY_MSECS;
struct timeval tv;
static int driver_cassandra_send_query(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
int ret;
if (!SQL_DB_IS_READY(&db->api)) {
enum cassandra_query_type query_type,
sql_query_callback_t *callback, void *context)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
struct cassandra_result *result;
result = driver_cassandra_query_init(db, query, query_type, FALSE,
static struct sql_result *
driver_cassandra_query_s(struct sql_db *_db, const char *query)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
struct sql_result *result;
driver_cassandra_sync_init(db);
static int driver_cassandra_result_next_page(struct cassandra_result *result)
{
- struct cassandra_db *db = (struct cassandra_db *)result->api.db;
+ struct cassandra_db *db = container_of(result->api.db, struct cassandra_db, api);
if (db->page_size == 0) {
/* no paging */
driver_cassandra_result_more(struct sql_result **_result, bool async,
sql_query_callback_t *callback, void *context)
{
- struct cassandra_db *db = (struct cassandra_db *)(*_result)->db;
+ struct cassandra_db *db = container_of((*_result)->db, struct cassandra_db, api);
struct cassandra_result *new_result;
struct cassandra_result *old_result =
(struct cassandra_result *)*_result;
{
struct cassandra_transaction_context *ctx =
(struct cassandra_transaction_context *)_ctx;
- struct cassandra_db *db = (struct cassandra_db *)_ctx->db;
+ struct cassandra_db *db = container_of(_ctx->db, struct cassandra_db, api);
enum cassandra_query_type query_type;
struct sql_commit_result result;
driver_cassandra_try_commit_s(struct cassandra_transaction_context *ctx)
{
struct sql_transaction_context *_ctx = &ctx->ctx;
- struct cassandra_db *db = (struct cassandra_db *)_ctx->db;
+ struct cassandra_db *db = container_of(_ctx->db, struct cassandra_db, api);
struct sql_result *result = NULL;
enum cassandra_query_type query_type;
static void prepare_start(struct cassandra_sql_prepared_statement *prep_stmt)
{
- struct cassandra_db *db = (struct cassandra_db *)prep_stmt->prep_stmt.db;
+ struct cassandra_db *db = container_of(prep_stmt->prep_stmt.db, struct cassandra_db, api);
CassFuture *future;
if (!SQL_DB_IS_READY(&db->api)) {
{
struct cassandra_sql_statement *stmt =
(struct cassandra_sql_statement *)_stmt;
- struct cassandra_db *db = (struct cassandra_db *)_stmt->db;
+ struct cassandra_db *db = container_of(_stmt->db, struct cassandra_db, api);
const char *query = sql_statement_get_query(_stmt);
bool is_prepared = stmt->cass_stmt != NULL || stmt->prep != NULL;
static void driver_cassandra_wait(struct sql_db *_db)
{
- struct cassandra_db *db = (struct cassandra_db *)_db;
+ struct cassandra_db *db = container_of(_db, struct cassandra_db, api);
if (!driver_cassandra_have_work(db))
return;