@@ -21,10 +21,7 @@ public class CriteriaQueryTranslator : ICriteriaQuery, ISupportEntityProjectionC
2121 public class EntityJoinInfo
2222 {
2323 public ICriteria Criteria ;
24- public string TableAlias ;
25- public SqlString WithClause ;
26- public JoinType JoinType ;
27- public IOuterJoinLoadable Persister ;
24+ public IQueryable Persister ;
2825 }
2926
3027 public static readonly string RootSqlAlias = CriteriaSpecification . RootAlias + '_' ;
@@ -73,22 +70,22 @@ public CriteriaQueryTranslator(ISessionFactoryImplementor factory, CriteriaImpl
7370 string rootSQLAlias )
7471 {
7572 rootCriteria = criteria ;
76-
73+
7774 sessionFactory = factory ;
75+ rootPersister = GetQueryablePersister ( rootEntityName ) ;
7876 this . rootSQLAlias = rootSQLAlias ;
7977 helper = new SessionFactoryHelper ( factory ) ;
80- rootPersister = GetQueryablePersister ( rootEntityName ) ;
8178
8279 collectedParameterSpecifications = new List < IParameterSpecification > ( ) ;
8380 namedParameters = new List < NamedParameter > ( ) ;
8481
8582 CreateAliasCriteriaMap ( ) ;
8683 CreateAssociationPathCriteriaMap ( ) ;
84+ CreateEntityJoinMap ( ) ;
8785 CreateCriteriaEntityNameMap ( ) ;
8886 CreateCriteriaCollectionPersisters ( ) ;
8987 CreateCriteriaSQLAliasMap ( ) ;
9088 CreateSubQuerySpaces ( ) ;
91- FillExplicitEntityJoinsDetails ( ) ;
9289 }
9390
9491 [ CLSCompliant ( false ) ] // TODO: Why does this cause a problem in 1.1
@@ -128,7 +125,7 @@ public CriteriaImpl RootCriteria
128125
129126 ICriteria ISupportEntityProjectionCriteriaQuery . RootCriteria => rootCriteria ;
130127
131- public IReadOnlyDictionary < string , EntityJoinInfo > GetEntityJoins ( )
128+ internal IReadOnlyDictionary < string , EntityJoinInfo > GetEntityJoins ( )
132129 {
133130 return entityJoins ;
134131 }
@@ -322,11 +319,6 @@ private void CreateAssociationPathCriteriaMap()
322319 {
323320 foreach ( CriteriaImpl . Subcriteria crit in rootCriteria . IterateSubcriteria ( ) )
324321 {
325- if ( crit . IsEntityJoin )
326- {
327- continue ;
328- }
329-
330322 string wholeAssociationPath = GetWholeAssociationPath ( crit ) ;
331323 try
332324 {
@@ -403,20 +395,10 @@ private string GetWholeAssociationPath(CriteriaImpl.Subcriteria subcriteria)
403395 private void CreateCriteriaEntityNameMap ( )
404396 {
405397 // initialize the rootProvider first
406- ICriteriaInfoProvider rootProvider = MapEntityToCriteria ( rootPersister , rootCriteria ) ;
407-
408- foreach ( var a in rootCriteria . GetEntityJoinAliasToEntityNameMap ( ) )
409- {
410- var criteria = rootCriteria . GetCriteriaByAlias ( a . Key ) ;
411- var persister = GetQueryablePersister ( a . Value ) ;
412- MapEntityToCriteria ( persister , criteria ) ;
398+ ICriteriaInfoProvider rootProvider = new EntityCriteriaInfoProvider ( rootPersister ) ;
399+ criteriaInfoMap . Add ( rootCriteria , rootProvider ) ;
400+ nameCriteriaInfoMap . Add ( rootProvider . Name , rootProvider ) ;
413401
414- entityJoins [ a . Key ] = new EntityJoinInfo
415- {
416- Persister = persister as IOuterJoinLoadable ,
417- Criteria = criteria ,
418- } ;
419- }
420402
421403 foreach ( KeyValuePair < string , ICriteria > me in associationPathCriteriaMap )
422404 {
@@ -426,6 +408,22 @@ private void CreateCriteriaEntityNameMap()
426408 }
427409 }
428410
411+ //explicit joins with not associated entities
412+ private void CreateEntityJoinMap ( )
413+ {
414+ foreach ( var criteria in rootCriteria . IterateSubcriteria ( ) )
415+ {
416+ if ( criteria . IsEntityJoin )
417+ {
418+ var entityJoinPersister = GetQueryablePersister ( criteria . JoinEntityName ) ;
419+ entityJoins [ criteria . Alias ] = new EntityJoinInfo
420+ {
421+ Persister = entityJoinPersister ,
422+ Criteria = criteria ,
423+ } ;
424+ }
425+ }
426+ }
429427
430428 private void CreateCriteriaCollectionPersisters ( )
431429 {
@@ -501,7 +499,7 @@ private ICriteriaInfoProvider GetPathInfo(string path, ICriteriaInfoProvider roo
501499 int i = 0 ;
502500 if ( entityJoins . TryGetValue ( tokens [ 0 ] , out var entityJoinInfo ) )
503501 {
504- provider = criteriaInfoMap [ entityJoinInfo . Criteria ] ;
502+ provider = new EntityCriteriaInfoProvider ( entityJoinInfo . Persister ) ;
505503 ++ i ;
506504 }
507505
@@ -553,32 +551,6 @@ private ICriteriaInfoProvider GetPathInfo(string path, ICriteriaInfoProvider roo
553551 return provider ;
554552 }
555553
556- private void FillExplicitEntityJoinsDetails ( )
557- {
558- if ( entityJoins . Count == 0 )
559- return ;
560-
561- foreach ( var subcriteria in rootCriteria . IterateSubcriteria ( ) )
562- {
563- if ( subcriteria . IsEntityJoin )
564- {
565- var entityJoin = entityJoins [ subcriteria . Alias ] ;
566- entityJoin . JoinType = subcriteria . JoinType ;
567- entityJoin . WithClause = subcriteria . WithClause . ToSqlString ( entityJoin . Criteria , this ) ;
568- entityJoin . TableAlias = GetSQLAlias ( entityJoin . Criteria ) ;
569- }
570- }
571- }
572-
573- private ICriteriaInfoProvider MapEntityToCriteria ( IQueryable persister , ICriteria criteria )
574- {
575- var provider = new EntityCriteriaInfoProvider ( persister ) ;
576-
577- criteriaInfoMap . Add ( criteria , provider ) ;
578- nameCriteriaInfoMap [ provider . Name ] = provider ;
579- return provider ;
580- }
581-
582554 private void CreateCriteriaSQLAliasMap ( )
583555 {
584556 int i = 0 ;
0 commit comments