From: Date: October 8 2008 8:44pm Subject: Connector/NET commit: r1433 - in branches/5.0: . Driver/Source TestSuite/Source List-Archive: http://lists.mysql.com/commits/55802 X-Bug: 39817 Message-Id: <200810081844.m98IihcE012321@bk-internal.mysql.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Modified: branches/5.0/CHANGES branches/5.0/Driver/Source/transaction.cs branches/5.0/TestSuite/Source/SimpleTransactions.cs Log: implemented Disposable pattern on MySqlTransaction class so including one in a using statement and then not calling commit will cause a rollback when the using exits (bug #39817) Modified: branches/5.0/CHANGES =================================================================== --- branches/5.0/CHANGES 2008-10-08 17:45:32 UTC (rev 1432) +++ branches/5.0/CHANGES 2008-10-08 18:44:42 UTC (rev 1433) @@ -17,7 +17,10 @@ locale (bug #35459) - Defaulting max allowed packet to 1024 to account for the possible case where the value doesn't come in as a server variable + - implemented Disposable pattern on MySqlTransaction class so including one in a using statement + and then not calling commit will cause a rollback when the using exits (bug #39817) + Version 5.0.9 - 4/14/08 - Fixed problem where fields that were blobs but did not include the BLOB flag were treated Modified: branches/5.0/Driver/Source/transaction.cs =================================================================== --- branches/5.0/Driver/Source/transaction.cs 2008-10-08 17:45:32 UTC (rev 1432) +++ branches/5.0/Driver/Source/transaction.cs 2008-10-08 18:44:42 UTC (rev 1433) @@ -77,6 +77,13 @@ #endregion + protected override void Dispose(bool disposing) + { + if ((conn != null && conn.State == ConnectionState.Open) && open) + Rollback(); + base.Dispose(disposing); + } + /// public override void Commit() { Modified: branches/5.0/TestSuite/Source/SimpleTransactions.cs =================================================================== --- branches/5.0/TestSuite/Source/SimpleTransactions.cs 2008-10-08 17:45:32 UTC (rev 1432) +++ branches/5.0/TestSuite/Source/SimpleTransactions.cs 2008-10-08 18:44:42 UTC (rev 1433) @@ -25,6 +25,7 @@ #if NET20 using System.Transactions; using System.Data.Common; +using System.Reflection; #endif namespace MySql.Data.MySqlClient.Tests @@ -146,5 +147,24 @@ c.Close(); // this should work even though we are closed } } + + /// + /// Bug #39817 Transaction Dispose does not roll back + /// + [Test] + public void DisposingCallsRollback() + { + MySqlCommand cmd = new MySqlCommand("INSERT INTO Test VALUES ('a', 'b', 'c')", conn); + MySqlTransaction txn = conn.BeginTransaction(); + using (txn) + { + cmd.ExecuteNonQuery(); + } + // the txn should be closed now as a rollback should have happened. + Type t = txn.GetType(); + FieldInfo fi = t.GetField("open", BindingFlags.Instance | BindingFlags.NonPublic); + bool isOpen = (bool)fi.GetValue(txn); + Assert.IsFalse(isOpen); + } } }