dovecot-2.0: mysql: When query fails because connection gets los...

dovecot at dovecot.org dovecot at dovecot.org
Mon Sep 13 17:08:38 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/bcb61478f04d
changeset: 12104:bcb61478f04d
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Sep 13 15:08:12 2010 +0100
description:
mysql: When query fails because connection gets lost, use MySQL failure message instead of generic one.

diffstat:

 src/lib-sql/driver-mysql.c |  34 ++++++++++++++--------------------
 1 files changed, 14 insertions(+), 20 deletions(-)

diffs (66 lines):

diff -r 4fc447d1281e -r bcb61478f04d src/lib-sql/driver-mysql.c
--- a/src/lib-sql/driver-mysql.c	Mon Sep 13 14:43:27 2010 +0100
+++ b/src/lib-sql/driver-mysql.c	Mon Sep 13 15:08:12 2010 +0100
@@ -214,7 +214,7 @@
 static int driver_mysql_do_query(struct mysql_db *db, const char *query)
 {
 	if (mysql_query(db->mysql, query) == 0)
-		return 1;
+		return 0;
 
 	/* failed */
 	switch (mysql_errno(db->mysql)) {
@@ -223,9 +223,9 @@
 		sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
 		break;
 	default:
-		return -1;
+		break;
 	}
-	return 0;
+	return -1;
 }
 
 static const char *
@@ -288,12 +288,9 @@
 	result = i_new(struct mysql_result, 1);
 	result->api = driver_mysql_result;
 
-	switch (driver_mysql_do_query(db, query)) {
-	case 0:
-		/* not connected */
-		result->api = sql_not_connected_result;
-		break;
-	case 1:
+	if (driver_mysql_do_query(db, query) < 0)
+		result->api = driver_mysql_error_result;
+	else {
 		/* query ok */
 		result->affected_rows = mysql_affected_rows(db->mysql);
 		result->result = mysql_store_result(db->mysql);
@@ -307,17 +304,14 @@
 #endif
 
 		if (ret < 0 &&
-		    (result->result != NULL || mysql_errno(db->mysql) == 0))
-			break;
-
-		/* failed */
-		if (result->result != NULL)
-			mysql_free_result(result->result);
-		/* fall through */
-	case -1:
-		/* error */
-		result->api = driver_mysql_error_result;
-		break;
+		    (result->result != NULL || mysql_errno(db->mysql) == 0)) {
+			/* ok */
+		} else {
+			/* failed */
+			if (result->result != NULL)
+				mysql_free_result(result->result);
+			result->api = driver_mysql_error_result;
+		}
 	}
 
 	result->api.db = _db;


More information about the dovecot-cvs mailing list