File tree Expand file tree Collapse file tree 5 files changed +53
-21
lines changed
Expand file tree Collapse file tree 5 files changed +53
-21
lines changed Original file line number Diff line number Diff line change @@ -33,4 +33,5 @@ _ReSharper*/
3333SharedAssemblyInfo. *
3434hibernate.cfg.xml
3535.vs /
36- packages /
36+ packages /
37+ .idea /
Original file line number Diff line number Diff line change @@ -358,6 +358,29 @@ public async Task UseNotEqPropertyWithProjectionAsync()
358358 }
359359 }
360360
361+ [ Test ]
362+ public async Task UseSumWithNullResultWithProjectionAsync ( )
363+ {
364+ using ( ISession session = Sfi . OpenSession ( ) )
365+ {
366+ long sum = await ( session . CreateCriteria ( typeof ( Reptile ) )
367+ . SetProjection ( Projections . Sum ( Projections . Id ( ) ) )
368+ . UniqueResultAsync < long > ( ) ) ;
369+ Assert . AreEqual ( 0 , sum ) ;
370+ }
371+ }
361372
373+ [ Test ]
374+ public async Task UseSubquerySumWithNullResultWithProjectionAsync ( )
375+ {
376+ using ( ISession session = Sfi . OpenSession ( ) )
377+ {
378+ int sum = await ( session . CreateCriteria ( typeof ( Enrolment ) )
379+ . CreateCriteria ( "Student" , "s" )
380+ . SetProjection ( Projections . Sum ( Projections . SqlFunction ( "length" , NHibernateUtil . Int32 , Projections . Property ( "s.Name" ) ) ) )
381+ . UniqueResultAsync < int > ( ) ) ;
382+ Assert . AreEqual ( 0 , sum ) ;
383+ }
384+ }
362385 }
363386}
Original file line number Diff line number Diff line change @@ -347,6 +347,29 @@ public void UseNotEqPropertyWithProjection()
347347 }
348348 }
349349
350+ [ Test ]
351+ public void UseSumWithNullResultWithProjection ( )
352+ {
353+ using ( ISession session = Sfi . OpenSession ( ) )
354+ {
355+ long sum = session . CreateCriteria ( typeof ( Reptile ) )
356+ . SetProjection ( Projections . Sum ( Projections . Id ( ) ) )
357+ . UniqueResult < long > ( ) ;
358+ Assert . AreEqual ( 0 , sum ) ;
359+ }
360+ }
350361
362+ [ Test ]
363+ public void UseSubquerySumWithNullResultWithProjection ( )
364+ {
365+ using ( ISession session = Sfi . OpenSession ( ) )
366+ {
367+ int sum = session . CreateCriteria ( typeof ( Enrolment ) )
368+ . CreateCriteria ( "Student" , "s" )
369+ . SetProjection ( Projections . Sum ( Projections . SqlFunction ( "length" , NHibernateUtil . Int32 , Projections . Property ( "s.Name" ) ) ) )
370+ . UniqueResult < int > ( ) ;
371+ Assert . AreEqual ( 0 , sum ) ;
372+ }
373+ }
351374 }
352375}
Original file line number Diff line number Diff line change @@ -110,19 +110,13 @@ public sealed partial class Subcriteria : ICriteria
110110 return root . ListAsync < T > ( cancellationToken ) ;
111111 }
112112
113- public async Task < T > UniqueResultAsync < T > ( CancellationToken cancellationToken = default ( CancellationToken ) )
113+ public Task < T > UniqueResultAsync < T > ( CancellationToken cancellationToken = default ( CancellationToken ) )
114114 {
115- cancellationToken . ThrowIfCancellationRequested ( ) ;
116- object result = await ( UniqueResultAsync ( cancellationToken ) ) . ConfigureAwait ( false ) ;
117- if ( result == null && typeof ( T ) . IsValueType )
118- {
119- throw new InvalidCastException (
120- "UniqueResult<T>() cannot cast null result to value type. Call UniqueResult<T?>() instead" ) ;
121- }
122- else
115+ if ( cancellationToken . IsCancellationRequested )
123116 {
124- return ( T ) result ;
117+ return Task . FromCanceled < T > ( cancellationToken ) ;
125118 }
119+ return root . UniqueResultAsync < T > ( cancellationToken ) ;
126120 }
127121
128122 public Task < object > UniqueResultAsync ( CancellationToken cancellationToken = default ( CancellationToken ) )
Original file line number Diff line number Diff line change @@ -808,16 +808,7 @@ public IList<T> List<T>()
808808
809809 public T UniqueResult < T > ( )
810810 {
811- object result = UniqueResult ( ) ;
812- if ( result == null && typeof ( T ) . IsValueType )
813- {
814- throw new InvalidCastException (
815- "UniqueResult<T>() cannot cast null result to value type. Call UniqueResult<T?>() instead" ) ;
816- }
817- else
818- {
819- return ( T ) result ;
820- }
811+ return root . UniqueResult < T > ( ) ;
821812 }
822813
823814 public void ClearOrders ( )
You can’t perform that action at this time.
0 commit comments