19
19
using NHibernate . Engine ;
20
20
using NHibernate . Exceptions ;
21
21
using NHibernate . Linq ;
22
+ using NHibernate . Type ;
22
23
using NUnit . Framework ;
23
24
24
- namespace NHibernate . Test . NHSpecificTest . NH3403
25
+ namespace NHibernate . Test . NHSpecificTest . GH1300
25
26
{
26
27
using System . Threading . Tasks ;
27
28
using System . Threading ;
@@ -51,8 +52,8 @@ protected override void Configure(Configuration configuration)
51
52
52
53
protected override void OnTearDown ( )
53
54
{
54
- using ( ISession session = OpenSession ( ) )
55
- using ( ITransaction transaction = session . BeginTransaction ( ) )
55
+ using ( var session = OpenSession ( ) )
56
+ using ( var transaction = session . BeginTransaction ( ) )
56
57
{
57
58
session . Delete ( "from System.Object" ) ;
58
59
@@ -64,8 +65,8 @@ protected override void OnTearDown()
64
65
protected override void OnSetUp ( )
65
66
{
66
67
base . OnSetUp ( ) ;
67
- using ( ISession session = OpenSession ( ) )
68
- using ( ITransaction transaction = session . BeginTransaction ( ) )
68
+ using ( var session = OpenSession ( ) )
69
+ using ( var transaction = session . BeginTransaction ( ) )
69
70
{
70
71
var e1 = new Entity { Name = "Bob" } ;
71
72
session . Save ( e1 ) ;
@@ -78,16 +79,16 @@ public async Task InsertShouldUseMappedSizeAsync()
78
79
{
79
80
Driver . ClearCommands ( ) ;
80
81
81
- using ( ISession session = OpenSession ( ) )
82
- using ( ITransaction transaction = session . BeginTransaction ( ) )
82
+ using ( var session = OpenSession ( ) )
83
+ using ( var transaction = session . BeginTransaction ( ) )
83
84
{
84
85
var e1 = new Entity { Name = "Al" , AnsiName = "Al" } ;
85
86
await ( session . SaveAsync ( e1 ) ) ;
86
87
await ( transaction . CommitAsync ( ) ) ;
87
- Assert . AreEqual ( SqlDbType . NVarChar , Driver . LastCommandParameters . First ( ) . SqlDbType ) ;
88
- Assert . AreEqual ( 3 , Driver . LastCommandParameters . First ( ) . Size ) ;
89
- Assert . AreEqual ( SqlDbType . VarChar , Driver . LastCommandParameters . Last ( ) . SqlDbType ) ;
90
- Assert . AreEqual ( 3 , Driver . LastCommandParameters . Last ( ) . Size ) ;
88
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( SqlDbType . NVarChar ) ) ;
89
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . EqualTo ( 3 ) ) ;
90
+ Assert . That ( Driver . LastCommandParameters . Last ( ) . SqlDbType , Is . EqualTo ( SqlDbType . VarChar ) ) ;
91
+ Assert . That ( Driver . LastCommandParameters . Last ( ) . Size , Is . EqualTo ( 3 ) ) ;
91
92
}
92
93
}
93
94
@@ -96,8 +97,8 @@ public void InsertWithTooLongValuesShouldThrowAsync()
96
97
{
97
98
Driver . ClearCommands ( ) ;
98
99
99
- using ( ISession session = OpenSession ( ) )
100
- using ( ITransaction transaction = session . BeginTransaction ( ) )
100
+ using ( var session = OpenSession ( ) )
101
+ using ( var transaction = session . BeginTransaction ( ) )
101
102
{
102
103
var e1 = new Entity { Name = "Alal" , AnsiName = "Alal" } ;
103
104
@@ -109,7 +110,7 @@ public void InsertWithTooLongValuesShouldThrowAsync()
109
110
} ) ;
110
111
111
112
var sqlEx = ex . InnerException as SqlException ;
112
- Assert . IsNotNull ( sqlEx ) ;
113
+ Assert . That ( sqlEx , Is . Not . Null ) ;
113
114
Assert . That ( sqlEx . Number , Is . EqualTo ( 8152 ) ) ;
114
115
}
115
116
}
@@ -120,8 +121,8 @@ public void InsertWithTooLongValuesShouldThrowAsync()
120
121
{
121
122
Driver . ClearCommands ( ) ;
122
123
123
- using ( ISession session = OpenSession ( ) )
124
- using ( ITransaction transaction = session . BeginTransaction ( ) )
124
+ using ( var session = OpenSession ( ) )
125
+ using ( var transaction = session . BeginTransaction ( ) )
125
126
{
126
127
if ( property == "Name" )
127
128
{
@@ -131,24 +132,59 @@ public void InsertWithTooLongValuesShouldThrowAsync()
131
132
{
132
133
await ( session . Query < Entity > ( ) . Where ( x => x . AnsiName == "Bob" ) . ToListAsync ( cancellationToken ) ) ;
133
134
}
134
- Assert . AreEqual ( 3 , Driver . LastCommandParameters . First ( ) . Size ) ;
135
- Assert . AreEqual ( expectedDbType , Driver . LastCommandParameters . First ( ) . SqlDbType ) ;
135
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . EqualTo ( 3 ) ) ;
136
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( expectedDbType ) ) ;
136
137
}
137
138
}
138
-
139
+
140
+ [ Test ]
141
+ public async Task MappedAsShouldUseExplicitSizeAsync ( )
142
+ {
143
+ Driver . ClearCommands ( ) ;
144
+
145
+ using ( var session = OpenSession ( ) )
146
+ using ( var transaction = session . BeginTransaction ( ) )
147
+ {
148
+ await ( session . Query < Entity > ( ) . Where ( x => x . Name == "Bob" . MappedAs ( TypeFactory . Basic ( "AnsiString(200)" ) ) ) . ToListAsync ( ) ) ;
149
+
150
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . EqualTo ( 200 ) ) ;
151
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( SqlDbType . VarChar ) ) ;
152
+ }
153
+ }
154
+
155
+ [ Test ]
156
+ public async Task LongStringCausesClobSizedParameterAsync ( )
157
+ {
158
+ Driver . ClearCommands ( ) ;
159
+
160
+ using ( var session = OpenSession ( ) )
161
+ using ( var transaction = session . BeginTransaction ( ) )
162
+ {
163
+ await ( session . Query < Entity > ( ) . Where ( x => x . Name == new string ( 'x' , MsSql2000Dialect . MaxSizeForLengthLimitedString + 1 ) ) . ToListAsync ( ) ) ;
164
+
165
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . EqualTo ( MsSql2000Dialect . MaxSizeForClob ) ) ;
166
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( SqlDbType . NVarChar ) ) ;
167
+
168
+ await ( session . Query < Entity > ( ) . Where ( x => x . AnsiName == new string ( 'x' , MsSql2000Dialect . MaxSizeForLengthLimitedAnsiString + 1 ) ) . ToListAsync ( ) ) ;
169
+
170
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . EqualTo ( MsSql2000Dialect . MaxSizeForAnsiClob ) ) ;
171
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( SqlDbType . VarChar ) ) ;
172
+ }
173
+ }
174
+
139
175
[ TestCase ( "Name" , SqlDbType . NVarChar ) ]
140
176
[ TestCase ( "AnsiName" , SqlDbType . VarChar ) ]
141
177
public async Task HqlLikeShouldUseLargerSizeAsync ( string property , SqlDbType expectedDbType , CancellationToken cancellationToken = default ( CancellationToken ) )
142
178
{
143
179
Driver . ClearCommands ( ) ;
144
180
145
- using ( ISession session = OpenSession ( ) )
146
- using ( ITransaction transaction = session . BeginTransaction ( ) )
181
+ using ( var session = OpenSession ( ) )
182
+ using ( var transaction = session . BeginTransaction ( ) )
147
183
{
148
184
await ( session . CreateQuery ( "from Entity where " + property + " like :name" ) . SetParameter ( "name" , "%Bob%" ) . ListAsync < Entity > ( cancellationToken ) ) ;
149
185
150
- Assert . GreaterOrEqual ( Driver . LastCommandParameters . First ( ) . Size , 5 ) ;
151
- Assert . AreEqual ( expectedDbType , Driver . LastCommandParameters . First ( ) . SqlDbType ) ;
186
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . GreaterThanOrEqualTo ( 5 ) ) ;
187
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( expectedDbType ) ) ;
152
188
}
153
189
}
154
190
@@ -158,38 +194,35 @@ public void InsertWithTooLongValuesShouldThrowAsync()
158
194
{
159
195
Driver . ClearCommands ( ) ;
160
196
161
- using ( ISession session = OpenSession ( ) )
162
- using ( ITransaction transaction = session . BeginTransaction ( ) )
197
+ using ( var session = OpenSession ( ) )
198
+ using ( var transaction = session . BeginTransaction ( ) )
163
199
{
164
200
Driver . ClearCommands ( ) ;
165
201
166
202
await ( session . CreateCriteria < Entity > ( ) . Add ( Restrictions . Eq ( property , "Bob" ) )
167
203
. ListAsync < Entity > ( cancellationToken ) ) ;
168
204
169
- Assert . GreaterOrEqual ( Driver . LastCommandParameters . First ( ) . Size , 3 ) ;
170
- Assert . AreEqual ( expectedDbType , Driver . LastCommandParameters . First ( ) . SqlDbType ) ;
205
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . GreaterThanOrEqualTo ( 3 ) ) ;
206
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( expectedDbType ) ) ;
171
207
}
172
208
}
173
-
209
+
174
210
[ TestCase ( "Name" , SqlDbType . NVarChar ) ]
175
211
[ TestCase ( "AnsiName" , SqlDbType . VarChar ) ]
176
212
public async Task CriteriaLikeShouldUseLargerSizeAsync ( string property , SqlDbType expectedDbType , CancellationToken cancellationToken = default ( CancellationToken ) )
177
213
{
178
214
Driver . ClearCommands ( ) ;
179
215
180
- using ( ISession session = OpenSession ( ) )
181
- using ( ITransaction transaction = session . BeginTransaction ( ) )
216
+ using ( var session = OpenSession ( ) )
217
+ using ( var transaction = session . BeginTransaction ( ) )
182
218
{
183
219
await ( session . CreateCriteria < Entity > ( ) . Add ( Restrictions . Like ( property , "%Bob%" ) )
184
220
. ListAsync < Entity > ( cancellationToken ) ) ;
185
221
186
- Assert . GreaterOrEqual ( Driver . LastCommandParameters . First ( ) . Size , 5 ) ;
187
- Assert . AreEqual ( expectedDbType , Driver . LastCommandParameters . First ( ) . SqlDbType ) ;
222
+ Assert . That ( Driver . LastCommandParameters . First ( ) . Size , Is . GreaterThanOrEqualTo ( 5 ) ) ;
223
+ Assert . That ( Driver . LastCommandParameters . First ( ) . SqlDbType , Is . EqualTo ( expectedDbType ) ) ;
188
224
}
189
225
}
190
- private TestSqlClientDriver Driver
191
- {
192
- get { return Sfi . ConnectionProvider . Driver as TestSqlClientDriver ; }
193
- }
226
+ private TestSqlClientDriver Driver => Sfi . ConnectionProvider . Driver as TestSqlClientDriver ;
194
227
}
195
228
}
0 commit comments