6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* not connected to database */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* waiting for connection attempt to succeed or fail */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* connected, allowing more queries */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* connected, no more queries allowed */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* Minimum delay between reconnecting to same server */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* Maximum time to avoiding reconnecting to same server */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* If no servers are connected but a query is requested, try reconnecting to
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen next server which has been disconnected longer than this (with a single
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen server setup this is really the "max delay" and the SQL_CONNECT_MAX_DELAY
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen is never used). */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* Abort connect() if it can't connect within this time. */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* Abort queries after this many seconds */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen/* Default max. number of connections to create per host */
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen#define SQL_ERRSTR_NOT_CONNECTED "Not connected to database"
0ae010139a1bb3b29fbf117c5da1a6a6c6b7b5a0Timo Sirainenextern struct sql_db_module_register sql_db_module_register;
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen struct sql_db *(*init)(const char *connect_string);
13a8c553f293349248b161ff851743498916e26eTimo Sirainen const char *(*escape_string)(struct sql_db *db, const char *string);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen void (*exec)(struct sql_db *db, const char *query);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen void (*query)(struct sql_db *db, const char *query,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen sql_query_callback_t *callback, void *context);
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen struct sql_result *(*query_s)(struct sql_db *db, const char *query);
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen struct sql_transaction_context *(*transaction_begin)(struct sql_db *db);
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen void (*transaction_commit)(struct sql_transaction_context *ctx,
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen int (*transaction_commit_s)(struct sql_transaction_context *ctx,
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen const char **error_r);
dc9de21d4375faeedbe5b7e941502ac578650da9Timo Sirainen void (*transaction_rollback)(struct sql_transaction_context *ctx);
bfdf0fd7b6186f64cbdcbf1cb2bf9c42a9007b77Timo Sirainen void (*update)(struct sql_transaction_context *ctx, const char *query,
bfdf0fd7b6186f64cbdcbf1cb2bf9c42a9007b77Timo Sirainen unsigned int *affected_rows);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*prepared_statement_deinit)(struct sql_prepared_statement *prep_stmt);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen (*statement_init)(struct sql_db *db, const char *query_template);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen (*statement_init_prepared)(struct sql_prepared_statement *prep_stmt);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_abort)(struct sql_statement *stmt);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_set_timestamp)(struct sql_statement *stmt,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_bind_str)(struct sql_statement *stmt,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_bind_binary)(struct sql_statement *stmt,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_bind_int64)(struct sql_statement *stmt,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*statement_query)(struct sql_statement *stmt,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen sql_query_callback_t *callback, void *context);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen struct sql_result *(*statement_query_s)(struct sql_statement *stmt);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen void (*update_stmt)(struct sql_transaction_context *ctx,
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainen unsigned int *affected_rows);
4ee00532a265bdfb38539d811fcd12d51210ac35Timo Sirainen ARRAY(union sql_db_module_context *) module_contexts;
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen void (*state_change_callback)(struct sql_db *db,
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* last time we started connecting to this server
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen (which may or may not have succeeded) */
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen unsigned int (*get_fields_count)(struct sql_result *result);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *(*get_field_name)(struct sql_result *result,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen unsigned int idx);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen int (*find_field)(struct sql_result *result, const char *field_name);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *(*get_field_value)(struct sql_result *result,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen unsigned int idx);
1ac19c5c2b66a12f5598792aad15114ee3eb62e2Timo Sirainen const unsigned char *
1ac19c5c2b66a12f5598792aad15114ee3eb62e2Timo Sirainen (*get_field_value_binary)(struct sql_result *result,
1ac19c5c2b66a12f5598792aad15114ee3eb62e2Timo Sirainen unsigned int idx,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *(*find_field_value)(struct sql_result *result,
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *const *(*get_values)(struct sql_result *result);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainen const char *(*get_error)(struct sql_result *result);
402f9bcf48cbccc17fdb5f3ea411a7967aed0fd0Timo Sirainen void (*more)(struct sql_result **result, bool async,
402f9bcf48cbccc17fdb5f3ea411a7967aed0fd0Timo Sirainen sql_query_callback_t *callback, void *context);
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen /* commit() must use this query list if head is non-NULL. */
8d80659e504ffb34bb0c6a633184fece35751b18Timo SirainenARRAY_DEFINE_TYPE(sql_drivers, const struct sql_db *);
6c2c5f20760b06bfb4a40b0ee2ef5ab016bc41f0Timo Sirainenextern struct sql_result sql_not_connected_result;
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainendriver_sqlpool_init(const char *connect_string, const struct sql_db *driver);
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainenvoid sql_db_set_state(struct sql_db *db, enum sql_db_state state);
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainenvoid sql_transaction_add_query(struct sql_transaction_context *ctx, pool_t pool,
6b2738c39a868ff9291867138c55029fc40cf105Timo Sirainen const char *query, unsigned int *affected_rows);
9f0fc74e3387d3e496fb0c8f77633e27e48cc1ffTimo Sirainenconst char *sql_statement_get_query(struct sql_statement *stmt);