Skip to content

Commit d3f8a63

Browse files
committed
minimize overall change noize
1 parent aaaf9fc commit d3f8a63

File tree

3 files changed

+34
-70
lines changed

3 files changed

+34
-70
lines changed

src/NHibernate/Impl/CriteriaImpl.cs

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,6 @@ public partial class CriteriaImpl : ICriteria, ISupportEntityJoinCriteria
4343
private readonly Dictionary<string, ICriteria> subcriteriaByPath = new Dictionary<string, ICriteria>();
4444
private readonly Dictionary<string, ICriteria> subcriteriaByAlias = new Dictionary<string, ICriteria>();
4545

46-
private readonly Dictionary<string,string> entityJoinAliasToEntityNameMap = new Dictionary<string, string>();
47-
4846
private readonly string entityOrClassName;
4947

5048
// Projection Fields
@@ -75,11 +73,6 @@ public CriteriaImpl(string entityOrClassName, string alias, ISessionImplementor
7573
subcriteriaByAlias[alias] = this;
7674
}
7775

78-
public IDictionary<string,string> GetEntityJoinAliasToEntityNameMap()
79-
{
80-
return entityJoinAliasToEntityNameMap;
81-
}
82-
8376
public ISessionImplementor Session
8477
{
8578
get { return session; }
@@ -672,11 +665,7 @@ internal Subcriteria(CriteriaImpl root, ICriteria parent, string path, string al
672665

673666
root.subcriteriaList.Add(this);
674667

675-
if (JoinEntityName == null)
676-
root.subcriteriaByPath[path] = this;
677-
else
678-
root.entityJoinAliasToEntityNameMap[alias] = JoinEntityName;
679-
668+
root.subcriteriaByPath[path] = this;
680669
SetAlias(alias);
681670
}
682671

src/NHibernate/Loader/Criteria/CriteriaJoinWalker.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,13 +79,16 @@ public CriteriaJoinWalker(IOuterJoinLoadable persister, CriteriaQueryTranslator
7979
protected override void AddAssociations()
8080
{
8181
base.AddAssociations();
82-
foreach (var x in translator.GetEntityJoins())
82+
foreach (var entityJoinInfo in translator.GetEntityJoins().Values)
8383
{
84-
CriteriaQueryTranslator.EntityJoinInfo info = x.Value;
85-
AddExplicitEntityJoinAssociation(info.Persister, info.TableAlias, info.JoinType, info.WithClause);
86-
IncludeInResultIfNeeded(info.Persister, info.Criteria, info.TableAlias);
84+
var tableAlias = translator.GetSQLAlias(entityJoinInfo.Criteria);
85+
var criteriaPath = entityJoinInfo.Criteria.Alias; //path for entity join is equal to alias
86+
var persister
87+
= entityJoinInfo.Persister as IOuterJoinLoadable;
88+
AddExplicitEntityJoinAssociation(persister, tableAlias, translator.GetJoinType(criteriaPath), GetWithClause(criteriaPath));
89+
IncludeInResultIfNeeded(persister, entityJoinInfo.Criteria, tableAlias);
8790
//collect mapped associations for entity join
88-
WalkEntityTree(info.Persister, info.TableAlias, info.Criteria.Alias, 1);
91+
WalkEntityTree(persister, tableAlias, criteriaPath, 1);
8992
}
9093
}
9194

src/NHibernate/Loader/Criteria/CriteriaQueryTranslator.cs

Lines changed: 25 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)