[MonoDevelop] Re: [PATCH] Mono.Data.Sql - remove refereces to data
providers and use Mono.Data.ProviderFactory
Christian Hergert
christian.hergert at gmail.com
Thu Feb 23 01:31:59 EST 2006
I would like to see the provider factory stuff move into mono.data.sql
if we can do so.
-- Christian
On 2/22/06, Daniel Morgan <danielmorgan at verizon.net> wrote:
> The patch is just for research purposes to move Mono.Data.Sql forward.
>
> The filename is diff.txt
>
> I've only tested it with Oracle though. Can you test the Npsql provider
> please?
>
> Your thoughts on this?
>
> Right now, I'm using the Mono.Data.ProviderFactory within
> Mono.Data.Sql. Maybe, I should just merge the Mono.Data.ProviderFactory
> stuff into Mono.Data.Sql?
>
>
>
> Index: tests/test-oracle-1.cs
> ===================================================================
> --- tests/test-oracle-1.cs (revision 57083)
> +++ tests/test-oracle-1.cs (working copy)
> @@ -1,38 +1,74 @@
> // test-oracle-1.cs
> //
> -// $ mcs test-oracle-1.cs /r:System.Data /r:System.Data.OracleClient /r:Mono.Data.Sql
> +// $ mcs test-oracle-1.cs /r:System.Data /r:Mono.Data.Sql /r:Mono.Data
> //
>
> using System;
> +using System.Collections;
> using System.Data;
> -using System.Data.OracleClient;
> +using System.Data.Common;
> +using System.Data.SqlTypes;
> using System.Text;
> using Mono.Data.Sql;
> +using Mono.Data;
>
> namespace Mono.Data.Sql.Tests
> {
> public class CreateProviderTest
> {
> - static OracleDbProvider provider = null;
> + static DbProviderBase provider = null;
>
> static TableSchema[] tables = null;
> static ViewSchema[] views = null;
> +
> + public static void Main(string[] args)
> + {
> + Test2();
> + Test1();
> + }
> +
> + public static void Test2()
> + {
> + Console.WriteLine("Test2 Oracle Meta Data Provider using MetaDataProviderFactory...");
> +
> + string setting = "OraConnStr";
> + provider = MetaDataProviderFactory.GetDbProviderBaseFromSetting(setting);
> + Console.Error.WriteLine("+++ provider.ConnectionString: " + provider.ConnectionString);
> + Console.Error.WriteLine("+++ provider.Provider.Name: " + provider.Provider.Name);
> + Console.Error.WriteLine("+++ provider.ProviderName: " + provider.ProviderName);
> + Console.Error.WriteLine("+++ Open()...");
> + provider.Open();
> +
> + ListTables ();
> +
> + tables = null;
> +
> + provider.Close();
> + provider = null;
> +
> + Console.WriteLine("Test Done.");
> + }
>
> - public static void Main(string[] args)
> + public static void Test1()
> {
> - Console.WriteLine("Test Oracle Meta Data Provider...");
> + Console.WriteLine("Test1 Oracle Meta Data Provider...");
>
> - provider = new OracleDbProvider ();
> + provider = (DbProviderBase) new OracleDbProvider ();
> provider.ConnectionString = "Data Source=palis;user id=scott;password=tiger";
> + Console.Error.WriteLine("+++ provider.ConnectionString: " + provider.ConnectionString);
> + Console.Error.WriteLine("+++ provider.Provider.Name: " + provider.Provider.Name);
> + Console.Error.WriteLine("+++ provider.ProviderName: " + provider.ProviderName);
> + Console.Error.WriteLine("+++ Open()...");
> provider.Open ();
>
> ListTables ();
> - ListViews ();
> + //ListViews ();
>
> tables = null;
> views = null;
>
> provider.Close();
> + provider = null;
>
> Console.WriteLine("Test Done.");
> }
> Index: tests/test-oracle-1.exe.config
> ===================================================================
> --- tests/test-oracle-1.exe.config (revision 0)
> +++ tests/test-oracle-1.exe.config (revision 0)
> @@ -0,0 +1,149 @@
> +<?xml version="1.0" encoding="utf-8" ?>
> +<configuration>
> + <configSections>
> + <sectionGroup name="mono.data">
> + <section name="providers" type="Mono.Data.ProviderSectionHandler,Mono.Data" />
> + </sectionGroup>
> + <sectionGroup name="mono.data.sql">
> + <section name="metadataproviders" type="Mono.Data.Sql.MetaDataProviderSectionHandler,Mono.Data.Sql" />
> + </sectionGroup>
> + </configSections>
> + <appSettings>
> + <add key="PubsConnStr" value="factory=System.Data.SqlClient;server=localhost;database=testdb;uid=sa;pwd=mypassword" />
> + <add key="OraConnStr" value="factory=System.Data.OracleClient;data source=palis;user id=scott;password=tiger" />
> + <add key="PgConnStr" value="factory=Npgsql;Server=localhost;Database=monotest;User ID=monotest;Password=monotest" />
> + <!--<add key="MySqlByteFXConnStr" value="factory=ByteFX.Data.MySqlClient;Database=test" />-->
> + <!--<add key="FireConnStr" value="factory=FirebirdSql.Data.Firebird;Database=E:\FIREBIRD\EXAMPLES\EMPLOYEE.FDB;User=SYSDBA;Password=masterkey;Dialect=3;Server=localhost" />-->
> + <add key="Sqlite2ConnStr" value="factory=Mono.Data.SqliteClient;URI=file:sqlitetest2.db" />
> + <add key="Sqlite3ConnStr" value="factory=Mono.Data.SqliteClient;URI=file:sqlitetest3.db,Version=3" />
> + <add key="SybaseConnStr" value="factory=Mono.Data.SybaseClient;Server=MYSERVER,5000;Database=testdb;User ID=sa;Password=;" />
> + <!--<add key="MySqlConnStr" value="factory=MySql.Data;server=localhost;user id=userl;password=pass;database=mysql;pooling=false" />-->
> + </appSettings>
> + <mono.data>
> + <providers>
> + <provider
> + name="System.Data.SqlClient"
> + connection="System.Data.SqlClient.SqlConnection"
> + adapter="System.Data.SqlClient.SqlDataAdapter"
> + command="System.Data.SqlClient.SqlCommand"
> + assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> + description="Microsoft SQL Server 7.0/2000/2005"
> + parameterprefix="at"
> + commandbuilder="System.Data.SqlClient.SqlCommandBuilder" />
> + <provider
> + name="System.Data.OleDb"
> + connection="System.Data.OleDb.OleDbConnection"
> + adapter="System.Data.OleDb.OleDbDataAdapter"
> + command="System.Data.OleDb.OleDbCommand"
> + assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> + description="OLE DB" />
> + <provider
> + name="System.Data.Odbc"
> + connection="System.Data.Odbc.OdbcConnection"
> + adapter="System.Data.Odbc.OdbcDataAdapter"
> + command="System.Data.Odbc.OdbcCommand"
> + assembly="System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> + description="ODBC"
> + parameterprefix="questionmark"
> + commandbuilder="System.Data.Odbc.OdbcCommandBuilder" />
> + <provider
> + name="System.Data.OracleClient"
> + connection="System.Data.OracleClient.OracleConnection"
> + adapter="System.Data.OracleClient.OracleDataAdapter"
> + command="System.Data.OracleClient.OracleCommand"
> + assembly="System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
> + description="Oracle"
> + parameterprefix="colon"
> + commandbuilder="System.Data.OracleClient.OracleCommandBuilder" />
> + <!--<provider
> + name="ByteFX.Data.MySqlClient"
> + connection="ByteFX.Data.MySqlClient.MySqlConnection"
> + adapter="ByteFX.Data.MySqlClient.MySqlDataAdapter"
> + command="ByteFX.Data.MySqlClient.MySqlCommand"
> + assembly="ByteFX.Data, Version=0.7.6.1, Culture=neutral, PublicKeyToken=0738eb9f132ed756"
> + description="MySQL (ByteFX)" />-->
> + <provider
> + name="Npgsql"
> + connection="Npgsql.NpgsqlConnection"
> + adapter="Npgsql.NpgsqlDataAdapter"
> + command="Npgsql.NpgsqlCommand"
> + assembly="Npgsql, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7"
> + description="PostgreSQL"
> + parameterprefix="at"
> + commandbuilder="Npgsql.NpgsqlCommandBuilder" />
> + <provider
> + name="Mono.Data.SqliteClient"
> + connection="Mono.Data.SqliteClient.SqliteConnection"
> + adapter="Mono.Data.SqliteClient.SqliteDataAdapter"
> + command="Mono.Data.SqliteClient.SqliteCommand"
> + assembly="Mono.Data.SqliteClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"
> + description="SQL Lite"
> + parameterprefix="colon" />
> + <provider
> + name="Mono.Data.SybaseClient"
> + connection="Mono.Data.SybaseClient.SybaseConnection"
> + adapter="Mono.Data.SybaseClient.SybaseDataAdapter"
> + command="Mono.Data.SybaseClient.SybaseCommand"
> + assembly="Mono.Data.SybaseClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756"
> + description="Sybase"
> + parameterprefix="at" />
> + <!--<provider
> + name="FirebirdSql.Data.Firebird"
> + connection="FirebirdSql.Data.Firebird.FbConnection"
> + adapter="FirebirdSql.Data.Firebird.FbDataAdapter"
> + command="FirebirdSql.Data.Firebird.FbCommand"
> + assembly="FirebirdSql.Data.Firebird, Version=1.6.3.0, Culture=neutral, PublicKeyToken=e1b4f92304d7b12f"
> + description="Firebird"
> + parameterprefix="at"
> + commandbuilder="FirebirdSql.Data.Firebird.FbCommandBuilder" />-->
> + <!--<provider
> + name="IBM.Data.DB2"
> + connection="IBM.Data.DB2.DB2Connection"
> + adapter="IBM.Data.DB2.DB2DataAdapter"
> + command="IBM.Data.DB2.DB2Command"
> + assembly="IBM.Data.DB2, Version=1.0.1728.9997, Culture=neutral, PublicKeyToken=7c307b91aa13d208"
> + description="IBM DB2 Universal Database" />-->
> + <!--<provider
> + name="MySql.Data"
> + connection="MySql.Data.MySqlClient.MySqlConnection"
> + adapter="MySql.Data.MySqlClient.MySqlDataAdapter"
> + command="MySql.Data.MySqlClient.MySqlCommand"
> + assembly="MySql.Data, Version=1.0.7.30073, Culture=neutral, PublicKeyToken=8e323390df8d9ed4"
> + description="MySQL (MySQL AB)"
> + parameterprefix="at"
> + commandbuilder="MySql.Data.MySqlClient.MySqlCommandBuilder" />-->
> + </providers>
> + </mono.data>
> + <mono.data.sql>
> + <metadataproviders>
> + <metaprovider
> + providername="System.Data.SqlClient"
> + metaprovidername="Mono.Data.Sql.SqlDbProvider" />
> + <metaprovider
> + providername="System.Data.Odbc"
> + metaprovidername="Mono.Data.Sql.OdbcDbProvider" />
> + <metaprovider
> + providername="System.Data.OracleClient"
> + metaprovidername="Mono.Data.Sql.OracleDbProvider" />
> + <metaprovider
> + providername="Npgsql"
> + metaprovidername="Mono.Data.Sql.NpgsqlDbProvider" />
> + <metaprovider
> + providername="Mono.Data.SqliteClient"
> + metaprovidername="Mono.Data.Sql.SqliteDbProvider" />
> + <metaprovider
> + providername="Mono.Data.SybaseClient"
> + metaprovidername="Mono.Data.Sql.SybaseDbProvider" />
> + <!--<metaprovider
> + providername="FirebirdSql.Data.Firebird"
> + metaprovidername="Mono.Data.Sql.FirebirdDbProvider" />-->
> + <!--<metaprovider
> + providername="MySql.Data"
> + metaprovidername="Mono.Data.Sql.MySqlDbProvider" />-->
> + <!--<metaprovider
> + providername="ByteFX.Data.MySqlClient"
> + metaprovidername="Mono.Data.Sql.MySqlDbProvider" />-->
> + </metadataproviders>
> + </mono.data.sql>
> +</configuration>
> +
>
> Property changes on: tests/test-oracle-1.exe.config
> ___________________________________________________________________
> Name: svn:executable
> + *
>
> Index: Mono.Data.Sql/Providers/DbProviderBase.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/DbProviderBase.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/DbProviderBase.cs (working copy)
> @@ -3,8 +3,10 @@
> //
> // Authors:
> // Christian Hergert <chris at mosaix.net>
> +// Daniel Morgan <danielmorgan at verizon.net>
> //
> // Copyright (C) 2005 Mosaix Communications, Inc.
> +// Copyright (C) 2006 Daniel Morgan
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -31,6 +33,8 @@
> using System.Data;
> using System.Threading;
>
> +using Mono.Data;
> +
> namespace Mono.Data.Sql
> {
> public delegate void DbProviderChangedEventHandler (object sender, DbProviderChangedArgs args);
> @@ -47,13 +51,13 @@
> }
>
> [Serializable]
> - public abstract class DbProviderBase
> - {
> + public abstract class DbProviderBase {
> public event DbProviderChangedEventHandler NameChanged;
> public event DbProviderChangedEventHandler StateChanged;
> public event DbProviderChangedEventHandler Refreshed;
>
> protected string name = String.Empty;
> + Provider provider = null;
>
> #region // Threading objects
> Object ThreadSync = new Object ();
> @@ -64,13 +68,27 @@
> String ThreadedSQLText = String.Empty;
> #endregion // End of Threading objects
>
> - public DbProviderBase ()
> + public DbProviderBase ()
> {
> + provider = GetMonoDataProvider ();
> }
> +
> + public DbProviderBase (Provider provider)
> + {
> + this.provider = provider;
> + }
> +
> + public Provider Provider {
> + get {
> + if (provider == null)
> + provider = GetMonoDataProvider ();
> + return provider;
> + }
> + }
>
> public virtual string ProviderName {
> get {
> - return "Unknown Provider";
> + return provider.Name;
> }
> }
>
> @@ -117,30 +135,30 @@
> return true;
> }
> }
> -
> - public virtual bool Open ()
> +
> + private Provider GetMonoDataProvider()
> {
> + return MetaDataProviderFactory.GetProvider (this);
> + }
> +
> + public virtual bool Open () {
> return IsOpen;
> }
>
> - public virtual void Close ()
> - {
> + public virtual void Close () {
> throw new NotImplementedException ();
> }
>
> - public virtual void Refresh ()
> - {
> + public virtual void Refresh () {
> if (Refreshed != null)
> Refreshed (this, new DbProviderChangedArgs (this));
> }
>
> - public virtual bool SupportsSchemaType (Type type)
> - {
> + public virtual bool SupportsSchemaType (Type type) {
> return false;
> }
>
> - public virtual void ExecuteSQL (string SQLText, SQLCallback Callback)
> - {
> + public virtual void ExecuteSQL (string SQLText, SQLCallback Callback) {
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> ThreadedSQLText = SQLText;
> @@ -149,13 +167,11 @@
> }
> }
>
> - public virtual DataTable ExecuteSQL (string SQLText)
> - {
> + public virtual DataTable ExecuteSQL (string SQLText) {
> throw new NotImplementedException ();
> }
>
> - public virtual void ExplainSQL (string SQLText, SQLCallback Callback)
> - {
> + public virtual void ExplainSQL (string SQLText, SQLCallback Callback) {
> if (CanExplain != true)
> return;
>
> @@ -167,16 +183,14 @@
> }
> }
>
> - public virtual DataTable ExplainSQL (string SQLText)
> - {
> + public virtual DataTable ExplainSQL (string SQLText) {
> if (CanExplain == false)
> return null;
>
> return ExecuteSQL (String.Format ("EXPLAIN {0}", SQLText));
> }
>
> - public virtual void GetTables (SQLCallback Callback)
> - {
> + public virtual void GetTables (SQLCallback Callback) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -185,13 +199,11 @@
> }
> }
>
> - public virtual TableSchema[] GetTables ()
> - {
> + public virtual TableSchema[] GetTables () {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetTableColumns (SQLCallback Callback, TableSchema schema)
> - {
> + public virtual void GetTableColumns (SQLCallback Callback, TableSchema schema) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -201,13 +213,11 @@
> }
> }
>
> - public virtual ColumnSchema[] GetTableColumns (TableSchema schema)
> - {
> + public virtual ColumnSchema[] GetTableColumns (TableSchema schema) {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetTableConstraints (SQLCallback Callback, TableSchema schema)
> - {
> + public virtual void GetTableConstraints (SQLCallback Callback, TableSchema schema) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -217,13 +227,11 @@
> }
> }
>
> - public virtual ConstraintSchema[] GetTableConstraints (TableSchema schema)
> - {
> + public virtual ConstraintSchema[] GetTableConstraints (TableSchema schema) {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetViews (SQLCallback Callback)
> - {
> + public virtual void GetViews (SQLCallback Callback) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -232,13 +240,11 @@
> }
> }
>
> - public virtual ViewSchema[] GetViews ()
> - {
> + public virtual ViewSchema[] GetViews () {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetViewColumns (SQLCallback Callback, ViewSchema schema)
> - {
> + public virtual void GetViewColumns (SQLCallback Callback, ViewSchema schema) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -248,13 +254,11 @@
> }
> }
>
> - public virtual ColumnSchema[] GetViewColumns (ViewSchema schema)
> - {
> + public virtual ColumnSchema[] GetViewColumns (ViewSchema schema) {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetProcedures (SQLCallback Callback)
> - {
> + public virtual void GetProcedures (SQLCallback Callback) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -263,13 +267,11 @@
> }
> }
>
> - public virtual ProcedureSchema[] GetProcedures ()
> - {
> + public virtual ProcedureSchema[] GetProcedures () {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetProcedureColumns (SQLCallback Callback, ProcedureSchema schema)
> - {
> + public virtual void GetProcedureColumns (SQLCallback Callback, ProcedureSchema schema) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -280,13 +282,11 @@
> }
> }
>
> - public virtual ColumnSchema[] GetProcedureColumns (ProcedureSchema schema)
> - {
> + public virtual ColumnSchema[] GetProcedureColumns (ProcedureSchema schema) {
> throw new NotImplementedException ();
> }
>
> - public virtual void GetUsers (SQLCallback Callback)
> - {
> + public virtual void GetUsers (SQLCallback Callback) {
> Thread eThread = null;
> lock (ThreadSync) {
> ThreadedSQLCallback = Callback;
> @@ -295,87 +295,75 @@
> }
> }
>
> - public virtual UserSchema[] GetUsers ()
> - {
> + public virtual UserSchema[] GetUsers () {
> throw new NotImplementedException ();
> }
>
> - protected virtual void OnOpen ()
> - {
> + protected virtual void OnOpen () {
> if (StateChanged != null)
> StateChanged (this, new DbProviderChangedArgs (this));
> }
>
> - protected virtual void OnClose ()
> - {
> + protected virtual void OnClose () {
> if (StateChanged != null)
> StateChanged (this, new DbProviderChangedArgs (this));
> }
>
> - protected virtual void ExecuteSQLThreadStart ()
> - {
> + protected virtual void ExecuteSQLThreadStart () {
> string SQLText = ThreadedSQLText;
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, ExecuteSQL (SQLText));
> }
>
> - protected virtual void ExplainSQLThreadStart ()
> - {
> + protected virtual void ExplainSQLThreadStart () {
> string SQLText = ThreadedSQLText;
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, ExplainSQL (SQLText));
> }
>
> - protected virtual void GetTablesThreadStart ()
> - {
> + protected virtual void GetTablesThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, GetTables ());
> }
>
> - protected virtual void GetTableColumnsThreadStart ()
> - {
> + protected virtual void GetTableColumnsThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> TableSchema Table = ThreadedTableSchema;
> Callback (this, GetTableColumns (Table));
> }
>
> - protected virtual void GetTableConstraintsThreadStart ()
> - {
> + protected virtual void GetTableConstraintsThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> TableSchema Table = ThreadedTableSchema;
> Callback (this, GetTableConstraints (Table));
> }
>
> - protected virtual void GetViewsThreadStart ()
> - {
> + protected virtual void GetViewsThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, GetViews ());
> }
>
> - protected virtual void GetViewColumnsThreadStart ()
> - {
> + protected virtual void GetViewColumnsThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> ViewSchema view = ThreadedViewSchema;
> Callback (this, GetViewColumns (view));
> }
>
> - protected virtual void GetProceduresThreadStart ()
> - {
> + protected virtual void GetProceduresThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, GetProcedures ());
> }
>
> - protected virtual void GetProcedureColumnsThreadStart ()
> - {
> + protected virtual void GetProcedureColumnsThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> ProcedureSchema schema = ThreadedProcedureSchema;
> Callback (this, GetProcedureColumns (schema));
> }
>
> - protected virtual void GetUsersThreadStart ()
> - {
> + protected virtual void GetUsersThreadStart () {
> SQLCallback Callback = ThreadedSQLCallback;
> Callback (this, GetUsers ());
> }
> }
> -}
> \ No newline at end of file
> +}
> +
> Index: Mono.Data.Sql/Providers/MetaDataProviderSectionHandler.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/MetaDataProviderSectionHandler.cs (revision 0)
> +++ Mono.Data.Sql/Providers/MetaDataProviderSectionHandler.cs (revision 0)
> @@ -0,0 +1,96 @@
> +//
> +// Mono.Data.Sql.MeataDataProviderSectionHandler
> +//
> +// Authors:
> +// Brian Ritchie (brianlritchie at hotmail.com)
> +// Daniel Morgan <danielmorgan at verizon.net>
> +//
> +//
> +// Copyright (C) Brian Ritchie, 2002
> +// Copyright (C) Daniel Morgan, 2006
> +//
> +
> +//
> +// Permission is hereby granted, free of charge, to any person obtaining
> +// a copy of this software and associated documentation files (the
> +// "Software"), to deal in the Software without restriction, including
> +// without limitation the rights to use, copy, modify, merge, publish,
> +// distribute, sublicense, and/or sell copies of the Software, and to
> +// permit persons to whom the Software is furnished to do so, subject to
> +// the following conditions:
> +//
> +// The above copyright notice and this permission notice shall be
> +// included in all copies or substantial portions of the Software.
> +//
> +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
> +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
> +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> +//
> +
> +using System;
> +using System.Collections;
> +using System.Xml;
> +using System.Configuration;
> +using Mono.Data;
> +using System.Reflection;
> +
> +namespace Mono.Data.Sql
> +{
> + public class MetaDataProviderSectionHandler : IConfigurationSectionHandler
> + {
> + public virtual object Create (object parent, object configContext, XmlNode section)
> + {
> + if (section == null)
> + throw new System.ArgumentNullException ("section");
> +
> + ArrayList providers = new ArrayList();
> + Assembly assembly = Assembly.GetExecutingAssembly();
> +
> + XmlNodeList ProviderList = section.SelectNodes ("./metaprovider");
> + foreach (XmlNode ProviderNode in ProviderList) {
> + string providername = GetStringValue (ProviderNode, "providername", true);
> + string metaprovidername = GetStringValue (ProviderNode, "metaprovidername", true);
> +
> + // get provider instance
> + Provider provider = null;
> + try {
> + provider = ProviderFactory.Providers[providername];
> + }
> + catch(ArgumentOutOfRangeException ae) {
> + throw new Exception("Can not find a Provider that matches providername in config file.");
> +
> + }
> +
> + // get meata data provider (dbprovider)
> + Type dbprovidertype = assembly.GetType(metaprovidername);
> + if (dbprovidertype == null)
> + throw new Exception("Can not find a DbProvider that matches metaprovidername in the config file.");
> + object[] parms = new object [] { provider };
> + object obj = Activator.CreateInstance (dbprovidertype, parms);
> + DbProviderBase dbprovider = (DbProviderBase) obj;
> +
> + // add dbprovider to collection of dbproviders
> + providers.Add (dbprovider);
> + }
> +
> + return (DbProviderBase[]) providers.ToArray(typeof(DbProviderBase));
> + }
> +
> + private string GetStringValue(XmlNode _node, string _attribute, bool required)
> + {
> + XmlNode a = _node.Attributes.RemoveNamedItem(_attribute);
> + if (a == null) {
> + if (required)
> + throw new ConfigurationException("Attribute required: " + _attribute);
> + else
> + return null;
> + }
> + return a.Value;
> + }
> + }
> +}
> +
>
> Property changes on: Mono.Data.Sql/Providers/MetaDataProviderSectionHandler.cs
> ___________________________________________________________________
> Name: svn:executable
> + *
>
> Index: Mono.Data.Sql/Providers/SqlDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/SqlDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/SqlDbProvider.cs (working copy)
> @@ -7,6 +7,8 @@
> // Sureshkumar T <tsureshkumar at novell.com>
> //
> // Copyright (C) 2005 Mosaix Communications, Inc.
> +// Copyright (C) 2005, 2006 Daniel Morgan
> +// Copyright (C) 2005 Novell
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -34,7 +36,7 @@
> using System.Text;
> using System.Text.RegularExpressions;
>
> -using System.Data.SqlClient;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> @@ -44,8 +46,8 @@
> [Serializable]
> public class SqlDbProvider : DbProviderBase
> {
> - protected SqlConnection connection = null;
> - protected SqlDataAdapter adapter = new SqlDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
>
> /// <summary>
> @@ -53,21 +55,28 @@
> /// </summary>
> public SqlDbProvider () : base ()
> {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> - public override string ProviderName {
> - get {
> - return "SQL Server Database";
> - }
> +
> + public SqlDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> +
> /// <summary>
> /// Constructor with ADO.NET Sql connection.
> /// </summary>
> - public SqlDbProvider (SqlConnection conn)
> + public SqlDbProvider (IDbConnection conn)
> {
> connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> }
> +
> + public override string ProviderName {
> + get {
> + return "Microsoft SQL Server Database";
> + }
> + }
>
> /// <summary>
> /// ADO.NET Connection
> @@ -75,7 +84,7 @@
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new SqlConnection();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -167,8 +176,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - SqlCommand command = new SqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = SQLText;
>
> DataSet resultSet = new DataSet ();
> @@ -194,8 +202,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - SqlCommand command = new SqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT su.name AS owner, so.name as table_name, so.id as table_id, " +
> " so.crdate as created_date, so.xtype as table_type " +
> @@ -203,7 +210,7 @@
> "WHERE xtype IN ('S','U') " +
> "AND su.uid = so.uid " +
> "ORDER BY 1, 2";
> - SqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> TableSchema table = new TableSchema();
> @@ -259,10 +266,10 @@
> throw new InvalidOperationException ("Invalid connection");
>
> ArrayList collection = new ArrayList();
> - SqlConnection con2 = (SqlConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SqlCommand command = con2.CreateCommand ();
> + IDbCommand command = con2.CreateCommand ();
>
> command.CommandText =
> "SELECT su.name as owner, so.name as table_name, " +
> @@ -279,7 +286,7 @@
> "AND sc.xusertype = st.xusertype " +
> "AND su.uid = so.uid " +
> "ORDER BY sc.colid";
> - SqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ColumnSchema column = new ColumnSchema();
> @@ -321,10 +328,10 @@
> private string GetSource (string objectName)
> {
> string sql = String.Format ("EXEC [master].[dbo].[sp_helptext] '{0}', null", objectName);
> - SqlConnection con2 = (SqlConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SqlCommand cmd = con2.CreateCommand ();
> + IDbCommand cmd = con2.CreateCommand ();
> cmd.CommandText = sql;
> IDataReader reader = cmd.ExecuteReader ();
>
> @@ -352,8 +359,7 @@
> {
> ArrayList collection = new ArrayList();
>
> - SqlCommand command = new SqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT su.name AS owner, so.name as table_name, so.id as table_id, " +
> " so.crdate as created_date, so.xtype as table_type " +
> @@ -361,7 +367,7 @@
> "WHERE xtype = 'V' " +
> "AND su.uid = so.uid " +
> "ORDER BY 1, 2";
> - SqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ViewSchema view = new ViewSchema();
> @@ -402,15 +408,15 @@
>
> ArrayList collection = new ArrayList();
>
> - SqlConnection con2 = (SqlConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SqlCommand command = con2.CreateCommand ();
> + IDbCommand command = con2.CreateCommand ();
> command.CommandText =
> "SELECT * " +
> " FROM " + view.Name +
> " WHERE 1 = 0";
> - SqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> for (int i = 0; i < r.FieldCount; i++) {
> ColumnSchema column = new ColumnSchema();
> @@ -463,14 +469,14 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (SqlCommand cmd = connection.CreateCommand ()) {
> + using (IDbCommand cmd = Connection.CreateCommand ()) {
> cmd.CommandText = "SELECT su.name AS owner, so.name as proc_name, so.id as proc_id, " +
> " so.crdate as created_date, so.xtype as proc_type " +
> "FROM dbo.sysobjects so, dbo.sysusers su " +
> "WHERE xtype = 'P' " +
> "AND su.uid = so.uid " +
> "ORDER BY 1, 2";
> - using (SqlDataReader reader = cmd.ExecuteReader ()) {
> + using (IDataReader reader = cmd.ExecuteReader ()) {
> while (reader.Read ()) {
> ProcedureSchema proc = new ProcedureSchema ();
> proc.Provider = this;
> @@ -486,10 +492,13 @@
> // get procedure text
> cmd.CommandType = CommandType.StoredProcedure;
> cmd.CommandText = "sp_helptext";
> - SqlParameter param = cmd.Parameters.Add ("@objname", SqlDbType.VarChar);
> + IDataParameter param = cmd.CreateParameter ();
> + param.ParameterName = "@objname";
> + param.DbType = DbType.String;
> + cmd.Parameters.Add (param);
> foreach (ProcedureSchema proc in collection) {
> param.Value = proc.Name;
> - using (SqlDataReader reader = cmd.ExecuteReader ()) {
> + using (IDataReader reader = cmd.ExecuteReader ()) {
> if (reader.Read ())
> proc.Definition = (string) reader [0];
> }
> @@ -506,14 +515,23 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (SqlCommand cmd = connection.CreateCommand ()) {
> + using (IDbCommand cmd = Connection.CreateCommand ()) {
> cmd.CommandType = CommandType.StoredProcedure;
> cmd.CommandText = "sp_sproc_columns";
> - SqlParameter owner = cmd.Parameters.Add ("@procedure_owner", SqlDbType.VarChar);
> - SqlParameter name = cmd.Parameters.Add ("@procedure_name", SqlDbType.VarChar);
> +
> + IDataParameter owner = cmd.CreateParameter ();
> + owner.ParameterName = "@procedure_owner";
> + owner.DbType = DbType.String;
> + cmd.Parameters.Add (owner);
> +
> + IDataParameter name = cmd.CreateParameter ();
> + name.ParameterName = "@procedure_name";
> + name.DbType = DbType.String;
> + cmd.Parameters.Add (name);
> +
> owner.Value = schema.OwnerName;
> name.Value = schema.Name;
> - using (SqlDataReader reader = cmd.ExecuteReader ()) {
> + using (IDataReader reader = cmd.ExecuteReader ()) {
> while (reader.Read ()) {
> ColumnSchema column = new ColumnSchema ();
> column.Provider = this;
> @@ -529,3 +547,4 @@
> }
> }
> }
> +
> Index: Mono.Data.Sql/Providers/SqliteDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/SqliteDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/SqliteDbProvider.cs (working copy)
> @@ -31,27 +31,43 @@
> using System.Collections;
> using System.Data;
>
> -using Mono.Data.SqliteClient;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> [Serializable]
> public class SqliteDbProvider : DbProviderBase
> {
> - protected SqliteConnection connection = null;
> - protected SqliteDataAdapter adapter = new SqliteDataAdapter ();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
> +
> + public SqliteDbProvider () : base ()
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
>
> + public SqliteDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> + public SqliteDbProvider (IDbConnection conn) : base ()
> + {
> + connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> public override string ProviderName {
> get {
> - return "SQLite Database";
> + return "SQL Lite Database";
> }
> }
>
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new SqliteConnection ();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -115,7 +131,7 @@
> public override DataTable ExecuteSQL (string SQLText)
> {
> try {
> - SqliteCommand command = new SqliteCommand ();
> + IDbCommand command = Connection.CreateCommand ();
> command.Connection = connection;
> command.CommandText = SQLText;
>
> @@ -144,11 +160,10 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (SqliteCommand command = new SqliteCommand ()) {
> + using (IDbCommand command = Connection.CreateCommand ()) {
> command.CommandText = "select * from sqlite_master";
> - command.Connection = this.connection;
>
> - SqliteDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> TableSchema table = new TableSchema ();
> @@ -171,11 +186,11 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (SqliteCommand command = new SqliteCommand()) {
> + using (IDbCommand command = Connection.CreateCommand ()) {
> command.CommandText = "PRAGMA table_info('" + table.Name + "')";
> command.Connection = this.connection;
>
> - SqliteDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ColumnSchema column = new ColumnSchema ();
> @@ -207,3 +222,4 @@
> }
> }
> }
> +
> Index: Mono.Data.Sql/Providers/MetaDataProviderFactory.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/MetaDataProviderFactory.cs (revision 0)
> +++ Mono.Data.Sql/Providers/MetaDataProviderFactory.cs (revision 0)
> @@ -0,0 +1,153 @@
> +//
> +// Mono.Data.Sql.MetaDataProviderFactory
> +//
> +// Authors:
> +// Brian Ritchie (brianlritchie at hotmail.com)
> +// Daniel Morgan <danielmorgan at verizon.net>
> +//
> +//
> +// Copyright (C) Brian Ritchie, 2002
> +// Copyright (C) Daniel Morgan, 2006
> +//
> +
> +//
> +// Permission is hereby granted, free of charge, to any person obtaining
> +// a copy of this software and associated documentation files (the
> +// "Software"), to deal in the Software without restriction, including
> +// without limitation the rights to use, copy, modify, merge, publish,
> +// distribute, sublicense, and/or sell copies of the Software, and to
> +// permit persons to whom the Software is furnished to do so, subject to
> +// the following conditions:
> +//
> +// The above copyright notice and this permission notice shall be
> +// included in all copies or substantial portions of the Software.
> +//
> +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
> +// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
> +// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
> +// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> +//
> +
> +using System;
> +using System.Data;
> +using System.Reflection;
> +using System.Runtime.Remoting;
> +using System.Configuration;
> +using System.Xml;
> +using System.Collections;
> +using System.Collections.Specialized;
> +using Mono.Data;
> +
> +namespace Mono.Data.Sql {
> + public class MetaDataProviderFactory {
> + private static DbProviderBase[] dbproviders;
> +
> + static MetaDataProviderFactory()
> + {
> + dbproviders = (DbProviderBase[]) ConfigurationSettings.GetConfig ("mono.data.sql/metadataproviders");
> + if (dbproviders == null) {
> + dbproviders = new DbProviderBase[0];
> + // warn the developer or administrator that the provider list is empty
> + System.Diagnostics.Debug.Listeners.Add (new System.Diagnostics.TextWriterTraceListener (Console.Out));
> + System.Diagnostics.Debug.WriteLine ("No meta data providers found. Did you set up a mono.data.sql/metadataproviders area in your app.config or in machine.config?");
> + }
> + }
> +
> + static public DbProviderBase[] MetaDataProviders {
> + get {
> + return dbproviders;
> + }
> + }
> +
> + static public DbProviderBase GetMetaDataProvider (Provider provider)
> + {
> + for (int p = 0; p < MetaDataProviders.Length; p++)
> + if (provider.Name.Equals(MetaDataProviders[p].Provider.Name))
> + return MetaDataProviders[p];
> +
> + return null;
> + }
> +
> + static public Provider GetProvider (DbProviderBase dbprovider)
> + {
> + for (int p = 0; p < MetaDataProviders.Length; p++) {
> + DbProviderBase dbp = MetaDataProviders[p];
> +
> + if (dbp.GetType().ToString().Equals(dbprovider.GetType().ToString()))
> + return MetaDataProviders[p].Provider;
> + }
> + return null;
> + }
> +
> + static public string GetProviderNameFromSetting (string Setting)
> + {
> + string ConnectionString = ConfigurationSettings.AppSettings [Setting];
> + string [] ConnectionAttributes = ConnectionString.Split (new Char [1] { ';' });
> + string providerName = null;
> +
> + foreach (string s in ConnectionAttributes) {
> + string [] AttributeParts = s.Split (new Char [1] { '=' });
> + if (AttributeParts [0].ToLower ().Trim () == "factory")
> + providerName = AttributeParts [1].Trim ();
> + }
> + return providerName;
> + }
> +
> + static public Mono.Data.Provider GetProviderFromSetting (string Setting)
> + {
> + string ConnectionString = ConfigurationSettings.AppSettings [Setting];
> + string [] ConnectionAttributes = ConnectionString.Split (new Char [1] { ';' });
> + string providerName = null;
> +
> + foreach (string s in ConnectionAttributes) {
> + string [] AttributeParts = s.Split (new Char [1] { '=' });
> + if (AttributeParts [0].ToLower ().Trim () == "factory")
> + providerName = AttributeParts [1].Trim ();
> + }
> + Mono.Data.ProviderCollection pc = Mono.Data.ProviderFactory.Providers;
> + Mono.Data.Provider provider = pc[providerName];
> + return provider;
> + }
> +
> + static public string GetConnectionStringFromSetting (string Setting)
> + {
> + string ConnectionString = ConfigurationSettings.AppSettings [Setting];
> + string [] ConnectionAttributes = ConnectionString.Split (new Char [1] { ';' });
> + string NewConnectionString = "";
> + foreach (string s in ConnectionAttributes) {
> + string [] AttributeParts = s.Split (new Char [1] { '=' });
> + if (!AttributeParts [0].ToLower ().Trim ().Equals("factory"))
> + NewConnectionString += ";" + s;
> + }
> + NewConnectionString = NewConnectionString.Remove (0, 1); // remove the initial semicolon
> + return NewConnectionString;
> + }
> +
> + static public DbProviderBase GetDbProviderBaseFromSetting (string Setting)
> + {
> + string ConnectionString = ConfigurationSettings.AppSettings [Setting];
> + string [] ConnectionAttributes = ConnectionString.Split (new Char [1] { ';' });
> + string providerName = null;
> + string NewConnectionString = "";
> + foreach (string s in ConnectionAttributes) {
> + string [] AttributeParts = s.Split (new Char [1] { '=' });
> + if (AttributeParts [0].ToLower ().Trim () == "factory")
> + providerName = AttributeParts [1].Trim ();
> + else
> + NewConnectionString += ";" + s;
> + }
> + NewConnectionString = NewConnectionString.Remove (0, 1); // remove the initial semicolon
> +
> + Mono.Data.ProviderCollection pc = Mono.Data.ProviderFactory.Providers;
> + Mono.Data.Provider provider = pc[providerName];
> +
> + DbProviderBase dbprovider = GetMetaDataProvider(provider);
> + dbprovider.ConnectionString = NewConnectionString;
> + return dbprovider;
> + }
> + }
> +}
> +
>
> Property changes on: Mono.Data.Sql/Providers/MetaDataProviderFactory.cs
> ___________________________________________________________________
> Name: svn:executable
> + *
>
> Index: Mono.Data.Sql/Providers/NpgsqlDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/NpgsqlDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/NpgsqlDbProvider.cs (working copy)
> @@ -31,8 +31,9 @@
> using System.Data;
> using System.Text;
> using System.Text.RegularExpressions;
> +using System.Reflection;
>
> -using Npgsql;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> @@ -42,8 +43,8 @@
> [Serializable]
> public class NpgsqlDbProvider : DbProviderBase
> {
> - protected NpgsqlConnection connection = null;
> - protected NpgsqlDataAdapter adapter = new NpgsqlDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
>
> /// <summary>
> @@ -51,7 +52,19 @@
> /// </summary>
> public NpgsqlDbProvider () : base ()
> {
> + adapter = Provider.CreateDataAdapter ();
> }
> +
> + public NpgsqlDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> + public NpgsqlDbProvider (IDbConnection conn) : base ()
> + {
> + connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> + }
>
> public override string ProviderName {
> get {
> @@ -60,20 +73,12 @@
> }
>
> /// <summary>
> - /// Constructor with ADO.NET Npgsql connection.
> - /// </summary>
> - public NpgsqlDbProvider (NpgsqlConnection conn)
> - {
> - connection = conn;
> - }
> -
> - /// <summary>
> /// ADO.NET Connection
> /// </summary>
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new NpgsqlConnection();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -119,8 +124,8 @@
> /// </summary>
> protected int LastSystemOID {
> get {
> - int major = connection.ServerVersion.Major;
> - int minor = connection.ServerVersion.Minor;
> + int major = GetServerVersion ().Major;
> + int minor = GetServerVersion ().Minor;
>
> if (major == 8)
> return 17137;
> @@ -136,6 +141,12 @@
> return 17137;
> }
> }
> +
> + public Version GetServerVersion ()
> + {
> + PropertyInfo conPropertyInfo = Connection.GetType ().GetProperty ("ServerVersion");
> + return (Version) conPropertyInfo.GetValue (Connection, null);
> + }
>
> /// <summary>
> /// Open the connection. Returns true on success.
> @@ -205,8 +216,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - NpgsqlCommand command = new NpgsqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = SQLText;
>
> DataSet resultSet = new DataSet ();
> @@ -232,8 +242,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - NpgsqlCommand command = new NpgsqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT c.relname, n.nspname, u.usename, d.description "
> + "FROM pg_class c "
> @@ -245,7 +254,7 @@
> + " (SELECT 1 FROM pg_rewrite r "
> + " WHERE r.ev_class = c.oid AND r.ev_type = '1') "
> + "ORDER BY relname;";
> - NpgsqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> TableSchema table = new TableSchema();
> @@ -304,8 +313,7 @@
>
> ArrayList collection = new ArrayList();
>
> - NpgsqlCommand command = new NpgsqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = "SELECT a.attname, a.attnotnull, a.attlen, "
> + "typ.typname, adef.adsrc "
> + "FROM "
> @@ -321,7 +329,7 @@
> + "AND a.attnum > 0 AND NOT a.attisdropped "
> + "AND a.atttypid = typ.oid "
> + "ORDER BY a.attnum;";
> - NpgsqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ColumnSchema column = new ColumnSchema();
> @@ -361,8 +369,7 @@
> {
> ArrayList collection = new ArrayList();
>
> - NpgsqlCommand command = new NpgsqlCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT v.schemaname, v.viewname, v.viewowner, v.definition,"
> + " (c.oid <= " + LastSystemOID + "), "
> @@ -372,7 +379,7 @@
> + "FROM pg_views v, pg_class c "
> + "WHERE v.viewname = c.relname "
> + "ORDER BY viewname";
> - NpgsqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ViewSchema view = new ViewSchema();
> @@ -414,7 +421,7 @@
>
> ArrayList collection = new ArrayList();
>
> - NpgsqlCommand command = new NpgsqlCommand ();
> + IDbCommand command = Connection.CreateCommand ();
> command.Connection = connection;
> command.CommandText =
> "SELECT attname, typname, attlen, attnotnull "
> @@ -428,7 +435,7 @@
> + view.Name + "') "
> + " AND a.attnum > 0 AND NOT a.attisdropped "
> + " ORDER BY a.attnum;";
> - NpgsqlDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ColumnSchema column = new ColumnSchema();
> @@ -463,8 +470,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - NpgsqlCommand command = new NpgsqlCommand ();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = String.Format (
> "SELECT "
> + "pc.conname, "
> @@ -493,7 +499,7 @@
> + " WHERE nspname='{1}')) "
> + "ORDER BY "
> + "1;", table.Name, table.SchemaName);
> - NpgsqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ConstraintSchema constraint = null;
> @@ -534,10 +540,9 @@
>
> ArrayList collection = new ArrayList ();
>
> - NpgsqlCommand command = new NpgsqlCommand ();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = "SELECT * FROM pg_user;";
> - NpgsqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> UserSchema user = new UserSchema ();
> @@ -583,8 +588,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - NpgsqlCommand command = new NpgsqlCommand ();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT pc.proname, pc.oid::integer, pl.lanname, pc.prosrc "
> + "FROM "
> @@ -605,7 +609,7 @@
> + "WHERE pc.proowner = pu.usesysid "
> + "AND pc.prorettype = 0 "
> + "AND pc.prolang = pl.oid;";
> - NpgsqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ProcedureSchema procedure = new ProcedureSchema ();
> @@ -638,14 +642,13 @@
> // FIXME: Won't work properly with overload functions.
> // Maybe check the number of columns in the parameters for
> // proper match.
> - NpgsqlCommand command = new NpgsqlCommand ();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = String.Format (
> "SELECT format_type (prorettype, NULL) "
> + "FROM pg_proc pc, pg_language pl "
> + "WHERE pc.prolang = pl.oid "
> + "AND pc.proname = '{0}';", schema.Name);
> - NpgsqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ColumnSchema column = new ColumnSchema ();
> @@ -663,3 +666,4 @@
> }
> }
> }
> +
> Index: Mono.Data.Sql/Providers/MySqlDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/MySqlDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/MySqlDbProvider.cs (working copy)
> @@ -30,17 +30,35 @@
> using System.Collections;
> using System.Data;
>
> -using ByteFX.Data.MySqlClient;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> [Serializable]
> public class MySqlDbProvider : DbProviderBase
> {
> - protected MySqlConnection connection = null;
> - protected MySqlDataAdapter adapter = new MySqlDataAdapter ();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
> +
> + public MySqlDbProvider () : base ()
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> +
> + public MySqlDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> + public MySqlDbProvider (IDbConnection conn) : base ()
> + {
> + connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> + }
>
> +
> public override string ProviderName {
> get {
> return "MySQL Database";
> @@ -50,7 +68,7 @@
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new MySqlConnection ();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -115,8 +133,7 @@
> public override DataTable ExecuteSQL (string SQLText)
> {
> try {
> - MySqlCommand command = new MySqlCommand ();
> - command.Connection = Connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = SQLText;
>
> DataSet resultSet = null;
> @@ -139,11 +156,10 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (MySqlCommand command = new MySqlCommand ()) {
> - command.Connection = Connection;
> + using (IDbCommand command = Connection.CreateCommand ()) {
> command.CommandText =
> "SHOW TABLES;";
> - MySqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> TableSchema table = new TableSchema ();
> @@ -167,13 +183,12 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (MySqlCommand command = new MySqlCommand ()) {
> - command.Connection = Connection;
> + using (IDbCommand command = Connection.CreateCommand()) {
>
> // XXX: Use String.Format cause mysql parameters suck assmar.
> command.CommandText =
> String.Format ("DESCRIBE {0}", table.Name);
> - MySqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ColumnSchema column = new ColumnSchema ();
> @@ -201,11 +216,9 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (MySqlCommand command = new MySqlCommand ()) {
> - command.Connection = Connection;
> - command.CommandText =
> - "";
> - MySqlDataReader r = command.ExecuteReader ();
> + using (IDbCommand command = Connection.CreateCommand ()) {
> + command.CommandText = "";
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ConstraintSchema constraint = new ConstraintSchema ();
> @@ -230,11 +243,10 @@
>
> ArrayList collection = new ArrayList ();
>
> - using (MySqlCommand command = new MySqlCommand ()) {
> - command.Connection = connection;
> + using (IDbCommand command = Connection.CreateCommand ()) {
> command.CommandText =
> "SELECT DISTINCT user from mysql.user where user != '';";
> - MySqlDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> UserSchema user = new UserSchema ();
> @@ -251,3 +263,4 @@
> }
> }
> }
> +
> Index: Mono.Data.Sql/Providers/OracleDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/OracleDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/OracleDbProvider.cs (working copy)
> @@ -6,7 +6,7 @@
> // Daniel Morgan <danielmorgan at verizon.net>
> //
> // Copyright (C) 2005 Mosaix Communications, Inc.
> -// Copyright (C) 2005 Daniel Morgan
> +// Copyright (C) 2005, 2006 Daniel Morgan
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -34,8 +34,6 @@
> using System.Text;
> using System.Text.RegularExpressions;
>
> -using System.Data.OracleClient;
> -
> namespace Mono.Data.Sql
> {
> /// <summary>
> @@ -44,29 +42,41 @@
> [Serializable]
> public class OracleDbProvider : DbProviderBase
> {
> - protected OracleConnection connection = null;
> - protected OracleDataAdapter adapter = new OracleDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
>
> + public OracleDbProvider () : base ()
> + {
> + adapter = Provider.CreateDataAdapter();
> + }
> +
> + public OracleDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter();
> + }
> +
> + public OracleDbProvider (IDbConnection conn) : base ()
> + {
> + connection = conn;
> + adapter = Provider.CreateDataAdapter();
> + }
> +
> public override string ProviderName {
> get {
> - return "Oracle 8i/9i/10g";
> + return "Oracle";
> }
> }
> -
> - /// <summary>
> - /// ADO.NET Connection
> - /// </summary>
> +
> public override IDbConnection Connection {
> get {
> - if (connection == null) {
> - connection = new OracleConnection();
> - }
> + if (connection == null)
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> }
> -
> +
> /// <summary>
> /// Connection String
> /// </summary>
> @@ -153,8 +163,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - OracleCommand command = new OracleCommand();
> - command.Connection = connection;
> + IDbCommand command = connection.CreateCommand();
> command.CommandText = SQLText;
>
> DataSet resultSet = new DataSet ();
> @@ -196,13 +205,12 @@
>
> ArrayList collection = new ArrayList();
>
> - OracleCommand command = new OracleCommand();
> - command.Connection = connection;
> + IDbCommand command = connection.CreateCommand();
> command.CommandText =
> "SELECT OWNER, TABLE_NAME, TABLESPACE_NAME " +
> "FROM ALL_TABLES " +
> "ORDER BY OWNER, TABLE_NAME";
> - OracleDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> TableSchema table = new TableSchema();
> @@ -263,9 +271,8 @@
>
> ArrayList collection = new ArrayList();
>
> - OracleCommand command = new OracleCommand();
> - command.Connection = connection;
> - command.CommandText =
> + IDbCommand command = connection.CreateCommand();
> + command.CommandText =
> "SELECT OWNER, TABLE_NAME, COLUMN_NAME, " +
> " DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, " +
> " NULLABLE, COLUMN_ID, DEFAULT_LENGTH, DATA_DEFAULT " +
> @@ -273,7 +280,7 @@
> "WHERE OWNER = '" + table.OwnerName + "' " +
> "AND TABLE_NAME = '" + table.Name + "' " +
> "ORDER BY OWNER, TABLE_NAME, COLUMN_ID";
> - OracleDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ColumnSchema column = new ColumnSchema();
> @@ -320,13 +327,12 @@
>
> ArrayList collection = new ArrayList();
>
> - OracleCommand command = new OracleCommand();
> - command.Connection = connection;
> + IDbCommand command = connection.CreateCommand();
> command.CommandText =
> "SELECT OWNER, VIEW_NAME, TEXT " +
> "FROM ALL_VIEWS " +
> "ORDER BY OWNER, VIEW_NAME";
> - OracleDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ViewSchema view = new ViewSchema();
> @@ -358,13 +364,12 @@
>
> ArrayList collection = new ArrayList();
>
> - OracleCommand command = new OracleCommand ();
> - command.Connection = connection;
> + IDbCommand command = connection.CreateCommand();
> command.CommandText =
> "SELECT * " +
> " FROM " + view.Name +
> " WHERE 1 = 0";
> - OracleDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> for (int i = 0; i < r.FieldCount; i++) {
> ColumnSchema column = new ColumnSchema();
> @@ -392,8 +397,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - OracleCommand command = new OracleCommand ();
> - command.Connection = connection;
> + IDbCommand command = connection.CreateCommand();
> command.CommandText =
> "SELECT k.owner, k.table_name, k.constraint_name, " +
> " k.constraint_type, k.status, k.validated " +
> @@ -401,7 +405,7 @@
> "WHERE k.owner = '" + table.OwnerName + "' " +
> "AND k.table_name = '" + table.Name + "' " +
> "and k.constraint_type = 'P'";
> - OracleDataReader r = command.ExecuteReader ();
> + IDataReader r = command.ExecuteReader ();
>
> while (r.Read ()) {
> ConstraintSchema constraint = null;
> Index: Mono.Data.Sql/Providers/FirebirdDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/FirebirdDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/FirebirdDbProvider.cs (working copy)
> @@ -6,7 +6,7 @@
> // Daniel Morgan <danielmorgan at verizon.net>
> //
> // Copyright (C) 2005 Mosaix Communications, Inc.
> -// Copyright (C) 2005 Daniel Morgan
> +// Copyright (C) 2005, 2006 Daniel Morgan
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -33,8 +33,9 @@
> using System.Data;
> using System.Text;
> using System.Text.RegularExpressions;
> +using System.Reflection;
>
> -using FirebirdSql.Data.Firebird;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> @@ -44,17 +45,31 @@
> [Serializable]
> public class FirebirdDbProvider : DbProviderBase
> {
> - protected FbConnection connection = null;
> - protected FbDataAdapter adapter = new FbDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
> +
> + static MethodInfo schemaMethod = null;
>
> /// <summary>
> /// Default Constructor
> /// </summary>
> public FirebirdDbProvider () : base ()
> {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> +
> + public FirebirdDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> + public FirebirdDbProvider (IDbConnection conn)
> + {
> + connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> + }
> +
> public override string ProviderName {
> get {
> return "Firebird Database";
> @@ -62,20 +77,12 @@
> }
>
> /// <summary>
> - /// Constructor with ADO.NET Npgsql connection.
> - /// </summary>
> - public FirebirdDbProvider (FbConnection conn)
> - {
> - connection = conn;
> - }
> -
> - /// <summary>
> /// ADO.NET Connection
> /// </summary>
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new FbConnection();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -183,8 +190,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - FbCommand command = new FbCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = SQLText;
>
> DataSet resultSet = new DataSet ();
> @@ -210,7 +216,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - DataTable dataTable = connection.GetSchema ("Tables", new string[] {null, null, null, "TABLE"});
> + DataTable dataTable = GetSchema ("Tables", new string[] {null, null, null, "TABLE"});
>
> for (int r = 0; r < dataTable.Rows.Count; r++) {
> DataRow row = dataTable.Rows[r];
> @@ -268,7 +274,7 @@
>
> ArrayList collection = new ArrayList();
>
> - DataTable table2 = connection.GetSchema ("Columns", new string[] {null, null, table.Name, null});
> + DataTable table2 = GetSchema ("Columns", new string[] {null, null, table.Name, null});
> for (int r = 0; r < table2.Rows.Count; r++) {
> DataRow row2 = table2.Rows[r];
>
> @@ -336,7 +342,7 @@
> {
> ArrayList collection = new ArrayList();
>
> - DataTable table2 = connection.GetSchema ("Views", new string[] {null, null, null});
> + DataTable table2 = GetSchema ("Views", new string[] {null, null, null});
> for (int r = 0; r < table2.Rows.Count; r++) {
> DataRow row2 = table2.Rows[r];
> string viewName = row2["VIEW_NAME"].ToString();
> @@ -414,7 +420,7 @@
>
> DataTable table2 = null;
> DataRow row2 = null;
> - table2 = connection.GetSchema ("Procedures", new string[] {null, null, null});
> + table2 = GetSchema ("Procedures", new string[] {null, null, null});
> for (int r = 0; r < table2.Rows.Count; r++) {
> row2 = table2.Rows[r];
> ProcedureSchema procedure = new ProcedureSchema ();
> @@ -428,7 +434,7 @@
> }
> table2 = null;
>
> - table2 = connection.GetSchema ("Functions", new string[] {null, null, null, null});
> + table2 = GetSchema ("Functions", new string[] {null, null, null, null});
> for (int r = 0; r < table2.Rows.Count; r++) {
> row2 = table2.Rows[r];
> ProcedureSchema procedure = new ProcedureSchema ();
> @@ -456,5 +462,37 @@
>
> return (ColumnSchema[]) collection.ToArray (typeof (ColumnSchema));
> }
> +
> + public DataTable GetSchema (string sCollectionName, string[] sRestrictions)
> + {
> + if (schemaMethod == null) {
> + // get the proper GetSchema method on the FbConnection object
> + MethodInfo [] conMethodInfo = Connection.GetType ().GetMethods ();
> +
> + for (int m = 0; m < conMethodInfo.Length; m++) {
> + if (conMethodInfo[m].Name.Equals ("GetSchema")) {
> + ParameterInfo[] parms = conMethodInfo[m].GetParameters ();
> +
> + if (parms.Length == 2) {
> + if (parms[0].ParameterType.ToString ().Equals ("System.String") &&
> + parms[1].ParameterType.ToString ().Equals ("System.String[]")) {
> + schemaMethod = conMethodInfo [m];
> + m = conMethodInfo.Length;
> + }
> + }
> + }
> + }
> + }
> +
> + object parm0 = (object) sCollectionName;
> + object parm1 = (object) sRestrictions;
> +
> + object[] oParms = new object[2];
> + oParms[0] = parm0;
> + oParms[1] = parm1;
> +
> + // invoke GetSchema method
> + return (DataTable) schemaMethod.Invoke (Connection, oParms);
> + }
> }
> }
> Index: Mono.Data.Sql/Providers/SybaseDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/SybaseDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/SybaseDbProvider.cs (working copy)
> @@ -5,7 +5,7 @@
> // Christian Hergert <chris at mosaix.net>
> // Daniel Morgan <danielmorgan at verizon.net>
> //
> -// Copyright (C) 2005 Mosaix Communications, Inc.
> +// Copyright (C) 2005, 2006 Mosaix Communications, Inc.
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -33,7 +33,7 @@
> using System.Text;
> using System.Text.RegularExpressions;
>
> -using Mono.Data.SybaseClient;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> @@ -43,8 +43,8 @@
> [Serializable]
> public class SybaseDbProvider : DbProviderBase
> {
> - protected SybaseConnection connection = null;
> - protected SybaseDataAdapter adapter = new SybaseDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
>
> /// <summary>
> @@ -52,21 +52,28 @@
> /// </summary>
> public SybaseDbProvider () : base ()
> {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> - public override string ProviderName {
> - get {
> - return "Sybase ASE Database";
> - }
> +
> + public SybaseDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> +
> /// <summary>
> /// Constructor with ADO.NET Sql connection.
> /// </summary>
> - public SybaseDbProvider (SybaseConnection conn)
> + public SybaseDbProvider (IDbConnection conn)
> {
> connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> }
> +
> + public override string ProviderName {
> + get {
> + return "Sybase ASE Database";
> + }
> + }
>
> /// <summary>
> /// ADO.NET Connection
> @@ -74,7 +81,7 @@
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new SybaseConnection();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -166,7 +173,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - SybaseCommand command = new SybaseCommand();
> + IDbCommand command = Connection.CreateCommand ();
> command.Connection = connection;
> command.CommandText = SQLText;
>
> @@ -193,8 +200,7 @@
>
> ArrayList collection = new ArrayList ();
>
> - SybaseCommand command = new SybaseCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText =
> "SELECT su.name AS owner, so.name as table_name, so.id as table_id, " +
> " so.crdate as created_date, so.type as table_type " +
> @@ -202,7 +208,7 @@
> "WHERE type IN ('S','U') " +
> "AND su.uid = so.uid " +
> "ORDER BY 1, 2";
> - SybaseDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> TableSchema table = new TableSchema();
> @@ -258,10 +264,10 @@
> throw new InvalidOperationException ("Invalid connection");
>
> ArrayList collection = new ArrayList();
> - SybaseConnection con2 = (SybaseConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SybaseCommand command = con2.CreateCommand ();
> + IDbCommand command = con2.CreateCommand ();
>
> command.CommandText =
> "select su.name as owner, so.name as table_name, sc.name as column_name, " +
> @@ -278,7 +284,7 @@
> "and sc.usertype = st.usertype " +
> "order by sc.colid";
>
> - SybaseDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ColumnSchema column = new ColumnSchema();
> @@ -320,10 +326,10 @@
> private string GetSource (string objectName)
> {
> string sql = String.Format ("EXEC [master].[dbo].[sp_helptext] '{0}', null", objectName);
> - SybaseConnection con2 = (SybaseConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SybaseCommand cmd = con2.CreateCommand ();
> + IDbCommand cmd = con2.CreateCommand ();
> cmd.CommandText = sql;
> IDataReader reader = cmd.ExecuteReader ();
>
> @@ -351,7 +357,7 @@
> {
> ArrayList collection = new ArrayList();
>
> - SybaseCommand command = new SybaseCommand();
> + IDbCommand command = Connection.CreateCommand ();
> command.Connection = connection;
> command.CommandText =
> "SELECT su.name AS owner, so.name as table_name, so.id as table_id, " +
> @@ -360,7 +366,7 @@
> "WHERE type = 'V' " +
> "AND su.uid = so.uid " +
> "ORDER BY 1, 2";
> - SybaseDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> while (r.Read()) {
> ViewSchema view = new ViewSchema();
> @@ -401,15 +407,15 @@
>
> ArrayList collection = new ArrayList();
>
> - SybaseConnection con2 = (SybaseConnection) (((ICloneable) connection).Clone ());
> + IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> if (con2.State == ConnectionState.Closed)
> con2.Open();
> - SybaseCommand command = con2.CreateCommand ();
> + IDbCommand command = con2.CreateCommand ();
> command.CommandText =
> "SELECT * " +
> " FROM " + view.Name +
> " WHERE 1 = 0";
> - SybaseDataReader r = command.ExecuteReader();
> + IDataReader r = command.ExecuteReader();
>
> for (int i = 0; i < r.FieldCount; i++) {
> ColumnSchema column = new ColumnSchema();
> @@ -442,9 +448,9 @@
>
> // ArrayList collection = new ArrayList ();
> //
> -// SybaseConnection con2 = (SybaseConnection) (((ICloneable) connection).Clone ());
> +// IDbConnection con2 = (IDbConnection) (((ICloneable) connection).Clone ());
> // con2.Open();
> -// SybaseCommand command = con2.CreateCommand ();
> +// IDbCommand command = con2.CreateCommand ();
>
> // TODO: get constraints
> return new ConstraintSchema[0];
> @@ -461,3 +467,4 @@
> }
> }
> }
> +
> Index: Mono.Data.Sql/Providers/OdbcDbProvider.cs
> ===================================================================
> --- Mono.Data.Sql/Providers/OdbcDbProvider.cs (revision 57083)
> +++ Mono.Data.Sql/Providers/OdbcDbProvider.cs (working copy)
> @@ -6,7 +6,7 @@
> // Daniel Morgan <danielmorgan at verizon.net>
> //
> // Copyright (C) 2005 Mosaix Communications, Inc.
> -// Copyright (C) 2005 Daniel Morgan
> +// Copyright (C) 2005, 2006 Daniel Morgan
> //
> // Permission is hereby granted, free of charge, to any person obtaining
> // a copy of this software and associated documentation files (the
> @@ -34,7 +34,7 @@
> using System.Text;
> using System.Text.RegularExpressions;
>
> -using System.Data.Odbc;
> +using Mono.Data;
>
> namespace Mono.Data.Sql
> {
> @@ -44,8 +44,8 @@
> [Serializable]
> public class OdbcDbProvider : DbProviderBase
> {
> - protected OdbcConnection connection = null;
> - protected OdbcDataAdapter adapter = new OdbcDataAdapter();
> + protected IDbConnection connection = null;
> + protected IDbDataAdapter adapter;
> protected bool isConnectionStringWrong = false;
>
> /// <summary>
> @@ -53,21 +53,28 @@
> /// </summary>
> public OdbcDbProvider () : base ()
> {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> - public override string ProviderName {
> - get {
> - return "Provider for ODBC Data Sources";
> - }
> +
> + public OdbcDbProvider (Mono.Data.Provider provider) : base (provider)
> + {
> + adapter = Provider.CreateDataAdapter ();
> }
> -
> +
> /// <summary>
> /// Constructor with ADO.NET ODBC connection.
> /// </summary>
> - public OdbcDbProvider (OdbcConnection conn)
> + public OdbcDbProvider (IDbConnection conn)
> {
> connection = conn;
> + adapter = Provider.CreateDataAdapter ();
> }
> +
> + public override string ProviderName {
> + get {
> + return "Provider for ODBC Data Sources";
> + }
> + }
>
> /// <summary>
> /// ADO.NET Connection
> @@ -75,7 +82,7 @@
> public override IDbConnection Connection {
> get {
> if (connection == null)
> - connection = new OdbcConnection();
> + connection = Provider.CreateConnection ();
>
> return (IDbConnection) connection;
> }
> @@ -143,38 +150,7 @@
> /// </summary>
> public override bool SupportsSchemaType(Type type)
> {
> - if (type == typeof(TableSchema))
> - return true;
> - else if (type == typeof(ViewSchema))
> - return true;
> - else if (type == typeof(ProcedureSchema))
> - return true;
> - else if (type == typeof(AggregateSchema))
> - return true;
> - else if (type == typeof(GroupSchema))
> - return true;
> - else if (type == typeof(UserSchema))
> - return true;
> - else if (type == typeof(LanguageSchema))
> - return true;
> - else if (type == typeof(OperatorSchema))
> - return true;
> - else if (type == typeof(RoleSchema))
> - return true;
> - else if (type == typeof(SequenceSchema))
> - return true;
> - else if (type == typeof(DataTypeSchema))
> - return true;
> - else if (type == typeof(TriggerSchema))
> - return true;
> - else if (type == typeof(ColumnSchema))
> - return true;
> - else if (type == typeof(ConstraintSchema))
> - return true;
> - else if (type == typeof(RuleSchema))
> - return true;
> - else
> - return false;
> + return false;
> }
>
> /// <summary>
> @@ -183,8 +159,7 @@
> public override DataTable ExecuteSQL(string SQLText)
> {
> try {
> - OdbcCommand command = new OdbcCommand();
> - command.Connection = connection;
> + IDbCommand command = Connection.CreateCommand ();
> command.CommandText = SQLText;
>
> DataSet resultSet = new DataSet ();
> Index: Mono.Data.Sql/Makefile.Win32
> ===================================================================
> --- Mono.Data.Sql/Makefile.Win32 (revision 57190)
> +++ Mono.Data.Sql/Makefile.Win32 (working copy)
> @@ -31,7 +31,6 @@
> Schema/AggregateSchema.cs \
> Schema/TableSchema.cs \
> Schema/ProcedureSchema.cs \
> -Providers/MySqlDbProvider.cs \
> Providers/DbProviderBase.cs \
> Providers/NpgsqlDbProvider.cs \
> Providers/SqliteDbProvider.cs \
> @@ -43,21 +42,23 @@
> Providers/MetaDataProviderFactory.cs \
> AssemblyInfo.cs
>
> -# Providers/FirebirdDbProvider.cs
> -
> +#Providers/MySqlDbProvider.cs \
> +#Providers/FirebirdDbProvider.cs \
> +
> #build_sources = $(addprefix $(srcdir)/, $(FILES))
> build_sources=$(FILES)
>
> REFS = \
> -r:System.Data \
> --r:Mono.Data \
> --r:Npgsql \
> --r:ByteFX.Data \
> --r:Mono.Data.SqliteClient \
> --r:Mono.Data.SybaseClient \
> --r:System.Data.OracleClient
> +-r:Mono.Data
>
> -# -r:FirebirdSql.Data.Firebird.dll
> +#-r:Npgsql
> +#-r:ByteFX.Data
> +#-r:Mono.Data.SqliteClient
> +#-r:Mono.Data.SybaseClient
> +#-r:System.Data.OracleClient
> +#-r:FirebirdSql.Data.Firebird.dll
> +
> # -r:$(top_srcdir)/contrib/FirebirdSql.Data.Firebird.dll
>
> ADDIN_BUILD = $(top_builddir)/build/AddIns/MonoQuery
>
>
>
--
Christian Hergert
Medsphere Systems Corporation
Software Programmer
C: 253 906 2115
More information about the Monodevelop-list
mailing list