changeset 4384:a8979ba36c74 HEAD

Fixes to handling database updates.
author Timo Sirainen <tss@iki.fi>
date Fri, 16 Jun 2006 14:42:30 +0300
parents dc1f912bbf10
children 2c4a39afea07
files src/lib-sql/driver-mysql.c
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-sql/driver-mysql.c	Fri Jun 16 14:09:07 2006 +0300
+++ b/src/lib-sql/driver-mysql.c	Fri Jun 16 14:42:30 2006 +0300
@@ -228,6 +228,12 @@
 	}
 	t_pop();
 
+#ifdef CLIENT_MULTI_STATEMENTS
+	/* Updates require this because everything is committed in one large
+	   SQL statement. */
+	db->client_flags |= CLIENT_MULTI_STATEMENTS;
+#endif
+
 	if (array_count(&db->connections) == 0)
 		i_fatal("mysql: No hosts given in connect string");
 }
@@ -393,7 +399,7 @@
 	case 1:
 		/* query ok */
 		result->result = mysql_store_result(conn->mysql);
-		if (result->result != NULL)
+		if (result->result != NULL || mysql_errno(conn->mysql) == 0)
 			break;
 		/* fallback */
 	case -1:
@@ -422,11 +428,16 @@
 {
 	struct mysql_result *result = (struct mysql_result *)_result;
 
+	if (result->result == NULL) {
+		/* no results */
+		return 0;
+	}
+
 	result->row = mysql_fetch_row(result->result);
 	if (result->row != NULL)
 		return 1;
 
-	return mysql_errno(result->conn->mysql) ? -1 : 0;
+	return mysql_errno(result->conn->mysql) != 0 ? -1 : 0;
 }
 
 static void driver_mysql_result_fetch_fields(struct mysql_result *result)