@@ -26,7 +26,7 @@ namespace NHibernate.Test.Hql
2626 [ TestFixture ]
2727 public class EntityJoinHqlTestAsync : TestCaseMappingByCode
2828 {
29- private const string _customEntityName = "CustomEntityName" ;
29+ private const string _customEntityName = "CustomEntityName.Test " ;
3030 private EntityWithCompositeId _entityWithCompositeId ;
3131 private EntityWithNoAssociation _noAssociation ;
3232 private EntityCustomEntityName _entityWithCustomEntityName ;
@@ -51,6 +51,46 @@ public async Task CanJoinNotAssociatedEntityAsync()
5151 }
5252 }
5353
54+ [ Test ]
55+ public async Task CanJoinNotAssociatedEntityFullNameAsync ( )
56+ {
57+ using ( var sqlLog = new SqlLogSpy ( ) )
58+ using ( var session = OpenSession ( ) )
59+ {
60+ EntityComplex entityComplex =
61+ await ( session
62+ . CreateQuery ( "select ex " +
63+ "from EntityWithNoAssociation root " +
64+ $ "left join { typeof ( EntityComplex ) . FullName } ex with root.Complex1Id = ex.Id")
65+ . SetMaxResults ( 1 )
66+ . UniqueResultAsync < EntityComplex > ( ) ) ;
67+
68+ Assert . That ( entityComplex , Is . Not . Null ) ;
69+ Assert . That ( NHibernateUtil . IsInitialized ( entityComplex ) , Is . True ) ;
70+ Assert . That ( sqlLog . Appender . GetEvents ( ) . Length , Is . EqualTo ( 1 ) , "Only one SQL select is expected" ) ;
71+ }
72+ }
73+
74+ [ Test ]
75+ public async Task CanJoinNotAssociatedInterfaceFullNameAsync ( )
76+ {
77+ using ( var sqlLog = new SqlLogSpy ( ) )
78+ using ( var session = OpenSession ( ) )
79+ {
80+ EntityComplex entityComplex =
81+ await ( session
82+ . CreateQuery ( "select ex " +
83+ "from EntityWithNoAssociation root " +
84+ $ "left join { typeof ( IEntityComplex ) . FullName } ex with root.Complex1Id = ex.Id")
85+ . SetMaxResults ( 1 )
86+ . UniqueResultAsync < EntityComplex > ( ) ) ;
87+
88+ Assert . That ( entityComplex , Is . Not . Null ) ;
89+ Assert . That ( NHibernateUtil . IsInitialized ( entityComplex ) , Is . True ) ;
90+ Assert . That ( sqlLog . Appender . GetEvents ( ) . Length , Is . EqualTo ( 1 ) , "Only one SQL select is expected" ) ;
91+ }
92+ }
93+
5494 [ Test ]
5595 public async Task CanJoinNotAssociatedEntity_OnKeywordAsync ( )
5696 {
@@ -302,8 +342,18 @@ public async Task NullableEntityProjectionAsync()
302342
303343 var fullList = await ( session . Query < NullableOwner > ( ) . Select ( x => new { x . Name , ManyToOneId = ( Guid ? ) x . ManyToOne . Id } ) . ToListAsync ( ) ) ;
304344 var withValidManyToOneList = await ( session . Query < NullableOwner > ( ) . Where ( x => x . ManyToOne != null ) . Select ( x => new { x . Name , ManyToOneId = ( Guid ? ) x . ManyToOne . Id } ) . ToListAsync ( ) ) ;
345+ var withValidManyToOneList2 = await ( session . CreateQuery ( "from NullableOwner ex where not ex.ManyToOne is null" ) . ListAsync < NullableOwner > ( ) ) ;
346+ var withNullManyToOneList = await ( session . Query < NullableOwner > ( ) . Where ( x => x . ManyToOne == null ) . ToListAsync ( ) ) ;
347+ var withNullManyToOneJoinedList =
348+ await ( ( from x in session . Query < NullableOwner > ( )
349+ from x2 in session . Query < NullableOwner > ( )
350+ where x == x2 && x . ManyToOne == null && x . OneToOne . Name == null
351+ select x2 ) . ToListAsync ( ) ) ;
305352 Assert . That ( fullList . Count , Is . EqualTo ( 2 ) ) ;
306353 Assert . That ( withValidManyToOneList . Count , Is . EqualTo ( 0 ) ) ;
354+ Assert . That ( withValidManyToOneList2 . Count , Is . EqualTo ( 0 ) ) ;
355+ Assert . That ( withNullManyToOneList . Count , Is . EqualTo ( 2 ) ) ;
356+ Assert . That ( withNullManyToOneJoinedList . Count , Is . EqualTo ( 2 ) ) ;
307357 }
308358 }
309359
0 commit comments