@@ -30,6 +30,8 @@ public abstract class OracleDataClientDriverBase : ReflectionBasedDriver, IEmbed
30
30
private readonly object _oracleDbTypeBlob ;
31
31
private readonly object _oracleDbTypeNVarchar2 ;
32
32
private readonly object _oracleDbTypeNChar ;
33
+ private readonly object _oracleDbTypeBinaryDouble ;
34
+ private readonly object _oracleDbTypeBinaryFloat ;
33
35
34
36
/// <summary>
35
37
/// Default constructor.
@@ -58,6 +60,8 @@ private OracleDataClientDriverBase(string driverAssemblyName, string clientNames
58
60
_oracleDbTypeBlob = Enum . Parse ( oracleDbTypeEnum , "Blob" ) ;
59
61
_oracleDbTypeNVarchar2 = Enum . Parse ( oracleDbTypeEnum , "NVarchar2" ) ;
60
62
_oracleDbTypeNChar = Enum . Parse ( oracleDbTypeEnum , "NChar" ) ;
63
+ _oracleDbTypeBinaryDouble = Enum . Parse ( oracleDbTypeEnum , "BinaryDouble" ) ;
64
+ _oracleDbTypeBinaryFloat = Enum . Parse ( oracleDbTypeEnum , "BinaryFloat" ) ;
61
65
}
62
66
63
67
/// <inheritdoc/>
@@ -67,6 +71,7 @@ public override void Configure(IDictionary<string, string> settings)
67
71
68
72
// If changing the default value, keep it in sync with Oracle8iDialect.Configure.
69
73
UseNPrefixedTypesForUnicode = PropertiesHelper . GetBoolean ( Cfg . Environment . OracleUseNPrefixedTypesForUnicode , settings , false ) ;
74
+ UseBinaryFloatingPointTypes = PropertiesHelper . GetBoolean ( Cfg . Environment . OracleUseBinaryFloatingPointTypes , settings , false ) ;
70
75
}
71
76
72
77
/// <summary>
@@ -84,6 +89,11 @@ public override void Configure(IDictionary<string, string> settings)
84
89
/// </remarks>
85
90
public bool UseNPrefixedTypesForUnicode { get ; private set ; }
86
91
92
+ /// <summary>
93
+ /// Whether binary_double and binary_float are used for <see cref="double"/> and <see cref="float"/> types.
94
+ /// </summary>
95
+ public bool UseBinaryFloatingPointTypes { get ; private set ; }
96
+
87
97
/// <inheritdoc/>
88
98
public override bool UseNamedPrefixInSql => true ;
89
99
@@ -131,6 +141,18 @@ protected override void InitializeParameter(DbParameter dbParam, string name, Sq
131
141
case DbType . Currency :
132
142
base . InitializeParameter ( dbParam , name , SqlTypeFactory . Decimal ) ;
133
143
break ;
144
+ case DbType . Double :
145
+ if ( UseBinaryFloatingPointTypes )
146
+ InitializeParameter ( dbParam , name , _oracleDbTypeBinaryDouble ) ;
147
+ else
148
+ base . InitializeParameter ( dbParam , name , sqlType ) ;
149
+ break ;
150
+ case DbType . Single :
151
+ if ( UseBinaryFloatingPointTypes )
152
+ InitializeParameter ( dbParam , name , _oracleDbTypeBinaryFloat ) ;
153
+ else
154
+ base . InitializeParameter ( dbParam , name , sqlType ) ;
155
+ break ;
134
156
default :
135
157
base . InitializeParameter ( dbParam , name , sqlType ) ;
136
158
break ;
0 commit comments