* OciGlue.cs: Set eol-style to native.
[mono.git] / mcs / class / System.Data.OracleClient / System.Data.OracleClient / OracleCommand.cs
old mode 100755 (executable)
new mode 100644 (file)
index 860b49d..1bbc3bc
@@ -198,8 +198,8 @@ namespace System.Data.OracleClient {
 
                private void BindParameters (OciStatementHandle statement)
                {
-                       foreach (OracleParameter p in Parameters) 
-                               p.Bind (statement, Connection);
+                       for (int p = 0; p < Parameters.Count; p++)
+                               Parameters[p].Bind (statement, Connection, (uint) p);
                }
 
                [MonoTODO]
@@ -251,8 +251,18 @@ namespace System.Data.OracleClient {
                        return cmd;
                }
 
+               internal void UpdateParameterValues () 
+               {
+                       if (Parameters.Count > 0) {
+                               foreach (OracleParameter parm in Parameters)
+                                       parm.Update (this);
+                       }
+               }
+
                internal void CloseDataReader ()
                {
+                       UpdateParameterValues ();
+               
                        Connection.DataReader = null;
                        if ((behavior & CommandBehavior.CloseConnection) != 0)
                                Connection.Close ();
@@ -263,6 +273,16 @@ namespace System.Data.OracleClient {
                        return new OracleParameter ();
                }
 
+               internal void DeriveParameters () 
+               {
+                       if (commandType != CommandType.StoredProcedure)
+                               throw new InvalidOperationException (String.Format ("OracleCommandBuilder DeriveParameters only supports CommandType.StoredProcedure, not CommandType.{0}", commandType));
+
+                       //OracleParameterCollection localParameters = new OracleParameterCollection (this);
+
+                       throw new NotImplementedException ();
+               }
+
                private int ExecuteNonQueryInternal (OciStatementHandle statement, bool useAutoCommit)
                {
                        if (preparedStatement == null)
@@ -274,7 +294,9 @@ namespace System.Data.OracleClient {
                        if (isNonQuery == true)
                                statement.ExecuteNonQuery (useAutoCommit);
                        else
-                               statement.ExecuteQuery ();
+                               statement.ExecuteQuery (false);
+
+                       UpdateParameterValues ();
 
                        int rowsAffected = statement.GetAttributeInt32 (OciAttributeType.RowCount, ErrorHandle);
                
@@ -355,7 +377,7 @@ namespace System.Data.OracleClient {
                                if (isNonQuery == true)
                                        ExecuteNonQueryInternal (statement, false);
                                else {
-                                       statement.ExecuteQuery ();
+                                       statement.ExecuteQuery (false);
 
                                        if (statement.Fetch ()) {
                                                OciDefineHandle defineHandle = (OciDefineHandle) statement.Values [0];
@@ -368,6 +390,7 @@ namespace System.Data.OracleClient {
                                                        break;
                                                }
                                        }
+                                       UpdateParameterValues ();
                                }
 
                                return output;
@@ -377,7 +400,7 @@ namespace System.Data.OracleClient {
                        }
                }
 
-               private bool IsNonQuery (OciStatementHandle statementHandle) \r
+               private bool IsNonQuery (OciStatementHandle statementHandle) 
                {
                        // assumes Prepare() has been called prior to calling this function
 
@@ -400,6 +423,8 @@ namespace System.Data.OracleClient {
                        AssertCommandTextIsSet ();
                        AssertNoDataReader ();
                        bool hasRows = false;
+
+                        this.behavior = behavior;
                                
                        if (Transaction != null) 
                                Transaction.AttachToServiceContext ();
@@ -419,10 +444,14 @@ namespace System.Data.OracleClient {
 
                                if (isNonQuery)
                                        ExecuteNonQueryInternal (statement, false);
-                               else
-                                       hasRows = statement.ExecuteQuery ();
+                               else {
+                                       if ((behavior & CommandBehavior.SchemaOnly) != 0)
+                                               statement.ExecuteQuery (true);
+                                       else
+                                               hasRows = statement.ExecuteQuery (false);
+                               }
 
-                               rd = new OracleDataReader (this, statement, hasRows);
+                               rd = new OracleDataReader (this, statement, hasRows, behavior);
                        }
                        finally {
                                if (statement != null && rd == null)
@@ -455,7 +484,7 @@ namespace System.Data.OracleClient {
                                if (isNonQuery == true)
                                        ExecuteNonQueryInternal (statement, false);
                                else {
-                                       statement.ExecuteQuery ();
+                                       statement.ExecuteQuery (false);
 
                                        if (statement.Fetch ()) {
                                                OciDefineHandle defineHandle = (OciDefineHandle) statement.Values [0];
@@ -478,6 +507,7 @@ namespace System.Data.OracleClient {
                                        }
                                        else
                                                output = DBNull.Value;
+                                       UpdateParameterValues ();
                                }
                        }
                        finally {
@@ -525,14 +555,14 @@ namespace System.Data.OracleClient {
                {
                        if (commandType == CommandType.StoredProcedure) {
                                StringBuilder sb = new StringBuilder ();
-                               if (Parameters.Count > 0)\r
-                                       foreach (OracleParameter parm in Parameters) {\r
-                                               if (sb.Length > 0)\r
-                                                       sb.Append (",");\r
-                                               sb.Append (":" + parm.ParameterName);\r
-                                       }\r
-\r
-                               string sql = "call " + commandText + "(" + sb.ToString() + ")";\r
+                               if (Parameters.Count > 0)
+                                       foreach (OracleParameter parm in Parameters) {
+                                               if (sb.Length > 0)
+                                                       sb.Append (",");
+                                               sb.Append (":" + parm.ParameterName);
+                                       }
+
+                               string sql = "call " + commandText + "(" + sb.ToString() + ")";
                                statement.Prepare (sql);
                        }
                        else    // Text