follow JDBC provider generic adapter mechanism
authorKonstantin Triger <kostat@mono-cvs.ximian.com>
Sun, 19 Feb 2006 18:05:18 +0000 (18:05 -0000)
committerKonstantin Triger <kostat@mono-cvs.ximian.com>
Sun, 19 Feb 2006 18:05:18 +0000 (18:05 -0000)
svn path=/trunk/mcs/; revision=57051

mcs/class/System.Data.OracleClient/System.Data.OracleClient.jvm/ChangeLog [new file with mode: 0644]
mcs/class/System.Data.OracleClient/System.Data.OracleClient.jvm/OracleConnection.cs

diff --git a/mcs/class/System.Data.OracleClient/System.Data.OracleClient.jvm/ChangeLog b/mcs/class/System.Data.OracleClient/System.Data.OracleClient.jvm/ChangeLog
new file mode 100644 (file)
index 0000000..8f8015e
--- /dev/null
@@ -0,0 +1,3 @@
+2006-02-19  Konstantin Triger <kostat@mainsoft.com>
+
+       * OracleConnection.cs: follow JDBC provider generic adapter mechanism.
\ No newline at end of file
index e422f44c9e100ee68d2eb68899e6197a5d1817df..e0daa9c21669b48d28f32fd6b070956a3f307263 100644 (file)
@@ -38,20 +38,15 @@ using System.Collections;
 \r
 using java.sql;\r
 \r
