[Mono-devel-list] [PATCH]System.Data.OracleClient
Eduard Nesiba
eda at monetplus.cz
Mon May 24 10:08:54 EDT 2004
Hello,
please apply my patch into CVS.
Eduard.
Eduard Nesiba wrote:
> Hi,
>
> this patch implements some changes to System.Data.OracleClient
> - autocommit behavior for non query statement which is out of
> transaction. In previous implementation changed rows stayed locked until
> client disconnect.
> - hasRows proper settings
>
> Can someone check it into CVS?
>
> "in mcs directory: patch -p1 < System.Data.OracleClient.diff"
>
> Eduard
>
>------------------------------------------------------------------------
>
>diff -u -r mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleCommand.cs /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleCommand.cs
>--- mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleCommand.cs Fri Jan 9 15:52:39 2004
>+++ /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleCommand.cs Thu May 6 13:55:44 2004
>@@ -202,13 +202,13 @@
> return new OracleParameter ();
> }
>
>- private int ExecuteNonQueryInternal (OciStatementHandle statement)
>+ private int ExecuteNonQueryInternal (OciStatementHandle statement, bool useAutoCommit)
> {
> if (preparedStatement == null)
> statement.Prepare (CommandText);
>
> BindParameters (statement);
>- statement.ExecuteNonQuery ();
>+ statement.ExecuteNonQuery (useAutoCommit);
>
> int rowsAffected = statement.GetAttributeInt32 (OciAttributeType.RowCount, ErrorHandle);
>
>@@ -220,13 +220,16 @@
> AssertConnectionIsOpen ();
> AssertTransactionMatch ();
> AssertCommandTextIsSet ();
>+ bool useAutoCommit = false;
>
> if (Transaction != null)
> Transaction.AttachToServiceContext ();
>+ else
>+ useAutoCommit = true;
>
> OciStatementHandle statement = GetStatementHandle ();
> try {
>- return ExecuteNonQueryInternal (statement);
>+ return ExecuteNonQueryInternal (statement, useAutoCommit);
> }
> finally {
> SafeDisposeHandle (statement);
>@@ -238,14 +241,17 @@
> AssertConnectionIsOpen ();
> AssertTransactionMatch ();
> AssertCommandTextIsSet ();
>+ bool useAutoCommit = false;
>
> if (Transaction != null)
> Transaction.AttachToServiceContext ();
>+ else
>+ useAutoCommit = true;
>
> OciStatementHandle statement = GetStatementHandle ();
>
> try {
>- int retval = ExecuteNonQueryInternal (statement);
>+ int retval = ExecuteNonQueryInternal (statement, useAutoCommit);
>
> OciRowIdDescriptor descriptor = (OciRowIdDescriptor) Environment.Allocate (OciHandleType.RowId);
> descriptor.SetHandle (statement.GetAttributeIntPtr (OciAttributeType.RowId, ErrorHandle));
>@@ -276,6 +282,7 @@
> AssertTransactionMatch ();
> AssertCommandTextIsSet ();
> AssertNoDataReader ();
>+ bool hasRows = false;
>
> if (Transaction != null)
> Transaction.AttachToServiceContext ();
>@@ -289,9 +296,9 @@
> preparedStatement = null; // OracleDataReader releases the statement handle
>
> BindParameters (statement);
>- statement.ExecuteQuery ();
>+ hasRows = statement.ExecuteQuery ();
>
>- rd = new OracleDataReader (this, statement);
>+ rd = new OracleDataReader (this, statement, hasRows);
> }
> finally {
> if (statement != null && rd == null)
>diff -u -r mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleDataReader.cs /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleDataReader.cs
>--- mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleDataReader.cs Fri Jan 9 15:52:39 2004
>+++ /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient/OracleDataReader.cs Thu May 6 13:59:44 2004
>@@ -54,6 +54,17 @@
> this.statementType = statement.GetStatementType ();
> }
>
>+ internal OracleDataReader (OracleCommand command, OciStatementHandle statement, bool extHasRows )
>+ {
>+ this.command = command;
>+ this.hasRows = extHasRows;
>+ this.isClosed = false;
>+ this.schemaTable = ConstructSchemaTable ();
>+ this.statement = statement;
>+ this.statementType = statement.GetStatementType ();
>+ }
>+
>+
> ~OracleDataReader ()
> {
> Dispose (false);
>@@ -414,6 +425,7 @@
> public bool Read ()
> {
> bool retval = statement.Fetch ();
>+ hasRows = retval;
> return retval;
> //return command.StatementHandle.Fetch ();
> }
>diff -u -r mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStatementHandle.cs /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStatementHandle.cs
>--- mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStatementHandle.cs Sat Apr 3 19:19:03 2004
>+++ /home/mono/mcs/class/System.Data.OracleClient/System.Data.OracleClient.Oci/OciStatementHandle.cs Thu May 6 14:05:36 2004
>@@ -123,19 +123,25 @@
>
> public bool ExecuteQuery ()
> {
>- return Execute (false);
>+ return Execute (false,false);
> }
>
>- public bool ExecuteNonQuery ()
>+ public bool ExecuteNonQuery (bool useAutoCommit)
> {
>- return Execute (true);
>+ return Execute (true, useAutoCommit);
> }
>
>- public bool Execute (bool nonQuery)
>+ public bool Execute (bool nonQuery, bool useAutoCommit)
> {
> int status = 0;
> columnCount = 0;
> moreResults = false;
>+ int executeMode;
>+
>+ if( useAutoCommit)
>+ executeMode = (int)OciExecuteMode.CommitOnSuccess;
>+ else
>+ executeMode = (int)OciExecuteMode.Default;
>
> if (this.disposed)
> {
>@@ -149,7 +155,7 @@
> 0,
> IntPtr.Zero,
> IntPtr.Zero,
>- OciExecuteMode.Default);
>+ (OciExecuteMode)executeMode);
>
> switch (status) {
> case OciGlue.OCI_DEFAULT:
>
>
More information about the Mono-devel-list
mailing list