diff --git a/lib/db_ido_mysql/idomysqlconnection.cpp b/lib/db_ido_mysql/idomysqlconnection.cpp index 7b4153932..4d15ae3b1 100644 --- a/lib/db_ido_mysql/idomysqlconnection.cpp +++ b/lib/db_ido_mysql/idomysqlconnection.cpp @@ -513,20 +513,21 @@ void IdoMysqlConnection::FinishAsyncQueries(void) ); } + std::vector resultSets; + for (std::vector::size_type i = offset; i < offset + count; i++) { const IdoAsyncQuery& aq = queries[i]; MYSQL_RES *result = mysql_store_result(&m_Connection); - m_AffectedRows = mysql_affected_rows(&m_Connection); - + int affectedRows = mysql_affected_rows(&m_Connection); IdoMysqlResult iresult; if (!result) { if (mysql_field_count(&m_Connection) > 0) { std::ostringstream msgbuf; String message = mysql_error(&m_Connection); - msgbuf << "Error \"" << message << "\" when executing query \"" << aq.Query << "\""; + msgbuf << "Error \"" << message << "\" when checking field count \"" << aq.Query << "\""; Log(LogCritical, "IdoMysqlConnection", msgbuf.str()); BOOST_THROW_EXCEPTION( @@ -538,8 +539,11 @@ void IdoMysqlConnection::FinishAsyncQueries(void) } else iresult = IdoMysqlResult(result, std::ptr_fun(mysql_free_result)); - if (aq.Callback) - aq.Callback(iresult); + IdoMysqlResultInfo resultInfo; + resultInfo.Result = iresult; + resultInfo.AffectedRows = affectedRows; + + resultSets.push_back(resultInfo); if (mysql_next_result(&m_Connection) > 0) { std::ostringstream msgbuf; @@ -555,6 +559,17 @@ void IdoMysqlConnection::FinishAsyncQueries(void) } } + for (std::vector::size_type i = offset; i < offset + count; i++) { + const IdoAsyncQuery& aq = queries[i]; + + const IdoMysqlResultInfo ri = resultSets[i - offset]; + + m_AffectedRows = ri.AffectedRows; + + if (aq.Callback) + aq.Callback(ri.Result); + } + offset += count; } } diff --git a/lib/db_ido_mysql/idomysqlconnection.hpp b/lib/db_ido_mysql/idomysqlconnection.hpp index c134cf7fe..3be79da7e 100644 --- a/lib/db_ido_mysql/idomysqlconnection.hpp +++ b/lib/db_ido_mysql/idomysqlconnection.hpp @@ -39,6 +39,12 @@ struct IdoAsyncQuery IdoAsyncCallback Callback; }; +struct IdoMysqlResultInfo +{ + IdoMysqlResult Result; + int AffectedRows; +}; + /** * An IDO MySQL database connection. *