Mercurial > dovecot > core-2.2
changeset 2359:0d76dd47fbf4 HEAD
db_port and db_client_flags weren't integers. Reconnects now immediately if
mysql_query() failed because connection was lost.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Fri, 23 Jul 2004 21:50:18 +0300 |
parents | 3df5796793bd |
children | 845779ac5507 |
files | src/auth/db-mysql.c src/auth/db-mysql.h |
diffstat | 2 files changed, 30 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/auth/db-mysql.c Fri Jul 23 21:38:35 2004 +0300 +++ b/src/auth/db-mysql.c Fri Jul 23 21:50:18 2004 +0300 @@ -4,7 +4,6 @@ #undef HAVE_CONFIG_H #if defined(PASSDB_MYSQL) || defined(USERDB_MYSQL) - #include "common.h" #include "network.h" #include "str.h" @@ -51,7 +50,7 @@ void db_mysql_query(struct mysql_connection *conn, const char *query, struct mysql_request *request) { - MYSQL_RES *res; + MYSQL_RES *res = NULL; int failed; if (verbose_debug) @@ -64,23 +63,38 @@ } } - if (mysql_query(conn->mysql, query) == 0) { + failed = mysql_query(conn->mysql, query) != 0; + if (failed) { + /* query failed */ + switch (mysql_errno(conn->mysql)) { + case CR_SERVER_GONE_ERROR: + case CR_SERVER_LOST: + /* connection lost - try immediate reconnect */ + if (!mysql_conn_open(conn)) + break; + if (mysql_query(conn->mysql, query) == 0) { + failed = FALSE; + break; + } + /* query failed, fallback to error handler */ + default: + i_error("MySQL: Error executing query \"%s\": %s", + query, mysql_error(conn->mysql)); + break; + } + } + + if (!failed) { /* query succeeded */ - if ((res = mysql_store_result(conn->mysql))) - failed = FALSE; - else { + if ((res = mysql_store_result(conn->mysql)) == NULL) { /* something went wrong on storing result */ + failed = TRUE; i_error("MySQL: Error retrieving results: %s", mysql_error(conn->mysql)); } - } else { - /* query failed */ - i_error("MySQL: Error executing query \"%s\": %s", query, - mysql_error(conn->mysql)); - failed = TRUE; } - request->callback(conn, request, failed ? NULL : res); + request->callback(conn, request, res); if (!failed) mysql_free_result(res); i_free(request);
--- a/src/auth/db-mysql.h Fri Jul 23 21:38:35 2004 +0300 +++ b/src/auth/db-mysql.h Fri Jul 23 21:50:18 2004 +0300 @@ -3,8 +3,10 @@ #ifdef HAVE_MYSQL_MYSQL_H # include <mysql/mysql.h> +# include <mysql/errmsg.h> #else # include <mysql.h> +# include <errmsg.h> #endif struct mysql_connection; @@ -16,12 +18,12 @@ struct mysql_settings { const char *db_host; - const char *db_port; + unsigned int db_port; const char *db_unix_socket; const char *db; const char *db_user; const char *db_passwd; - const char *db_client_flags; + unsigned int db_client_flags; const char *password_query; const char *user_query; const char *default_pass_scheme;