2 // Mainsoft.Data.Jdbc.Providers.OleDbOracleProvider
5 // Konstantin Triger <kostat@mainsoft.com>
6 // Boris Kirzner <borisk@mainsoft.com>
8 // (C) 2006 Mainsoft Corporation (http://www.mainsoft.com)
12 // Permission is hereby granted, free of charge, to any person obtaining
13 // a copy of this software and associated documentation files (the
14 // "Software"), to deal in the Software without restriction, including
15 // without limitation the rights to use, copy, modify, merge, publish,
16 // distribute, sublicense, and/or sell copies of the Software, and to
17 // permit persons to whom the Software is furnished to do so, subject to
18 // the following conditions:
20 // The above copyright notice and this permission notice shall be
21 // included in all copies or substantial portions of the Software.
23 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
27 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
28 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
29 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
33 using System.Collections;
34 using Mainsoft.Data.Configuration;
35 using System.Reflection;
37 namespace Mainsoft.Data.Jdbc.Providers
39 public class OleDbOracleProvider : GenericProvider
43 private const string Port = "Port";
44 private const string ROWID = "ROWID";
45 private const string DBTYPE_CHAR = "DBTYPE_CHAR";
49 #region oracle.sql.Types constants
51 private enum JavaSqlTypes {
83 //ORACLE types, see oracle.jdbc.OracleTypes
103 public OleDbOracleProvider (IDictionary providerInfo) : base (providerInfo)
107 #endregion // Constructors
111 #endregion // Properties
115 public override IConnectionStringDictionary GetConnectionStringBuilder (string connectionString)
117 IConnectionStringDictionary conectionStringBuilder = base.GetConnectionStringBuilder (connectionString);
119 string port = (string) conectionStringBuilder [Port];
120 if (port == null || port.Length == 0) {
121 port = (string) ProviderInfo [Port];
122 conectionStringBuilder.Add (Port, port);
125 return conectionStringBuilder;
128 public override java.sql.Connection GetConnection(IConnectionStringDictionary conectionStringBuilder) {
129 return new OracleConnection(base.GetConnection (conectionStringBuilder));
135 #region OracleConnection
137 sealed class OracleConnection : Connection {
139 public OracleConnection(java.sql.Connection connection)
140 : base(connection) {}
142 public override java.sql.Statement createStatement() {
143 return new OracleStatement (base.createStatement());
146 public override java.sql.Statement createStatement(int arg_0, int arg_1) {
147 return new OracleStatement (base.createStatement(arg_0, arg_1));
150 public override java.sql.Statement createStatement(int arg_0, int arg_1, int arg_2) {
151 return new OracleStatement (base.createStatement(arg_0, arg_1, arg_2));
154 public override java.sql.CallableStatement prepareCall(string arg_0) {
155 return new OracleCallableStatement(base.prepareCall (arg_0));
158 public override java.sql.CallableStatement prepareCall(string arg_0, int arg_1, int arg_2) {
159 return new OracleCallableStatement(base.prepareCall (arg_0, arg_1, arg_2));
162 public override java.sql.CallableStatement prepareCall(string arg_0, int arg_1, int arg_2, int arg_3) {
163 return new OracleCallableStatement(base.prepareCall (arg_0, arg_1, arg_2, arg_3));
166 public override java.sql.PreparedStatement prepareStatement(string arg_0) {
167 return new OraclePreparedStatement(base.prepareStatement (arg_0));
170 public override java.sql.PreparedStatement prepareStatement(string arg_0, int arg_1) {
171 return new OraclePreparedStatement(base.prepareStatement (arg_0, arg_1));
174 public override java.sql.PreparedStatement prepareStatement(string arg_0, int arg_1, int arg_2) {
175 return new OraclePreparedStatement(base.prepareStatement (arg_0, arg_1, arg_2));
178 public override java.sql.PreparedStatement prepareStatement(string arg_0, int arg_1, int arg_2, int arg_3) {
179 return new OraclePreparedStatement(base.prepareStatement (arg_0, arg_1, arg_2, arg_3));
182 public override java.sql.PreparedStatement prepareStatement(string arg_0, int[] arg_1) {
183 return new OraclePreparedStatement(base.prepareStatement (arg_0, arg_1));
186 public override java.sql.PreparedStatement prepareStatement(string arg_0, string[] arg_1) {
187 return new OraclePreparedStatement(base.prepareStatement (arg_0, arg_1));
193 sealed class OracleStatement : Statement {
195 public OracleStatement (java.sql.Statement statement)
199 public override java.sql.ResultSet executeQuery(string arg_0) {
200 return new OracleResultSet (base.executeQuery(arg_0));
203 public override java.sql.ResultSet getResultSet() {
204 return new OracleResultSet (base.getResultSet());
208 sealed class OraclePreparedStatement : PreparedStatement, IPreparedStatement {
209 readonly MethodInfo _info;
211 public OraclePreparedStatement(java.sql.PreparedStatement statement)
213 _info = Wrapped.GetType().GetMethod("setFixedCHAR");
216 public override java.sql.ResultSet executeQuery(string arg_0) {
217 return new OracleResultSet (base.executeQuery(arg_0));
220 #region IPreparedStatement Members
222 public void setBit(int parameterIndex, int value) {
223 base.setInt(parameterIndex, value);
226 public void setChar(int parameterIndex, string value) {
228 base.setString(parameterIndex, value);
232 _info.Invoke(Wrapped, new object[] {
233 new java.lang.Integer(parameterIndex),
237 public void setNumeric(int parameterIndex, java.math.BigDecimal value) {
238 base.setBigDecimal(parameterIndex, value);
241 public void setReal(int parameterIndex, double value) {
242 base.setDouble(parameterIndex, value);
248 sealed class OracleCallableStatement : CallableStatement, IPreparedStatement {
249 readonly MethodInfo _info;
251 public OracleCallableStatement(java.sql.CallableStatement statement)
253 _info = Wrapped.GetType().GetMethod("setFixedCHAR");
256 public override java.sql.ResultSet executeQuery(string arg_0) {
257 return new OracleResultSet (base.executeQuery(arg_0));
260 #region IPreparedStatement Members
262 public void setBit(int parameterIndex, int value) {
263 base.setInt(parameterIndex, value);
266 public void setChar(int parameterIndex, string value) {
268 base.setString(parameterIndex, value);
272 _info.Invoke(Wrapped, new object[] {
273 new java.lang.Integer(parameterIndex),
277 public void setNumeric(int parameterIndex, java.math.BigDecimal value) {
278 base.setBigDecimal(parameterIndex, value);
281 public void setReal(int parameterIndex, double value) {
282 base.setDouble(parameterIndex, value);
289 sealed class OracleResultSet : ResultSet {
290 public OracleResultSet (java.sql.ResultSet resultSet) : base (resultSet) {
293 public override java.sql.ResultSetMetaData getMetaData() {
294 return new OracleResultSetMetaData (base.getMetaData ());
298 sealed class OracleResultSetMetaData: ResultSetMetaData {
299 public OracleResultSetMetaData (java.sql.ResultSetMetaData resultSetMetaData)
300 : base (resultSetMetaData) {
303 public override int getColumnType(int arg_0) {
304 int jdbcType = base.getColumnType (arg_0);
305 if ((JavaSqlTypes)jdbcType == JavaSqlTypes.ROWID)
306 return (int)JavaSqlTypes.VARCHAR;
311 public override string getColumnTypeName(int arg_0) {
312 string columnTypeName = base.getColumnTypeName (arg_0);
313 if (ROWID == columnTypeName)
316 return columnTypeName;