@@ -176,6 +176,36 @@ public async Task CanUseFutureQueryAsync()
176176 }
177177 }
178178
179+ [ Test ]
180+ public async Task CanUseFutureQueryAndQueryOverForSatelessSessionAsync ( )
181+ {
182+ IgnoreThisTestIfMultipleQueriesArentSupportedByDriver ( ) ;
183+
184+ using ( var s = Sfi . OpenStatelessSession ( ) )
185+ {
186+ var persons10 = s . Query < Person > ( )
187+ . Take ( 10 )
188+ . ToFuture ( ) ;
189+ var persons5 = s . QueryOver < Person > ( )
190+ . Take ( 5 )
191+ . Future ( ) ;
192+
193+ using ( var logSpy = new SqlLogSpy ( ) )
194+ {
195+ foreach ( var person in await ( persons5 . GetEnumerableAsync ( ) ) )
196+ {
197+ }
198+
199+ foreach ( var person in await ( persons10 . GetEnumerableAsync ( ) ) )
200+ {
201+ }
202+
203+ var events = logSpy . Appender . GetEvents ( ) ;
204+ Assert . AreEqual ( 1 , events . Length ) ;
205+ }
206+ }
207+ }
208+
179209 [ Test ]
180210 public async Task CanUseFutureQueryWithAnonymousTypeAsync ( )
181211 {
@@ -412,5 +442,120 @@ public async Task UsingManyParametersAndQueries_DoesNotCauseParameterNameCollisi
412442 await ( tx . CommitAsync ( ) ) ;
413443 }
414444 }
445+
446+ [ Test ]
447+ public async Task FutureCombineCachedAndNonCachedQueriesAsync ( )
448+ {
449+ using ( var s = OpenSession ( ) )
450+ using ( var tx = s . BeginTransaction ( ) )
451+ {
452+ var p1 = new Person
453+ {
454+ Name = "Person name" ,
455+ Age = 15
456+ } ;
457+ var p2 = new Person
458+ {
459+ Name = "Person name" ,
460+ Age = 20
461+ } ;
462+
463+ await ( s . SaveAsync ( p1 ) ) ;
464+ await ( s . SaveAsync ( p2 ) ) ;
465+ await ( tx . CommitAsync ( ) ) ;
466+ }
467+
468+ using ( var s = Sfi . OpenSession ( ) )
469+ {
470+ var list = new List < IFutureEnumerable < Person > > ( ) ;
471+ for ( var i = 0 ; i < 5 ; i ++ )
472+ {
473+ var i1 = i ;
474+ var query = s . Query < Person > ( ) . Where ( x => x . Age > i1 ) ;
475+ list . Add ( query . WithOptions ( x => x . SetCacheable ( true ) ) . ToFuture ( ) ) ;
476+ }
477+
478+ foreach ( var query in list )
479+ {
480+ var result = ( await ( query . GetEnumerableAsync ( ) ) ) . ToList ( ) ;
481+ Assert . That ( result . Count , Is . EqualTo ( 2 ) ) ;
482+ }
483+ }
484+
485+ //Check query.List returns data from cache
486+ Sfi . Statistics . IsStatisticsEnabled = true ;
487+ using ( var s = Sfi . OpenSession ( ) )
488+ {
489+ var list = new List < IEnumerable < Person > > ( ) ;
490+ for ( var i = 0 ; i < 5 ; i ++ )
491+ {
492+ var i1 = i ;
493+ var query = s . Query < Person > ( ) . Where ( x => x . Age > i1 ) ;
494+
495+ list . Add ( await ( query . WithOptions ( x => x . SetCacheable ( true ) ) . ToListAsync ( ) ) ) ;
496+ }
497+
498+ foreach ( var query in list )
499+ {
500+ var result = query . ToList ( ) ;
501+ Assert . That ( result . Count , Is . EqualTo ( 2 ) ) ;
502+ }
503+
504+ Assert . That ( Sfi . Statistics . PrepareStatementCount , Is . EqualTo ( 0 ) , "Queries must be retrieved from cache" ) ;
505+ }
506+
507+ //Check another Future returns data from cache
508+ Sfi . Statistics . Clear ( ) ;
509+ using ( var s = Sfi . OpenSession ( ) )
510+ {
511+ var list = new List < IFutureEnumerable < Person > > ( ) ;
512+ //Reverse order of queries added to cache
513+ for ( var i = 5 - 1 ; i >= 0 ; i -- )
514+ {
515+ var i1 = i ;
516+ var query = s . Query < Person > ( ) . Where ( x => x . Age > i1 ) ;
517+
518+ list . Add ( query . WithOptions ( x => x . SetCacheable ( true ) ) . ToFuture ( ) ) ;
519+ }
520+
521+ foreach ( var query in list )
522+ {
523+ var result = ( await ( query . GetEnumerableAsync ( ) ) ) . ToList ( ) ;
524+ Assert . That ( result . Count , Is . EqualTo ( 2 ) ) ;
525+ }
526+
527+ Assert . That ( Sfi . Statistics . PrepareStatementCount , Is . EqualTo ( 0 ) , "Future queries must be retrieved from cache" ) ;
528+ }
529+
530+ using ( var s = OpenSession ( ) )
531+ using ( var tx = s . BeginTransaction ( ) )
532+ {
533+ await ( s . DeleteAsync ( "from Person" ) ) ;
534+ await ( tx . CommitAsync ( ) ) ;
535+ }
536+ }
537+
538+ [ Test ]
539+ public async Task FutureAutoFlushAsync ( )
540+ {
541+ using ( var s = OpenSession ( ) )
542+ using ( var tx = s . BeginTransaction ( ) )
543+ {
544+ s . FlushMode = FlushMode . Auto ;
545+ var p1 = new Person
546+ {
547+ Name = "Person name" ,
548+ Age = 15
549+ } ;
550+ await ( s . SaveAsync ( p1 ) ) ;
551+ await ( s . FlushAsync ( ) ) ;
552+
553+ await ( s . DeleteAsync ( p1 ) ) ;
554+ var count = await ( s . QueryOver < Person > ( ) . ToRowCountQuery ( ) . FutureValue < int > ( ) . GetValueAsync ( ) ) ;
555+ await ( tx . CommitAsync ( ) ) ;
556+
557+ Assert . That ( count , Is . EqualTo ( 0 ) , "Session wasn't auto flushed." ) ;
558+ }
559+ }
415560 }
416561}
0 commit comments