78
78
sql_result_next_row_get() */
79
79
void sql_query(struct sql_db *db, const char *query,
80
80
sql_query_callback_t *callback, void *context);
81
#ifdef CONTEXT_TYPE_SAFETY
82
# define sql_query(db, query, callback, context) \
83
({(void)(1 ? 0 : callback((struct sql_result *)NULL, context)); \
84
sql_query(db, query, \
85
(sql_query_callback_t *)callback, context); })
87
# define sql_query(db, query, callback, context) \
88
sql_query(db, query, (sql_query_callback_t *)callback, context)
81
#define sql_query(db, query, callback, context) \
82
sql_query(db, query + \
83
CALLBACK_TYPECHECK(callback, void (*)( \
84
struct sql_result *, typeof(context))), \
85
(sql_query_callback_t *)callback, context)
90
86
/* Execute blocking SQL query and return result. */
91
87
struct sql_result *sql_query_s(struct sql_db *db, const char *query);
131
127
/* Commit transaction. */
132
128
void sql_transaction_commit(struct sql_transaction_context **ctx,
133
129
sql_commit_callback_t *callback, void *context);
134
#ifdef CONTEXT_TYPE_SAFETY
135
# define sql_transaction_commit(ctx, callback, context) \
136
({(void)(1 ? 0 : callback((const char *)NULL, context)); \
137
sql_transaction_commit(ctx, \
138
(sql_commit_callback_t *)callback, context); })
140
# define sql_transaction_commit(ctx, callback, context) \
141
sql_transaction_commit(ctx, \
130
#define sql_transaction_commit(ctx, callback, context) \
131
sql_transaction_commit(ctx + \
132
CALLBACK_TYPECHECK(callback, void (*)( \
133
const char *, typeof(context))), \
142
134
(sql_commit_callback_t *)callback, context)
144
135
/* Synchronous commit. Returns 0 if ok, -1 if error. */
145
136
int sql_transaction_commit_s(struct sql_transaction_context **ctx,
146
137
const char **error_r);