@@ -21,10 +21,7 @@ public class CriteriaQueryTranslator : ICriteriaQuery, ISupportEntityProjectionC
21
21
public class EntityJoinInfo
22
22
{
23
23
public ICriteria Criteria ;
24
- public string TableAlias ;
25
- public SqlString WithClause ;
26
- public JoinType JoinType ;
27
- public IOuterJoinLoadable Persister ;
24
+ public IQueryable Persister ;
28
25
}
29
26
30
27
public static readonly string RootSqlAlias = CriteriaSpecification . RootAlias + '_' ;
@@ -73,22 +70,22 @@ public CriteriaQueryTranslator(ISessionFactoryImplementor factory, CriteriaImpl
73
70
string rootSQLAlias )
74
71
{
75
72
rootCriteria = criteria ;
76
-
73
+
77
74
sessionFactory = factory ;
75
+ rootPersister = GetQueryablePersister ( rootEntityName ) ;
78
76
this . rootSQLAlias = rootSQLAlias ;
79
77
helper = new SessionFactoryHelper ( factory ) ;
80
- rootPersister = GetQueryablePersister ( rootEntityName ) ;
81
78
82
79
collectedParameterSpecifications = new List < IParameterSpecification > ( ) ;
83
80
namedParameters = new List < NamedParameter > ( ) ;
84
81
85
82
CreateAliasCriteriaMap ( ) ;
86
83
CreateAssociationPathCriteriaMap ( ) ;
84
+ CreateEntityJoinMap ( ) ;
87
85
CreateCriteriaEntityNameMap ( ) ;
88
86
CreateCriteriaCollectionPersisters ( ) ;
89
87
CreateCriteriaSQLAliasMap ( ) ;
90
88
CreateSubQuerySpaces ( ) ;
91
- FillExplicitEntityJoinsDetails ( ) ;
92
89
}
93
90
94
91
[ CLSCompliant ( false ) ] // TODO: Why does this cause a problem in 1.1
@@ -128,7 +125,7 @@ public CriteriaImpl RootCriteria
128
125
129
126
ICriteria ISupportEntityProjectionCriteriaQuery . RootCriteria => rootCriteria ;
130
127
131
- public IReadOnlyDictionary < string , EntityJoinInfo > GetEntityJoins ( )
128
+ internal IReadOnlyDictionary < string , EntityJoinInfo > GetEntityJoins ( )
132
129
{
133
130
return entityJoins ;
134
131
}
@@ -322,11 +319,6 @@ private void CreateAssociationPathCriteriaMap()
322
319
{
323
320
foreach ( CriteriaImpl . Subcriteria crit in rootCriteria . IterateSubcriteria ( ) )
324
321
{
325
- if ( crit . IsEntityJoin )
326
- {
327
- continue ;
328
- }
329
-
330
322
string wholeAssociationPath = GetWholeAssociationPath ( crit ) ;
331
323
try
332
324
{
@@ -403,20 +395,10 @@ private string GetWholeAssociationPath(CriteriaImpl.Subcriteria subcriteria)
403
395
private void CreateCriteriaEntityNameMap ( )
404
396
{
405
397
// 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 ) ;
413
401
414
- entityJoins [ a . Key ] = new EntityJoinInfo
415
- {
416
- Persister = persister as IOuterJoinLoadable ,
417
- Criteria = criteria ,
418
- } ;
419
- }
420
402
421
403
foreach ( KeyValuePair < string , ICriteria > me in associationPathCriteriaMap )
422
404
{
@@ -426,6 +408,22 @@ private void CreateCriteriaEntityNameMap()
426
408
}
427
409
}
428
410
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
+ }
429
427
430
428
private void CreateCriteriaCollectionPersisters ( )
431
429
{
@@ -501,7 +499,7 @@ private ICriteriaInfoProvider GetPathInfo(string path, ICriteriaInfoProvider roo
501
499
int i = 0 ;
502
500
if ( entityJoins . TryGetValue ( tokens [ 0 ] , out var entityJoinInfo ) )
503
501
{
504
- provider = criteriaInfoMap [ entityJoinInfo . Criteria ] ;
502
+ provider = new EntityCriteriaInfoProvider ( entityJoinInfo . Persister ) ;
505
503
++ i ;
506
504
}
507
505
@@ -553,32 +551,6 @@ private ICriteriaInfoProvider GetPathInfo(string path, ICriteriaInfoProvider roo
553
551
return provider ;
554
552
}
555
553
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
-
582
554
private void CreateCriteriaSQLAliasMap ( )
583
555
{
584
556
int i = 0 ;
0 commit comments