1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Data ;
3
4
using System . Data . Common ;
5
+ using NHibernate . Dialect ;
4
6
using NHibernate . Driver ;
5
7
using NHibernate . SqlCommand ;
6
8
using NHibernate . SqlTypes ;
9
+ using NHibernate . Util ;
7
10
using NUnit . Framework ;
11
+ using Environment = NHibernate . Cfg . Environment ;
8
12
9
13
namespace NHibernate . Test . DriverTest
10
14
{
@@ -17,21 +21,134 @@ public class OracleDataClientDriverFixture
17
21
/// </summary>
18
22
[ Test ]
19
23
[ Category ( "ODP.NET" ) ]
20
- [ Explicit ]
21
- public void NoBooleanParameters ( )
24
+ [ Theory ]
25
+ public void NoBooleanParameters ( bool managed )
22
26
{
23
- OracleDataClientDriver driver = new OracleDataClientDriver ( ) ;
27
+ var driver = GetDriver ( managed , TestConfigurationHelper . GetDefaultConfiguration ( ) . Properties ) ;
28
+ var param = GetParameterForType ( driver , SqlTypeFactory . Boolean ) ;
24
29
25
- SqlStringBuilder builder = new SqlStringBuilder ( ) ;
30
+ Assert . That ( param . DbType , Is . Not . EqualTo ( DbType . Boolean ) , "should not still be a DbType.Boolean" ) ;
31
+ }
32
+
33
+ [ Test ]
34
+ [ Category ( "ODP.NET" ) ]
35
+ [ Theory ]
36
+ public void UnicodeParameters ( bool managed )
37
+ {
38
+ var cfg = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
39
+ var driver = GetDriver ( managed , cfg . Properties ) ;
40
+ var useNPrefixedTypesForUnicode = PropertiesHelper . GetBoolean ( Environment . OracleUseNPrefixedTypesForUnicode , cfg . Properties , false ) ;
41
+
42
+ Assert . That ( driver . UseNPrefixedTypesForUnicode , Is . EqualTo ( useNPrefixedTypesForUnicode ) ,
43
+ $ "Unexpected value for { nameof ( OracleDataClientDriverBase ) } .{ nameof ( OracleDataClientDriverBase . UseNPrefixedTypesForUnicode ) } ") ;
44
+
45
+ var param = GetParameterForType ( driver , SqlTypeFactory . GetString ( 200 ) ) ;
46
+ var oracleParamType = GetOracleParameterType ( param ) ;
47
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( useNPrefixedTypesForUnicode ? "NVarchar2" : "Varchar2" ) . IgnoreCase ,
48
+ "Unexpected Unicode string parameter type" ) ;
49
+
50
+ param = GetParameterForType ( driver , new StringFixedLengthSqlType ( 10 ) ) ;
51
+ oracleParamType = GetOracleParameterType ( param ) ;
52
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( useNPrefixedTypesForUnicode ? "NChar" : "Char" ) . IgnoreCase ,
53
+ "Unexpected Unicode string fixed length parameter type" ) ;
54
+ }
55
+
56
+ [ Test ]
57
+ [ Category ( "ODP.NET" ) ]
58
+ [ Theory ]
59
+ public void UnicodeParametersNoPrefix ( bool managed )
60
+ {
61
+ var cfg = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
62
+ cfg . SetProperty ( Environment . OracleUseNPrefixedTypesForUnicode , "false" ) ;
63
+ var driver = GetDriver ( managed , cfg . Properties ) ;
64
+
65
+ Assert . That ( driver . UseNPrefixedTypesForUnicode , Is . False ,
66
+ $ "Unexpected value for { nameof ( OracleDataClientDriverBase ) } .{ nameof ( OracleDataClientDriverBase . UseNPrefixedTypesForUnicode ) } ") ;
67
+
68
+ var param = GetParameterForType ( driver , SqlTypeFactory . GetString ( 200 ) ) ;
69
+ var oracleParamType = GetOracleParameterType ( param ) ;
70
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( "Varchar2" ) . IgnoreCase , "Unexpected Unicode string parameter type" ) ;
71
+
72
+ param = GetParameterForType ( driver , new StringFixedLengthSqlType ( 10 ) ) ;
73
+ oracleParamType = GetOracleParameterType ( param ) ;
74
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( "Char" ) . IgnoreCase , "Unexpected Unicode string fixed length parameter type" ) ;
75
+ }
76
+
77
+ [ Test ]
78
+ [ Category ( "ODP.NET" ) ]
79
+ [ Theory ]
80
+ public void UnicodeParametersWithPrefix ( bool managed )
81
+ {
82
+ var cfg = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
83
+ cfg . SetProperty ( Environment . OracleUseNPrefixedTypesForUnicode , "true" ) ;
84
+ var driver = GetDriver ( managed , cfg . Properties ) ;
85
+
86
+ Assert . That ( driver . UseNPrefixedTypesForUnicode , Is . True ,
87
+ $ "Unexpected value for { nameof ( OracleDataClientDriverBase ) } .{ nameof ( OracleDataClientDriverBase . UseNPrefixedTypesForUnicode ) } ") ;
88
+
89
+ var param = GetParameterForType ( driver , SqlTypeFactory . GetString ( 200 ) ) ;
90
+ var oracleParamType = GetOracleParameterType ( param ) ;
91
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( "NVarchar2" ) . IgnoreCase , "Unexpected Unicode string parameter type" ) ;
92
+
93
+ param = GetParameterForType ( driver , new StringFixedLengthSqlType ( 10 ) ) ;
94
+ oracleParamType = GetOracleParameterType ( param ) ;
95
+ Assert . That ( oracleParamType . ToString ( ) , Is . EqualTo ( "NChar" ) . IgnoreCase , "Unexpected Unicode string fixed length parameter type" ) ;
96
+ }
97
+
98
+ [ Test ]
99
+ [ Category ( "ODP.NET" ) ]
100
+ [ Theory ]
101
+ public void HasSameUnicodeDefaultThanDialect ( bool managed )
102
+ {
103
+ var cfg = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
104
+ cfg . Properties . Remove ( Environment . OracleUseNPrefixedTypesForUnicode ) ;
105
+ var driver = GetDriver ( managed , cfg . Properties ) ;
106
+ var dialect = new Oracle8iDialect ( ) ;
107
+ dialect . Configure ( cfg . Properties ) ;
108
+
109
+ Assert . That ( driver . UseNPrefixedTypesForUnicode , Is . EqualTo ( dialect . UseNPrefixedTypesForUnicode ) ,
110
+ $ "Default { nameof ( Oracle8iDialect . UseNPrefixedTypesForUnicode ) } values mismatch between driver and dialect") ;
111
+ }
112
+
113
+
114
+ private static OracleDataClientDriverBase GetDriver ( bool managed , IDictionary < string , string > settings )
115
+ {
116
+ OracleDataClientDriverBase driver = null ;
117
+ try
118
+ {
119
+ driver = managed
120
+ ? ( OracleDataClientDriverBase ) new OracleManagedDataClientDriver ( )
121
+ : new OracleDataClientDriver ( ) ;
122
+ }
123
+ catch ( Exception ex )
124
+ {
125
+ Assert . Ignore ( "Unable to load the driver: {0}" , ex ) ;
126
+ }
127
+
128
+ driver . Configure ( settings ) ;
129
+
130
+ return driver ;
131
+ }
132
+
133
+ private static DbParameter GetParameterForType ( IDriver driver , SqlType paramType )
134
+ {
135
+ var builder = new SqlStringBuilder ( ) ;
26
136
builder . Add ( "select * from table1 where col1=" ) ;
27
137
builder . Add ( Parameter . Placeholder ) ;
28
138
29
- var cmd = driver . GenerateCommand ( CommandType . Text , builder . ToSqlString ( ) , new SqlType [ ] { SqlTypeFactory . Boolean } ) ;
139
+ var cmd = driver . GenerateCommand ( CommandType . Text , builder . ToSqlString ( ) , new [ ] { paramType } ) ;
30
140
141
+ Assert . That ( cmd . Parameters , Has . Count . EqualTo ( 1 ) , "Unexpected parameters count" ) ;
31
142
var param = cmd . Parameters [ 0 ] ;
143
+ return param ;
144
+ }
32
145
33
- Assert . AreEqual ( "col1" , param . ParameterName , "kept same param name" ) ;
34
- Assert . IsFalse ( param . DbType == DbType . Boolean , "should not still be a DbType.Boolean" ) ;
146
+ private static object GetOracleParameterType ( DbParameter dbParameter )
147
+ {
148
+ var parameterType = dbParameter . GetType ( ) ;
149
+ var typeProperty = parameterType . GetProperty ( "OracleDbType" ) ??
150
+ throw new InvalidOperationException ( "Unable to find OracleDbType property" ) ;
151
+ return typeProperty . GetValue ( dbParameter ) ;
35
152
}
36
153
}
37
154
}
0 commit comments