66
77using System . Collections . Generic ;
88using System . Linq ;
9+ using System . Threading . Tasks ;
910using NUnit . Framework ;
1011using Xtensive . Core ;
1112using Xtensive . Orm . Configuration ;
@@ -16,10 +17,7 @@ namespace Xtensive.Orm.Tests.Storage.CommandProcessing
1617{
1718 public class SimpleCommandProcessorParametersManagement : AutoBuildTest
1819 {
19- public int StorageLimit
20- {
21- get { return ProviderInfo . MaxQueryParameterCount ; }
22- }
20+ public int StorageLimit => ProviderInfo . MaxQueryParameterCount ;
2321
2422 protected override DomainConfiguration BuildConfiguration ( )
2523 {
@@ -29,10 +27,7 @@ protected override DomainConfiguration BuildConfiguration()
2927 return config ;
3028 }
3129
32- protected override void CheckRequirements ( )
33- {
34- Require . AllFeaturesNotSupported ( ProviderFeatures . Batches ) ;
35- }
30+ protected override void CheckRequirements ( ) => Require . AllFeaturesNotSupported ( ProviderFeatures . Batches ) ;
3631
3732 protected override void PopulateData ( )
3833 {
@@ -94,15 +89,65 @@ public void DelayedSelectsWithinLimitTest()
9489 }
9590 }
9691
92+ [ Test ]
93+ public async Task DelayedSelectsWithinLimitAsyncTest ( )
94+ {
95+ RequireLimit ( ) ;
96+
97+ using ( var session = await Domain . OpenSessionAsync ( ) )
98+ using ( var transaction = session . OpenTransaction ( ) ) {
99+ var ids = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
100+ var results = new List < IEnumerable < ALotOfFieldsEntityValid > > ( 10 ) ;
101+
102+ results . Add ( session . Query . ExecuteDelayed ( q =>
103+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
104+
105+ results . Add ( session . Query . ExecuteDelayed ( q =>
106+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
107+
108+ results . Add ( session . Query . ExecuteDelayed ( q =>
109+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
110+
111+ results . Add ( session . Query . ExecuteDelayed ( q =>
112+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
113+
114+ results . Add ( session . Query . ExecuteDelayed ( q =>
115+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
116+
117+ results . Add ( session . Query . ExecuteDelayed ( q =>
118+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
119+
120+ results . Add ( session . Query . ExecuteDelayed ( q =>
121+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
122+
123+ results . Add ( session . Query . ExecuteDelayed ( q =>
124+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
125+
126+ results . Add ( session . Query . ExecuteDelayed ( q =>
127+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
128+
129+ results . Add ( session . Query . ExecuteDelayed ( q =>
130+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) ) ) ;
131+
132+ var inlineQuery = await session . Query . All < ALotOfFieldsEntityValid > ( )
133+ . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , ids ) ) . AsAsync ( ) ;
134+ Assert . That ( inlineQuery . Any ( ) , Is . True ) ;
135+
136+ foreach ( var result in results ) {
137+ Assert . That ( result . Any ( ) , Is . True ) ;
138+ }
139+ }
140+ }
141+
97142 [ Test ]
98143 public void DelayedSelectsOutOfLimitTest01 ( )
99144 {
100145 RequireLimit ( ) ;
101146
102147 using ( var session = Domain . OpenSession ( ) )
103148 using ( var transaction = session . OpenTransaction ( ) ) {
104- var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( ) ;
105- var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( ) ;
149+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
150+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
106151
107152 var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
108153 q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
@@ -112,15 +157,33 @@ public void DelayedSelectsOutOfLimitTest01()
112157 }
113158 }
114159
160+ [ Test ]
161+ public async Task DelayedSelectsOutOfLimitAsyncTest01 ( )
162+ {
163+ RequireLimit ( ) ;
164+
165+ using ( var session = await Domain . OpenSessionAsync ( ) )
166+ using ( var transaction = session . OpenTransaction ( ) ) {
167+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
168+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
169+
170+ var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
171+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
172+
173+ _ = Assert . ThrowsAsync < ParametersLimitExceededException > ( async ( ) => await result . AsAsync ( ) ) ;
174+ Assert . That ( result . Task . Result . Count , Is . EqualTo ( 0 ) ) ;
175+ }
176+ }
177+
115178 [ Test ]
116179 public void DelayedSelectsOutOfLimitTest02 ( )
117180 {
118181 RequireLimit ( ) ;
119182
120183 using ( var session = Domain . OpenSession ( ) )
121184 using ( var transaction = session . OpenTransaction ( ) ) {
122- var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( ) ;
123- var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( ) ;
185+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
186+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
124187
125188 var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
126189 q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
@@ -130,15 +193,33 @@ public void DelayedSelectsOutOfLimitTest02()
130193 }
131194 }
132195
196+ [ Test ]
197+ public async Task DelayedSelectsOutOfLimitAsyncTest02 ( )
198+ {
199+ RequireLimit ( ) ;
200+
201+ using ( var session = await Domain . OpenSessionAsync ( ) )
202+ using ( var transaction = session . OpenTransaction ( ) ) {
203+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
204+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
205+
206+ var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
207+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
208+
209+ _ = Assert . ThrowsAsync < ParametersLimitExceededException > ( async ( ) => ( await session . Query . All < ALotOfFieldsEntityValid > ( ) . AsAsync ( ) ) . Run ( ) ) ;
210+ Assert . That ( result . Task . Result . Count , Is . EqualTo ( 0 ) ) ;
211+ }
212+ }
213+
133214 [ Test ]
134215 public void DelayedSelectsOutOfLimitTest03 ( )
135216 {
136217 RequireLimit ( ) ;
137218
138219 using ( var session = Domain . OpenSession ( ) )
139220 using ( var transaction = session . OpenTransaction ( ) ) {
140- var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( ) ;
141- var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( ) ;
221+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
222+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
142223
143224 var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
144225 q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
@@ -151,15 +232,36 @@ public void DelayedSelectsOutOfLimitTest03()
151232 }
152233 }
153234
235+ [ Test ]
236+ public async Task DelayedSelectsOutOfLimitAsyncTest03 ( )
237+ {
238+ RequireLimit ( ) ;
239+
240+ using ( var session = await Domain . OpenSessionAsync ( ) )
241+ using ( var transaction = session . OpenTransaction ( ) ) {
242+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
243+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
244+
245+ var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
246+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
247+
248+ _ = session . Query . ExecuteDelayed ( q =>
249+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
250+
251+ _ = Assert . ThrowsAsync < ParametersLimitExceededException > ( async ( ) => ( await session . Query . All < ALotOfFieldsEntityValid > ( ) . AsAsync ( ) ) . Run ( ) ) ;
252+ Assert . That ( result . Any ( ) , Is . True ) ;
253+ }
254+ }
255+
154256 [ Test ]
155257 public void DelayedSelectsOutOfLimitTest04 ( )
156258 {
157259 RequireLimit ( ) ;
158260
159261 using ( var session = Domain . OpenSession ( ) )
160262 using ( var transaction = session . OpenTransaction ( ) ) {
161- var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( ) ;
162- var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( ) ;
263+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
264+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
163265
164266 var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
165267 q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
@@ -172,15 +274,36 @@ public void DelayedSelectsOutOfLimitTest04()
172274 }
173275 }
174276
277+ [ Test ]
278+ public async Task DelayedSelectsOutOfLimitAsyncTest04 ( )
279+ {
280+ RequireLimit ( ) ;
281+
282+ using ( var session = await Domain . OpenSessionAsync ( ) )
283+ using ( var transaction = session . OpenTransaction ( ) ) {
284+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
285+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
286+
287+ var result = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
288+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) ) ;
289+
290+ _ = session . Query . ExecuteDelayed ( q =>
291+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
292+
293+ _ = Assert . ThrowsAsync < ParametersLimitExceededException > ( async ( ) => ( await session . Query . All < ALotOfFieldsEntityValid > ( ) . AsAsync ( ) ) . Run ( ) ) ;
294+ Assert . That ( result . Any ( ) , Is . False ) ;
295+ }
296+ }
297+
175298 [ Test ]
176299 public void DelayedSelectsOutOfLimitTest05 ( )
177300 {
178301 RequireLimit ( ) ;
179302
180303 using ( var session = Domain . OpenSession ( ) )
181304 using ( var transaction = session . OpenTransaction ( ) ) {
182- var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( ) ;
183- var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( ) ;
305+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
306+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
184307
185308 var result1 = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
186309 q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
@@ -196,6 +319,30 @@ public void DelayedSelectsOutOfLimitTest05()
196319 }
197320 }
198321
322+ [ Test ]
323+ public async Task DelayedSelectsOutOfLimitAsyncTest05 ( )
324+ {
325+ RequireLimit ( ) ;
326+
327+ using ( var session = await Domain . OpenSessionAsync ( ) )
328+ using ( var transaction = session . OpenTransaction ( ) ) {
329+ var fittedIds = Enumerable . Range ( 1 , StorageLimit - 1 ) . ToArray ( StorageLimit - 1 ) ;
330+ var idsOutOfRange = Enumerable . Range ( 1 , StorageLimit + 1 ) . ToArray ( StorageLimit + 1 ) ;
331+
332+ var result1 = ( DelayedSequence < ALotOfFieldsEntityValid > ) session . Query . ExecuteDelayed ( q =>
333+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
334+
335+ var result2 = session . Query . ExecuteDelayed ( q =>
336+ q . All < ALotOfFieldsEntityValid > ( ) . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , fittedIds ) ) ) ;
337+
338+ _ = Assert . ThrowsAsync < ParametersLimitExceededException > (
339+ async ( ) => ( await session . Query . All < ALotOfFieldsEntityValid > ( )
340+ . Where ( e => e . Id . In ( IncludeAlgorithm . ComplexCondition , idsOutOfRange ) ) . AsAsync ( ) ) . Run ( ) ) ;
341+ Assert . That ( result1 . Any ( ) , Is . True ) ;
342+ Assert . That ( result2 . Any ( ) , Is . True ) ;
343+ }
344+ }
345+
199346 [ Test ]
200347 public void InsertTest01 ( )
201348 {
0 commit comments