"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "src/lib-sql/driver-sqlpool.c" between
dovecot-2.3.16.tar.gz and dovecot-2.3.17.tar.gz

About: Dovecot is an IMAP and POP3 server, written with security primarily in mind.

driver-sqlpool.c  (dovecot-2.3.16):driver-sqlpool.c  (dovecot-2.3.17)
skipping to change at line 420 skipping to change at line 420
conns = array_get(&db->all_connections, &count); conns = array_get(&db->all_connections, &count);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
if (conns[i].db->state == SQL_DB_STATE_CONNECTING) { if (conns[i].db->state == SQL_DB_STATE_CONNECTING) {
*conn_r = &conns[i]; *conn_r = &conns[i];
return TRUE; return TRUE;
} }
} }
return FALSE; return FALSE;
} }
static bool
driver_sqlpool_get_connected_flags(struct sqlpool_db *db,
enum sql_db_flags *flags_r)
{
const struct sqlpool_connection *conn;
array_foreach(&db->all_connections, conn) {
if (conn->db->state > SQL_DB_STATE_CONNECTING) {
*flags_r = sql_get_flags(conn->db);
return TRUE;
}
}
return FALSE;
}
static enum sql_db_flags driver_sqlpool_get_flags(struct sql_db *_db) static enum sql_db_flags driver_sqlpool_get_flags(struct sql_db *_db)
{ {
struct sqlpool_db *db = (struct sqlpool_db *)_db; struct sqlpool_db *db = (struct sqlpool_db *)_db;
const struct sqlpool_connection *conn, *last_conn = NULL; const struct sqlpool_connection *conn;
enum sql_db_flags flags;
/* try to use a connected db */ /* try to use a connected db */
array_foreach(&db->all_connections, conn) { if (driver_sqlpool_get_connected_flags(db, &flags))
if (SQL_DB_IS_READY(conn->db)) return flags;
return sql_get_flags(conn->db);
last_conn = conn; if (!driver_sqlpool_get_sync_connection(db, &conn)) {
} /* Failed to connect to database. Just use the first
/* fallback to the last db, if there is any */ connection. */
if (last_conn != NULL) conn = array_idx(&db->all_connections, 0);
return sql_get_flags(last_conn->db); }
/* Just use the default flags. The flags shouldn't be worth having return sql_get_flags(conn->db);
to create a connection. */
return _db->flags;
} }
static int static int
driver_sqlpool_parse_hosts(struct sqlpool_db *db, const char *connect_string, driver_sqlpool_parse_hosts(struct sqlpool_db *db, const char *connect_string,
const char **error_r) const char **error_r)
{ {
const char *const *args, *key, *value, *hostname; const char *const *args, *key, *value, *hostname;
struct sqlpool_host *host; struct sqlpool_host *host;
ARRAY_TYPE(const_string) hostnames, connect_args; ARRAY_TYPE(const_string) hostnames, connect_args;
skipping to change at line 887 skipping to change at line 901
conns = array_get(&db->all_connections, &count); conns = array_get(&db->all_connections, &count);
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
if (SQL_DB_IS_READY(conns[i].db)) if (SQL_DB_IS_READY(conns[i].db))
return sql_escape_blob(conns[i].db, data, size); return sql_escape_blob(conns[i].db, data, size);
} }
/* no ready connections. just use the first one (we're guaranteed /* no ready connections. just use the first one (we're guaranteed
to always have one) */ to always have one) */
return sql_escape_blob(conns[0].db, data, size); return sql_escape_blob(conns[0].db, data, size);
} }
static void driver_sqlpool_wait(struct sql_db *_db)
{
struct sqlpool_db *db = (struct sqlpool_db *)_db;
const struct sqlpool_connection *conn;
array_foreach(&db->all_connections, conn)
sql_wait(conn->db);
}
struct sql_db driver_sqlpool_db = { struct sql_db driver_sqlpool_db = {
"", "",
.v = { .v = {
.get_flags = driver_sqlpool_get_flags, .get_flags = driver_sqlpool_get_flags,
.deinit = driver_sqlpool_deinit, .deinit = driver_sqlpool_deinit,
.connect = driver_sqlpool_connect, .connect = driver_sqlpool_connect,
.disconnect = driver_sqlpool_disconnect, .disconnect = driver_sqlpool_disconnect,
.escape_string = driver_sqlpool_escape_string, .escape_string = driver_sqlpool_escape_string,
.exec = driver_sqlpool_exec, .exec = driver_sqlpool_exec,
.query = driver_sqlpool_query, .query = driver_sqlpool_query,
.query_s = driver_sqlpool_query_s, .query_s = driver_sqlpool_query_s,
.wait = driver_sqlpool_wait,
.transaction_begin = driver_sqlpool_transaction_begin, .transaction_begin = driver_sqlpool_transaction_begin,
.transaction_commit = driver_sqlpool_transaction_commit, .transaction_commit = driver_sqlpool_transaction_commit,
.transaction_commit_s = driver_sqlpool_transaction_commit_s, .transaction_commit_s = driver_sqlpool_transaction_commit_s,
.transaction_rollback = driver_sqlpool_transaction_rollback, .transaction_rollback = driver_sqlpool_transaction_rollback,
.update = driver_sqlpool_update, .update = driver_sqlpool_update,
.escape_blob = driver_sqlpool_escape_blob, .escape_blob = driver_sqlpool_escape_blob,
} }
 End of changes. 5 change blocks. 
12 lines changed or deleted 36 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)