\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
\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
\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
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
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