+using System.Configuration;\r
+using Mainsoft.Data.Configuration;\r
+using Mainsoft.Data.Jdbc.Providers;\r
+\r
 namespace System.Data.OracleClient {\r
        public sealed class OracleConnection : AbstractDBConnection, System.ICloneable {\r
                #region Fields \r
 \r
-               static readonly Hashtable _skippedUserParameters = new Hashtable(new CaseInsensitiveHashCodeProvider(),new CaseInsensitiveComparer());\r
-\r
-               private static readonly object _lockObjectStringManager = new object();\r
-               //private static DbStringManager _stringManager = new DbStringManager("System.Data.System.Data.ProviderBase.jvm.OracleStrings");\r
-\r
-               private static readonly string[] _resourceIgnoredKeys = new string[] {"CON_PROVIDER","CON_DATA_SOURCE","CON_DATABASE",\r
-                                                                                                                                                                "CON_PASSWORD","CON_USER_ID","CON_TIMEOUT",\r
-                                                                                                                                                                "CON_SERVER_NAME","CON_PORT","CON_SERVICE_NAME",\r
-                                                                                                                                                                "CON_JNDI_NAME","CON_JNDI_PROVIDER","CON_JNDI_FACTORY",\r
-                                                                                                                                                                "JDBC_DRIVER","JDBC_URL","DB2_CON_LOCATION" };\r
+               static readonly IConnectionProvider _connectionProvider;\r
 \r
                #endregion //Fields\r
 \r
@@ -64,6 +59,17 @@ namespace System.Data.OracleClient {
                \r
                #region Constructors\r
 \r
+               static OracleConnection() {\r
+                       IDictionary providerInfo = (IDictionary)((IList) ConfigurationSettings.GetConfig("Mainsoft.Data.Configuration/OracleClientProvider"))[0];\r
+                       string providerType = (string) providerInfo ["type"];\r
+                       if (providerType == null || providerType.Length == 0)\r
+                               _connectionProvider = new GenericProvider (providerInfo); \r
+                       else {\r
+                               Type t = Type.GetType (providerType);\r
+                               _connectionProvider = (IConnectionProvider) Activator.CreateInstance (t , new object[] {providerInfo});\r
+                       }\r
+               }\r
+\r
                public OracleConnection() : this(null) {\r
                }\r
 \r
@@ -72,129 +78,12 @@ namespace System.Data.OracleClient {
 \r
                #endregion // Constructors\r
 \r
-               #region Properties\r
-\r
-               protected override string[] ResourceIgnoredKeys {\r
-                       get { return _resourceIgnoredKeys; }\r
-               }\r
-\r
-               public String Provider {\r
-                       get { return ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("CON_PROVIDER")); }\r
-               }\r
-\r
-               protected override Hashtable SkippedUserParameters {\r
-                       get { return _skippedUserParameters; }\r
-               }\r
-\r
-               protected override string ServerName {\r
-                       get { \r
-                               if (ProviderType == PROVIDER_TYPE.IBMDADB2 || ProviderType == PROVIDER_TYPE.MSDAORA) {\r
-                                       string host = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("CON_SERVER_NAME"));\r
-\r
-                                       if (!String.Empty.Equals(host)) {\r
-                                               return host;\r
-                                       }\r
-\r
-                                       if (ProviderType == PROVIDER_TYPE.IBMDADB2) {\r
-                                               string location = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("DB2_CON_LOCATION"));\r
-\r
-                                               if (!String.Empty.Equals(location)) {\r
-                                                       int semicolumnIndex = location.IndexOf(':');\r
-                                                       if (semicolumnIndex != -1) {\r
-                                                               return location.Substring(0,semicolumnIndex);\r
-                                                       }\r
-                                                       else {\r
-                                                               return location;\r
-                                                       }\r
-                                               }\r
-                                       }\r
-\r
-                               }\r
-                               return base.ServerName; \r
-                       }\r
-               }\r
-\r
-               protected override string CatalogName {\r
-                       get { \r
-                               switch (ProviderType) {\r
-                                       case PROVIDER_TYPE.IBMDADB2:\r
-                                       case PROVIDER_TYPE.MSDAORA:\r
-                                               return DataSource;\r
-                               }\r
-                               return base.CatalogName;\r
-                       }\r
-               }\r
-\r
-               protected override string Port {\r
-                       get {\r
-                               string port = ConnectionStringHelper.FindValue(UserParameters, StringManager.GetStringArray("CON_PORT"));\r
-                               switch (ProviderType) {\r
-                                       case PROVIDER_TYPE.MSDAORA :\r
-                                               if (String.Empty.Equals(port)) {\r
-                                                       return StringManager.GetString("ORA_CON_PORT");\r
-                                               }\r
-                                               return port;\r
-                                       case PROVIDER_TYPE.IBMDADB2 :\r
-                                               if (String.Empty.Equals(port)) {\r
-                                                       string location = ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("DB2_CON_LOCATION"));\r
-\r
-                                                       if (!String.Empty.Equals(location)) {\r
-                                                               int semicolumnIndex = location.IndexOf(':');\r
-                                                               if (semicolumnIndex != -1) {\r
-                                                                       return location.Substring(semicolumnIndex + 1);\r
-                                                               }\r
-                                                       }\r
-                                                       return StringManager.GetString("DB2_CON_PORT");\r
-                                               }\r
-                                               return port;\r
-                               }\r
-                               return base.Port;\r
-                       }\r
-               }\r
-\r
-               protected override string JdbcDriverName {\r
-                       get {\r
-                               JDBC_MODE jdbcMode = JdbcMode;\r
-                               switch (jdbcMode) {\r
-                                       case JDBC_MODE.DATA_SOURCE_MODE :\r
-                                               return base.JdbcDriverName;\r
-                                       case JDBC_MODE.JDBC_DRIVER_MODE :\r
-                                               return ConnectionStringHelper.FindValue(UserParameters,StringManager.GetStringArray("JDBC_DRIVER"));\r
-                                       case JDBC_MODE.PROVIDER_MODE:\r
-                                       switch (ProviderType) {\r
-                                               case PROVIDER_TYPE.SQLOLEDB :\r
-                                                       return StringManager.GetString("SQL_JDBC_DRIVER");\r
-                                               case PROVIDER_TYPE.MSDAORA :\r
-                                                       return StringManager.GetString("ORA_JDBC_DRIVER");\r
-                                               case PROVIDER_TYPE.IBMDADB2 :\r
-                                                       return StringManager.GetString("DB2_JDBC_DRIVER");\r
-                                       }\r
-                                               break;\r
-                               };\r
-                               return base.JdbcDriverName;\r
-                       }\r
-               }\r
+               #region Methods\r
 \r
