2002-07-28 Rodrigo Moya <rodrigo@ximian.com>
authorRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Sun, 28 Jul 2002 23:28:55 +0000 (23:28 -0000)
committerRodrigo Moya <rodrigo@mono-cvs.ximian.com>
Sun, 28 Jul 2002 23:28:55 +0000 (23:28 -0000)
* OleDbCommand.cs (ExecuteReader):
(CreateParameter): implemented IDbCommand methods.
(CommandText): don't create many GdaCommand's, only one is needed.
(ExecuteNonQuery): set up the internal GDA command object.
(ExecuteReader): use correctly the unique GDA command object.

* libgda.cs: added new libgda calls.

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

mcs/class/System.Data/System.Data.OleDb/ChangeLog
mcs/class/System.Data/System.Data.OleDb/OleDbCommand.cs
mcs/class/System.Data/System.Data.OleDb/OleDbTransaction.cs
mcs/class/System.Data/System.Data.OleDb/libgda.cs

index afbf83399cb4542ea8f3aac87582629fbc0d996b..8e769cfc1cfbef83009ca5dd2928bbb42d68ee97 100644 (file)
@@ -1,3 +1,18 @@
+2002-07-28  Rodrigo Moya <rodrigo@ximian.com>
+
+       * OleDbCommand.cs (ExecuteReader):
+       (CreateParameter): implemented IDbCommand methods.
+       (CommandText): don't create many GdaCommand's, only one is needed.
+       (ExecuteNonQuery): set up the internal GDA command object.
+       (ExecuteReader): use correctly the unique GDA command object.
+
+       * libgda.cs: added new libgda calls.
+
+2002-07-27  Rodrigo Moya <rodrigo@ximian.com>
+
+       * OleDbConnection.cs (CreateCommand):
+       (BeginTransaction): implemented IDbConnection methods.
+
 2002-07-11  Rodrigo Moya <rodrigo@ximian.com>
 
        * libgda.cs: added new libgda functions and some enumerations.
index 87bcfeb5bd8faa15cbc8f1ad6dfb3b4918c2746f..127f3c8f4000efb0c673da698b238cd8f52f4f8b 100644 (file)
@@ -32,7 +32,7 @@ namespace System.Data.OleDb
                bool designTimeVisible;
                OleDbDataReader dataReader;
                CommandBehavior behavior;
-               ArrayList gdaCommands;
+               IntPtr gdaCommand;
                ArrayList gdaResults;
 
                #endregion // Fields
@@ -50,7 +50,7 @@ namespace System.Data.OleDb
                        designTimeVisible = false;
                        dataReader = null;
                        behavior = CommandBehavior.Default;
-                       gdaCommands = new ArrayList ();
+                       gdaCommand = IntPtr.Zero;
                        gdaResults = new ArrayList ();
                }
 
@@ -80,13 +80,7 @@ namespace System.Data.OleDb
                {
                        get { return commandText; }
                        set { 
-                               string[] queries = value.Split (new Char[] {';'});
-                               gdaCommands.Clear ();
-
-                               foreach (string query in queries) 
-                                       gdaCommands.Add (libgda.gda_command_new (query, 0, 0));
-
-                               commandText = value; 
+                               commandText = value;
                        }
                }
 
@@ -160,12 +154,44 @@ namespace System.Data.OleDb
                        return new OleDbParameter ();
                }
 
+               IDbDataParameter IDbCommand.CreateParameter ()
+               {
+                       return CreateParameter ();
+               }
+               
                [MonoTODO]
                protected override void Dispose (bool disposing)
                {
                        throw new NotImplementedException ();
                }
 
+               private void SetupGdaCommand ()
+               {
+                       GdaCommandType type;
+                       
+                       switch (commandType) {
+                       case CommandType.TableDirect :
+                               type = GdaCommandType.Table;
+                               break;
+                       case CommandType.StoredProcedure :
+                               type = GdaCommandType.Procedure;
+                               break;
+                       case CommandType.Text :
+                       default :
+                               type = GdaCommandType.Sql;
+                               break;
+                       }
+                       
+                       if (gdaCommand != IntPtr.Zero) {
+                               libgda.gda_command_set_text (gdaCommand, commandText);
+                               libgda.gda_command_set_command_type (gdaCommand, type);
+                       } else {
+                               gdaCommand = libgda.gda_command_new (commandText, type, 0);
+                       }
+
+                       //libgda.gda_command_set_transaction 
+               }
+               
                public int ExecuteNonQuery ()
                {
                        if (connection == null)
@@ -177,7 +203,8 @@ namespace System.Data.OleDb
                        IntPtr gdaConnection = connection.GdaConnection;
                        IntPtr gdaParameterList = parameters.GdaParameterList;
 
-                       return libgda.gda_connection_execute_non_query (gdaConnection, (IntPtr) gdaCommands[0], gdaParameterList);
+                       SetupGdaCommand ();
+                       return libgda.gda_connection_execute_non_query (gdaConnection, (IntPtr) gdaCommand, gdaParameterList);
                }
 
                public OleDbDataReader ExecuteReader ()
