/// <summary> /// Executes command buffers until we hit the next resultset /// </summary> /// <returns>CommandResult containing the next resultset when hit /// or null if no more resultsets were found</returns> internal CommandResult GetNextResultSet(MySqlDataReader reader) { // if we are supposed to return only a single resultset and our reader // is calling us back again, then return null if (reader != null && (reader.Behavior & CommandBehavior.SingleResult) != 0 && lastResult != null) { return(null); } // if the last result we returned has more results if (lastResult != null && lastResult.ReadNextResult(false)) { return(lastResult); } lastResult = null; CommandResult result = null; // if we haven't prepared a statement and don't have any sql buffers // to execute, we are done if (preparedStatement == null) { if (sqlBuffers == null || sqlBuffers.Count == 0) { return(null); } } else if (preparedStatement.ExecutionCount > 0) { return(null); } // if we have a prepared statement, we execute it instead if (preparedStatement != null) { result = preparedStatement.Execute(parameters); if (!result.IsResultSet) { if (updateCount == -1) { updateCount = 0; } updateCount += (long)result.AffectedRows; } } else { while (sqlBuffers.Count > 0) { MemoryStream sqlStream = (MemoryStream)sqlBuffers[0]; using (sqlStream) { result = connection.driver.SendQuery(sqlStream.GetBuffer(), (int)sqlStream.Length, false); sqlBuffers.RemoveAt(0); } if (result.AffectedRows != -1) { if (updateCount == -1) { updateCount = 0; } updateCount += (long)result.AffectedRows; } // if this is a resultset, then we break out of our execution loop if (result.IsResultSet) { break; } } } if (result.IsResultSet) { lastResult = result; return(result); } return(null); }