-               protected override DbStringManager StringManager {\r
-                       get {\r
-                               object stringManager = AppDomain.CurrentDomain.GetData("System.Data.OracleConnection.stringManager");\r
-                               if (stringManager == null) {\r
-                                       lock(_lockObjectStringManager) {\r
-                                               stringManager = AppDomain.CurrentDomain.GetData("System.Data.OracleConnection.stringManager");\r
-                                               if (stringManager != null)\r
-                                                       return (DbStringManager)stringManager;\r
-                                               stringManager = new DbStringManager("System.Data.System.Data.ProviderBase.jvm.OracleStrings");\r
-                                               AppDomain.CurrentDomain.SetData("System.Data.OracleConnection.stringManager", stringManager);\r
-                                       }\r
-                               }\r
-                               return (DbStringManager)stringManager;\r
-                       }\r
+               protected override IConnectionProvider GetConnectionProvider() {\r
+                       return _connectionProvider;\r
                }\r
 \r
-               #endregion // Properties\r
-\r
-               #region Methods\r
-\r
                public new OracleTransaction BeginTransaction(IsolationLevel level) {\r
                        return new OracleTransaction(level, this);\r
                }\r
@@ -215,17 +104,6 @@ namespace System.Data.OracleClient {
                        return CreateCommand();\r
                }\r
 \r
-\r
-               protected override void CopyTo(AbstractDBConnection target) {\r
-                       base.CopyTo(target);\r
-               }\r
-\r
-               public object Clone() {\r
-                       OracleConnection clone = new OracleConnection();\r
-                       CopyTo(clone);\r
-                       return clone;\r
-               }\r
-\r
                protected sealed override SystemException CreateException(SQLException e) {\r
                        return new OracleException(e,this);             \r
                }\r
@@ -234,86 +112,11 @@ namespace System.Data.OracleClient {
                        return new OracleException(message, null, this);        \r
                }\r
 \r
-               public DataTable GetOracleSchemaTable (Guid schema, object[] restrictions) {\r
-                       DataTable schemaTable = new DataTable("Tables");\r
-                       schemaTable.Columns.Add("TABLE_CATALOG");\r
-                       schemaTable.Columns.Add("TABLE_SCHEMA");\r
-                       schemaTable.Columns.Add("TABLE_NAME");\r
-                       schemaTable.Columns.Add("TABLE_TYPE");\r
-                       schemaTable.Columns.Add("TABLE_GUID");\r
-                       schemaTable.Columns.Add("DESCRIPTION");\r
-                       schemaTable.Columns.Add("TABLE_PROPID");\r
-                       schemaTable.Columns.Add("DATE_CREATED");\r
-                       schemaTable.Columns.Add("DATE_MODIFIED");\r
-            \r
-            \r
-                       Connection con = JdbcConnection;\r
-                       String catalog = con.getCatalog();\r
-            \r
-                       DatabaseMetaData meta = con.getMetaData();\r
-                       ResultSet schemaRes = meta.getSchemas();\r
-                       System.Collections.ArrayList schemas = new System.Collections.ArrayList();\r
-                       while(schemaRes.next()) {\r
-                               schemas.Add(schemaRes.getString(1));\r
-                       }\r
-                       schemaRes.close();\r
-\r
-                       for(int i = 0; i < schemas.Count; i++) {\r
-                               ResultSet tableRes = meta.getTables(catalog, schemas[i].ToString(), null, null);\r
-                               while(tableRes.next()) {\r
-                                       DataRow row = schemaTable.NewRow();\r
-                                       row["TABLE_CATALOG"] = catalog;\r
-                                       row["TABLE_SCHEMA"] = schemas[i];\r
-                                       row["TABLE_NAME"] = tableRes.getString("TABLE_NAME");\r
-                                       row["TABLE_TYPE"] = tableRes.getString("TABLE_TYPE");\r
-                                       row["DESCRIPTION"] = tableRes.getString("REMARKS");\r
-                    \r
-                                       schemaTable.Rows.Add(row);\r
-                               }\r
-                               tableRes.close();\r
-                       }\r
-                       return schemaTable;\r
-               }\r
-\r
-               protected override void ValidateConnectionString(string connectionString) {\r
-                       base.ValidateConnectionString(connectionString);\r
-               }\r
-\r
-               protected override string BuildJdbcUrl() {\r
-                       return base.BuildJdbcUrl();\r
-               }\r
-\r
-               public static void ReleaseObjectPool() {\r
-                       // since we're using connection pool from app servet, this is by design\r
-                       //throw new NotImplementedException();\r
-               }\r
-\r
                protected sealed override void OnSqlWarning(SQLWarning warning) {\r
                        OracleErrorCollection col = new OracleErrorCollection(warning, this);\r
                        OnOracleInfoMessage(new OracleInfoMessageEventArgs(col));\r
                }\r
 \r
-//             protected sealed override Connection GetConnectionFromProvider() {\r
-//                     if ((ProviderType == PROVIDER_TYPE.MSDAORA) && \r
-//                             ("true").Equals(StringManager.GetString("ORA_CONNECTION_POOLING_ENABLED","false"))) {\r
-//                             ActivateJdbcDriver(JdbcDriverName);\r
-//                             return OracleConnectionFactory.GetConnection(ProviderType,JdbcUrl,User,Password,ConnectionTimeout);\r
-//                     }\r
-//                     else {\r
-//                             return base.GetConnectionFromProvider();\r
-//                     }\r
-                       //TBD\r
-//             }\r
-\r
-               private String BuildDb2Url() {\r
-                       return StringManager.GetString("DB2_JDBC_URL") //jdbc:db2://\r
-                               + ServerName + ":" + Port + "/" + CatalogName;\r
-               }\r
-\r
-               private String BuildOracleUrl() {\r
-                       return StringManager.GetString("ORA_JDBC_URL") //"jdbc:oracle:thin:@"\r
-                               + ServerName + ":" + Port + ":" + CatalogName;\r
-               }\r
         \r
                protected sealed override void OnStateChanged(ConnectionState orig, ConnectionState current) {\r
                        if(StateChange != null) {\r