@@ -185,6 +212,11 @@ namespace System.Data.OleDb
                        return ExecuteReader (CommandBehavior.Default);
                }
 
+               IDataReader IDbCommand.ExecuteReader ()
+               {
+                       return ExecuteReader ();
+               }
+
                public OleDbDataReader ExecuteReader (CommandBehavior behavior)
                {
                        if (connection.State != ConnectionState.Open)
@@ -195,42 +227,32 @@ namespace System.Data.OleDb
                        IntPtr gdaConnection = connection.GdaConnection;
                        IntPtr gdaParameterList = parameters.GdaParameterList;
 
-                       foreach (IntPtr gdaCommand in gdaCommands) 
-                               GdaResults.Add (libgda.gda_connection_execute_single_command (gdaConnection, gdaCommand, gdaParameterList));
+                       /* FIXME: split all returned resultsets into
+                          our internal GdaResults */
+                       GdaResults.Add (libgda.gda_connection_execute_command (
+                                               gdaConnection,
+                                               gdaCommand,
+                                               gdaParameterList));
 
                        dataReader = new OleDbDataReader (this);
-
                        dataReader.NextResult ();
 
                        return dataReader;
                }
 
-               [MonoTODO]
-               public object ExecuteScalar ()
-               {
-                       throw new NotImplementedException ();   
-               }
-
-               [MonoTODO]
-               object ICloneable.Clone ()
-               {
-                       throw new NotImplementedException ();   
-               }
-
-               [MonoTODO]
-               IDbDataParameter IDbCommand.CreateParameter ()
+               IDataReader IDbCommand.ExecuteReader (CommandBehavior behavior)
                {
-                       throw new NotImplementedException ();   
+                       return ExecuteReader (behavior);
                }
-
+               
                [MonoTODO]
-               IDataReader IDbCommand.ExecuteReader ()
+               public object ExecuteScalar ()
                {
                        throw new NotImplementedException ();   
                }
 
                [MonoTODO]
-               IDataReader IDbCommand.ExecuteReader (CommandBehavior behavior)
+               object ICloneable.Clone ()
                {
                        throw new NotImplementedException ();   
                }
index 763955ff4a1852b368ad83e39018d9c2c83cbdf9..092241cb25fe31b42e5b09450def7b966b6ed8e2 100644 (file)
@@ -61,13 +61,13 @@ namespace System.Data.OleDb
                        get { return connection; }
                }
 
-               public IsolationLevel IsolationLevel {
-                       get { return isolationLevel; }
-               }
-
                IDbConnection IDbTransaction.Connection {
                        get { return connection; }
                }
+               
+               public IsolationLevel IsolationLevel {
+                       get { return isolationLevel; }
+               }
 
                #endregion // Properties
 
index 4c0065b7799bc0e33b44f66e4c96b43c2baceae1..1d2811ff328d53b33b4a59b720115d70049af57f 100644 (file)
@@ -100,6 +100,9 @@ namespace System.Data.OleDb
                [DllImport("gda-2")]
                public static extern bool gda_connection_rollback_transaction (IntPtr cnc, IntPtr xaction);
 
+               [DllImport("gda-2")]
+               public static extern IntPtr gda_connection_execute_command (IntPtr cnc, IntPtr cmd, IntPtr parameterList);
+               
                [DllImport("gda-2")]
                public static extern int gda_connection_execute_non_query (IntPtr cnc, IntPtr command, IntPtr parameterList);
 
@@ -107,6 +110,12 @@ namespace System.Data.OleDb
                public static extern IntPtr gda_connection_execute_single_command (IntPtr cnc, IntPtr command, IntPtr parameterList);
 
                [DllImport("gda-2")]
-               public static extern IntPtr gda_command_new (string text, int type, int options);
+               public static extern IntPtr gda_command_new (string text, GdaCommandType type, GdaCommandOptions options);
+
+               [DllImport("gda-2")]
+               public static extern void gda_command_set_text (IntPtr cmd, string text);
+
+               [DllImport("gda-2")]
+               public static extern void gda_command_set_command_type (IntPtr cmd, GdaCommandType type);
        }
 }