Lines Matching refs:db
73 static const char *mysql_prefix(struct mysql_db *db)
75 return db->host == NULL ? "mysql" :
76 t_strdup_printf("mysql(%s)", db->host);
81 struct mysql_db *db = (struct mysql_db *)_db;
83 unsigned long client_flags = db->client_flags;
88 i_assert(db->api.state == SQL_DB_STATE_DISCONNECTED);
90 sql_db_set_state(&db->api, SQL_DB_STATE_CONNECTING);
92 if (db->host == NULL) {
97 } else if (*db->host == '/') {
98 unix_socket = db->host;
102 host = db->host;
105 if (db->option_file != NULL) {
106 mysql_options(db->mysql, MYSQL_READ_DEFAULT_FILE,
107 db->option_file);
110 mysql_options(db->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &db->connect_timeout);
111 mysql_options(db->mysql, MYSQL_OPT_READ_TIMEOUT, &db->read_timeout);
112 mysql_options(db->mysql, MYSQL_OPT_WRITE_TIMEOUT, &db->write_timeout);
113 mysql_options(db->mysql, MYSQL_READ_DEFAULT_GROUP,
114 db->option_group != NULL ? db->option_group : "client");
116 if (!db->ssl_set && (db->ssl_ca != NULL || db->ssl_ca_path != NULL)) {
118 mysql_ssl_set(db->mysql, db->ssl_key, db->ssl_cert,
119 db->ssl_ca, db->ssl_ca_path
121 , db->ssl_cipher
125 mysql_options(db->mysql, MYSQL_OPT_SSL_VERIFY_SERVER_CERT,
126 (void *)&db->ssl_verify_server_cert);
128 db->ssl_set = TRUE;
140 failed = mysql_real_connect(db->mysql, host, db->user, db->password,
141 db->dbname, db->port, unix_socket,
150 if (db->api.connect_delay < secs_used)
151 db->api.connect_delay = secs_used;
152 sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
155 mysql_prefix(db), db->dbname,
156 mysql_error(db->mysql), db->api.connect_delay);
159 db->last_success = ioloop_time;
160 sql_db_set_state(&db->api, SQL_DB_STATE_IDLE);
169 static void driver_mysql_parse_connect_string(struct mysql_db *db,
175 db->ssl_cipher = "HIGH";
176 db->ssl_verify_server_cert = 1;
177 db->connect_timeout = SQL_CONNECT_TIMEOUT_SECS;
178 db->read_timeout = MYSQL_DEFAULT_READ_TIMEOUT_SECS;
179 db->write_timeout = MYSQL_DEFAULT_WRITE_TIMEOUT_SECS;
194 field = &db->host;
196 field = &db->user;
198 field = &db->password;
200 field = &db->dbname;
202 if (net_str2port(value, &db->port) < 0)
205 if (str_to_uint(value, &db->client_flags) < 0)
208 if (str_to_uint(value, &db->connect_timeout) < 0)
211 if (str_to_uint(value, &db->read_timeout) < 0)
214 if (str_to_uint(value, &db->write_timeout) < 0)
217 field = &db->ssl_cert;
219 field = &db->ssl_key;
221 field = &db->ssl_ca;
223 field = &db->ssl_ca_path;
225 field = &db->ssl_cipher;
228 db->ssl_verify_server_cert = 1;
230 db->ssl_verify_server_cert = 0;
234 field = &db->option_file;
236 field = &db->option_group;
241 *field = p_strdup(db->pool, value);
244 if (db->host == NULL && db->option_file == NULL)
247 db->mysql = mysql_init(NULL);
248 if (db->mysql == NULL)
254 struct mysql_db *db;
258 db = p_new(pool, struct mysql_db, 1);
259 db->pool = pool;
260 db->api = driver_mysql_db;
263 driver_mysql_parse_connect_string(db, connect_string);
265 return &db->api;
270 struct mysql_db *db = (struct mysql_db *)_db;
273 sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
275 mysql_close(db->mysql);
277 pool_unref(&db->pool);
280 static int driver_mysql_do_query(struct mysql_db *db, const char *query)
282 if (mysql_query(db->mysql, query) == 0)
286 switch (mysql_errno(db->mysql)) {
289 sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
300 struct mysql_db *db = (struct mysql_db *)_db;
306 (void)sql_connect(&db->api);
309 if (db->mysql == NULL) {
323 len = mysql_real_escape_string(db->mysql, to, string, len);
330 struct mysql_db *db = (struct mysql_db *)_db;
332 if (driver_mysql_do_query(db, query) < 0) {
334 mysql_prefix(db), query, mysql_error(db->mysql));
338 static void driver_mysql_query(struct sql_db *db, const char *query,
343 result = sql_query_s(db, query);
353 struct mysql_db *db = (struct mysql_db *)_db;
360 if (driver_mysql_do_query(db, query) < 0)
364 result->affected_rows = mysql_affected_rows(db->mysql);
365 result->result = mysql_store_result(db->mysql);
370 while ((ret = mysql_next_result(db->mysql)) == 0) ;
376 (result->result != NULL || mysql_errno(db->mysql) == 0)) {
386 result->api.db = _db;
407 struct mysql_db *db = (struct mysql_db *)_result->db;
419 if (mysql_errno(db->mysql) != 0)
423 db->last_success = ioloop_time;
513 struct mysql_db *db = (struct mysql_db *)_result->db;
518 err = mysql_errno(db->mysql);
519 errstr = mysql_error(db->mysql);
521 db->last_success != 0) {
522 idle_time = ioloop_time - db->last_success;
530 driver_mysql_transaction_begin(struct sql_db *db)
535 ctx->ctx.db = db;
563 _result = sql_query_s(ctx->ctx.db, query);
585 if (_ctx->db->state != SQL_DB_STATE_DISCONNECTED)
607 struct mysql_db *db = (struct mysql_db *)_ctx->db;
617 "retrying commit", db->dbname);
618 if (sql_connect(_ctx->db) >= 0) {