Skip to content

Commit d869825

Browse files
committed
Refactored custom SQL query implementation.
1 parent d206ac0 commit d869825

19 files changed

+581
-931
lines changed

src/NHibernate/Loader/BasicLoader.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using NHibernate.Engine;
2+
using NHibernate.Loader.Custom;
23
using NHibernate.Persister.Collection;
34
using NHibernate.Persister.Entity;
45
using NHibernate.Type;

src/NHibernate/Loader/Custom/CollectionFetchReturn.cs

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/NHibernate/Loader/Custom/CollectionReturn.cs

Lines changed: 0 additions & 48 deletions
This file was deleted.

src/NHibernate/Loader/Custom/ColumnCollectionAliases.cs

Lines changed: 33 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,36 @@ public ColumnCollectionAliases(IDictionary<string, string[]> userProvidedAliases
2121
{
2222
this.userProvidedAliases = userProvidedAliases;
2323

24-
keyAliases = GetUserProvidedAliases("key", persister.KeyColumnNames);
24+
this.keyAliases = GetUserProvidedAliases("key", persister.KeyColumnNames);
25+
this.indexAliases = GetUserProvidedAliases("index", persister.IndexColumnNames);
26+
this.elementAliases = GetUserProvidedAliases("element", persister.ElementColumnNames);
2527

26-
indexAliases = GetUserProvidedAliases("index", persister.IndexColumnNames);
28+
// NH-1612: Add aliases for all composite element properties to support access
29+
// to individual composite element properties in <return-property> elements.
30+
this.elementAliases = persister.ElementType.IsComponentType
31+
? GetUserProvidedCompositeElementAliases(persister.ElementColumnNames)
32+
: GetUserProvidedAliases("element", persister.ElementColumnNames);
2733

28-
elementAliases = GetUserProvidedAliases("element", persister.ElementColumnNames);
34+
this.identifierAlias = GetUserProvidedAlias("id", persister.IdentifierColumnName);
35+
}
2936

30-
identifierAlias = GetUserProvidedAlias("id", persister.IdentifierColumnName);
37+
private string[] GetUserProvidedCompositeElementAliases(string[] defaultAliases)
38+
{
39+
if (userProvidedAliases != null)
40+
{
41+
var aliases = new List<string>();
42+
foreach (var userProvidedAlias in userProvidedAliases)
43+
{
44+
if (userProvidedAlias.Key.StartsWith("element."))
45+
{
46+
aliases.AddRange(userProvidedAlias.Value);
47+
}
48+
}
49+
50+
if (aliases.Count > 0) return aliases.ToArray();
51+
}
52+
53+
return defaultAliases;
3154
}
3255

3356
/// <summary>
@@ -96,27 +119,17 @@ private static string Join(IEnumerable aliases)
96119
private string[] GetUserProvidedAliases(string propertyPath, string[] defaultAliases)
97120
{
98121
string[] result;
99-
if (!userProvidedAliases.TryGetValue(propertyPath, out result))
100-
{
101-
return defaultAliases;
102-
}
103-
else
104-
{
105-
return result;
106-
}
122+
return userProvidedAliases == null || !userProvidedAliases.TryGetValue(propertyPath, out result)
123+
? defaultAliases
124+
: result;
107125
}
108126

109127
private string GetUserProvidedAlias(string propertyPath, string defaultAlias)
110128
{
111129
string[] columns;
112-
if (!userProvidedAliases.TryGetValue(propertyPath, out columns))
113-
{
114-
return defaultAlias;
115-
}
116-
else
117-
{
118-
return columns[0];
119-
}
130+
return userProvidedAliases == null || !userProvidedAliases.TryGetValue(propertyPath, out columns)
131+
? defaultAlias
132+
: columns[0];
120133
}
121134
}
122135
}

src/NHibernate/Loader/Custom/ColumnEntityAliases.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ namespace NHibernate.Loader.Custom
88
/// </summary>
99
public class ColumnEntityAliases : DefaultEntityAliases
1010
{
11-
public ColumnEntityAliases(IDictionary<string, string[]> returnProperties, ILoadable persister, string suffix)
12-
: base(returnProperties, persister, suffix) {}
11+
public ColumnEntityAliases(IDictionary<string, string[]> returnProperties, ILoadable persister)
12+
: base(returnProperties, persister, null) {}
1313

1414
protected override string[] GetIdentifierAliases(ILoadable persister, string suffix)
1515
{

0 commit comments

Comments
 (0)