From: Timo Sirainen Date: Wed, 26 May 2010 14:29:21 +0000 (+0100) Subject: lib-sql: Fixed getting number of affected rows with MySQL. X-Git-Tag: 2.0.beta6~155 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f1ea65eb88b4f67e572c4640882bdf00fe3a2186;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: Fixed getting number of affected rows with MySQL. --HG-- branch : HEAD --- diff --git a/src/lib-sql/driver-mysql.c b/src/lib-sql/driver-mysql.c index 87850fedca..e9d2ef7468 100644 --- a/src/lib-sql/driver-mysql.c +++ b/src/lib-sql/driver-mysql.c @@ -35,6 +35,8 @@ struct mysql_result { MYSQL_FIELD *fields; unsigned int fields_count; + + my_ulonglong affected_rows; }; struct mysql_transaction_context { @@ -290,6 +292,7 @@ driver_mysql_query_s(struct sql_db *_db, const char *query) break; case 1: /* query ok */ + result->affected_rows = mysql_affected_rows(db->mysql); result->result = mysql_store_result(db->mysql); #ifdef CLIENT_MULTI_RESULTS /* Because we've enabled CLIENT_MULTI_RESULTS, we need to read @@ -463,26 +466,24 @@ static int transaction_send_query(struct mysql_transaction_context *ctx, const char *query, unsigned int *affected_rows_r) { - struct sql_result *result; - my_ulonglong rows; + struct sql_result *_result; int ret = 0; if (ctx->failed) return -1; - result = sql_query_s(ctx->ctx.db, query); - if (sql_result_next_row(result) < 0) { - ctx->error = sql_result_get_error(result); + _result = sql_query_s(ctx->ctx.db, query); + if (sql_result_next_row(_result) < 0) { + ctx->error = sql_result_get_error(_result); ctx->failed = TRUE; ret = -1; } else if (affected_rows_r != NULL) { - struct mysql_db *db = (struct mysql_db *)result->db; + struct mysql_result *result = (struct mysql_result *)_result; - rows = mysql_affected_rows(db->mysql); - i_assert(rows != (my_ulonglong)-1); - *affected_rows_r = rows; + i_assert(result->affected_rows != (my_ulonglong)-1); + *affected_rows_r = result->affected_rows; } - sql_result_unref(result); + sql_result_unref(_result); return ret; }