2003-02-18 Tim Coleman <tim@timcoleman.com>
authorTim Coleman <tim@mono-cvs.ximian.com>
Tue, 18 Feb 2003 05:32:32 +0000 (05:32 -0000)
committerTim Coleman <tim@mono-cvs.ximian.com>
Tue, 18 Feb 2003 05:32:32 +0000 (05:32 -0000)
        * System.Data.OracleClient/OracleCommand.cs:
        * System.Data.OracleClient/OracleTransaction.cs:
        * System.Data.OracleClient.Oci/OciTransactionHandle.cs:
        * Test/TestOracleClient.cs:
                Add transaction logic for rollback/commit,
                attaching to oracle service context, and a
                couple of test cases.

svn path=/trunk/mcs/; revision=11669

mcs/class/System.Data.OracleClient/ChangeLog
mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciTransactionHandle.cs
mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleCommand.cs
mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleTransaction.cs

index faa8d659bb3d27298d66e0677a620fae25863102..d3e677a91fb8d42306356909c15d5137b9254d45 100755 (executable)
@@ -1,3 +1,13 @@
+2003-02-18  Tim Coleman <tim@timcoleman.com>
+       * System.Data.OracleClient/OracleCommand.cs:
+       * System.Data.OracleClient/OracleTransaction.cs:
+       * System.Data.OracleClient.Oci/OciTransactionHandle.cs:
+       * Test/TestOracleClient.cs:
+               Add transaction logic for rollback/commit,
+               attaching to oracle service context, and a
+               couple of test cases.
+
+
 2003-02-17  Tim Coleman <tim@timcoleman.com>
        * Test/TestOracleClient.cs:
                Add OracleDataAdapter test.
index cba8ec03c8abd2b1f4bf8f66ddfb682bc5a8a7ab..345cd8272fd7867087052ea37bf37bc4a68801b6 100644 (file)
@@ -53,13 +53,23 @@ namespace System.Data.OracleClient.Oci {
 
                #region Methods
 
+               [DllImport ("oci")]
+               public static extern int OCITransCommit (IntPtr svchp,
+                                                       IntPtr errhp,
+                                                       uint flags);
+
+               [DllImport ("oci")]
+               public static extern int OCITransRollback (IntPtr svchp,
+                                                       IntPtr errhp,
+                                                       uint flags);
+
                [DllImport ("oci")]
                public static extern int OCITransStart (IntPtr svchp,
                                                        IntPtr errhp,
                                                        uint timeout,
                                                        [MarshalAs (UnmanagedType.U4)] OciTransactionFlags flags);
 
-               public void Begin ()
+               public void AttachToServiceContext ()
                {
                        int status = 0;
                        status = OciGlue.OCIAttrSet (Service.Handle,
@@ -72,6 +82,13 @@ namespace System.Data.OracleClient.Oci {
                                OciErrorInfo info = ErrorHandle.HandleError ();
                                throw new OracleException (info.ErrorCode, info.ErrorMessage);
                        }
+               }
+
+               public void Begin ()
+               {
+                       int status = 0;
+
+                       AttachToServiceContext ();
 
                        status = OCITransStart (Service.Handle,
                                                        ErrorHandle.Handle,
@@ -86,6 +103,16 @@ namespace System.Data.OracleClient.Oci {
 
                public void Commit ()
                {
+                       int status = 0;
+                       AttachToServiceContext ();
+                       status = OCITransCommit (Service.Handle,
+                                               ErrorHandle.Handle,
+                                               0);
+
+                       if (status != 0) {
+                               OciErrorInfo info = ErrorHandle.HandleError ();
+                               throw new OracleException (info.ErrorCode, info.ErrorMessage);
+                       }
                }
 
                public void Dispose ()
@@ -95,6 +122,16 @@ namespace System.Data.OracleClient.Oci {
 
                public void Rollback ()
                {
+                       int status = 0;
+                       AttachToServiceContext ();
+                       status = OCITransRollback (Service.Handle,
+                                               ErrorHandle.Handle,
+                                               0);
+
+                       if (status != 0) {
+                               OciErrorInfo info = ErrorHandle.HandleError ();
+                               throw new OracleException (info.ErrorCode, info.ErrorMessage);
+                       }
                }
 
                #endregion // Methods
index be52a5d0e5224f73ba905976aed7165cc48aa28b..614e3f87ff45f0cb7192cb91328f618d586d884d 100755 (executable)
@@ -191,6 +191,9 @@ namespace System.Data.OracleClient {
                        int rowsAffected = -1;
 
                        ValidateCommand ("ExecuteNonQuery");
+                       if (Transaction != null) 
+                               Transaction.AttachToServiceContext ();
+
                        statement = Connection.Oci.CreateStatement ();
                        statement.Prepare (CommandText);
                        statement.ExecuteNonQuery ();
@@ -217,6 +220,9 @@ namespace System.Data.OracleClient {
 
                public OracleDataReader ExecuteReader (CommandBehavior behavior)
                {
+                       ValidateCommand ("ExecuteNonQuery");
+                       if (Transaction != null) 
+                               Transaction.AttachToServiceContext ();
                        statement = Connection.Oci.CreateStatement ();
                        statement.Prepare (CommandText);
                        statement.ExecuteQuery ();
index 002bb13bc6cc7ad343952f1d2c1b20877de9a97a..69d5048025014445efbddc5f55f267ac2365af8d 100644 (file)
@@ -66,6 +66,11 @@ namespace System.Data.OracleClient {
 
                #region Methods
 
+               internal void AttachToServiceContext ()
+               {
+                       transaction.AttachToServiceContext ();
+               }
+
                public void Commit ()
                {
                        transaction.Commit ();