1
+ using System ;
1
2
using System . Collections . Generic ;
3
+ using System . Linq ;
2
4
using NHibernate . Persister . Entity ;
3
- using NHibernate . Util ;
4
5
5
6
namespace NHibernate . Loader
6
7
{
@@ -15,43 +16,26 @@ public class DefaultEntityAliases : IEntityAliases
15
16
private readonly string [ ] [ ] suffixedPropertyColumns ;
16
17
private readonly string suffixedDiscriminatorColumn ;
17
18
private readonly string suffix ;
18
- private readonly string rowIdAlias ;
19
+ private string rowIdAlias ;
19
20
private readonly IDictionary < string , string [ ] > userProvidedAliases ;
20
21
21
22
public DefaultEntityAliases ( ILoadable persister , string suffix )
22
- : this ( CollectionHelper . EmptyDictionary < string , string [ ] > ( ) , persister , suffix ) { }
23
+ : this ( null , persister , suffix ) { }
23
24
24
25
/// <summary>
25
26
/// Calculate and cache select-clause suffixes.
26
27
/// </summary>
27
28
public DefaultEntityAliases ( IDictionary < string , string [ ] > userProvidedAliases , ILoadable persister , string suffix )
28
29
{
29
30
this . suffix = suffix ;
30
- this . userProvidedAliases = userProvidedAliases ;
31
+ this . userProvidedAliases = userProvidedAliases ? . Count > 0 ? userProvidedAliases : null ;
31
32
32
- string [ ] keyColumnsCandidates = GetUserProvidedAliases ( persister . IdentifierPropertyName , null ) ;
33
- if ( keyColumnsCandidates == null )
34
- {
35
- suffixedKeyColumns = GetUserProvidedAliases ( EntityPersister . EntityID , GetIdentifierAliases ( persister , suffix ) ) ;
36
- }
37
- else
38
- {
39
- suffixedKeyColumns = keyColumnsCandidates ;
40
- }
41
- Intern ( suffixedKeyColumns ) ;
33
+ suffixedKeyColumns = GetSuffixedKeyAliases ( persister , suffix ) ;
42
34
43
35
suffixedPropertyColumns = GetSuffixedPropertyAliases ( persister ) ;
44
- suffixedDiscriminatorColumn =
45
- GetUserProvidedAlias ( AbstractEntityPersister . EntityClass , GetDiscriminatorAlias ( persister , suffix ) ) ;
46
- if ( persister . IsVersioned )
47
- {
48
- suffixedVersionColumn = suffixedPropertyColumns [ persister . VersionProperty ] ;
49
- }
50
- else
51
- {
52
- suffixedVersionColumn = null ;
53
- }
54
- rowIdAlias = Loadable . RowIdAlias + suffix ; // TODO: not visible to the user!
36
+ suffixedDiscriminatorColumn = GetSuffixedDiscriminatorAlias ( persister , suffix ) ;
37
+
38
+ suffixedVersionColumn = persister . IsVersioned ? suffixedPropertyColumns [ persister . VersionProperty ] : null ;
55
39
}
56
40
57
41
protected virtual string GetDiscriminatorAlias ( ILoadable persister , string suffix )
@@ -69,12 +53,20 @@ protected virtual string[] GetPropertyAliases(ILoadable persister, int j)
69
53
return persister . GetPropertyAliases ( suffix , j ) ;
70
54
}
71
55
72
- private string [ ] GetUserProvidedAliases ( string propertyPath , string [ ] defaultAliases )
56
+ /// <summary>
57
+ /// Returns default aliases for all the properties
58
+ /// </summary>
59
+ protected string [ ] [ ] GetPropertiesAliases ( ILoadable persister )
60
+ {
61
+ return Enumerable . Range ( 0 , persister . PropertyNames . Length ) . Select ( i => GetPropertyAliases ( persister , i ) ) . ToArray ( ) ;
62
+ }
63
+
64
+ private string [ ] GetUserProvidedAliases ( string propertyPath , Func < string [ ] > getDefaultAliases )
73
65
{
74
66
string [ ] result = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
75
67
if ( result == null )
76
68
{
77
- return defaultAliases ;
69
+ return getDefaultAliases ( ) ;
78
70
}
79
71
else
80
72
{
@@ -89,27 +81,47 @@ private string[] GetUserProvidedAlias(string propertyPath)
89
81
return result ;
90
82
}
91
83
92
- private string GetUserProvidedAlias ( string propertyPath , string defaultAlias )
84
+ private string GetUserProvidedAlias ( string propertyPath , Func < string > getDefaultAlias )
93
85
{
94
86
string [ ] columns = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
95
87
if ( columns == null )
96
88
{
97
- return defaultAlias ;
89
+ return getDefaultAlias ( ) ;
98
90
}
99
91
else
100
92
{
101
93
return columns [ 0 ] ;
102
94
}
103
95
}
104
96
97
+ private string GetSuffixedDiscriminatorAlias ( ILoadable persister , string suffix )
98
+ {
99
+ if ( userProvidedAliases == null )
100
+ return GetDiscriminatorAlias ( persister , suffix ) ;
101
+
102
+ return GetUserProvidedAlias ( AbstractEntityPersister . EntityClass , ( ) => GetDiscriminatorAlias ( persister , suffix ) ) ;
103
+ }
104
+
105
+ private string [ ] GetSuffixedKeyAliases ( ILoadable persister , string suffix )
106
+ {
107
+ if ( userProvidedAliases == null )
108
+ return GetIdentifierAliases ( persister , suffix ) ;
109
+
110
+ return GetUserProvidedAliases (
111
+ persister . IdentifierPropertyName ,
112
+ ( ) => GetUserProvidedAliases ( EntityPersister . EntityID , ( ) => GetIdentifierAliases ( persister , suffix ) ) ) ;
113
+ }
114
+
105
115
public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
106
116
{
117
+ if ( userProvidedAliases == null )
118
+ return GetPropertiesAliases ( persister ) ;
119
+
107
120
int size = persister . PropertyNames . Length ;
108
121
string [ ] [ ] suffixedPropertyAliases = new string [ size ] [ ] ;
109
122
for ( int j = 0 ; j < size ; j ++ )
110
123
{
111
- suffixedPropertyAliases [ j ] = GetUserProvidedAliases ( persister . PropertyNames [ j ] , GetPropertyAliases ( persister , j ) ) ;
112
- Intern ( suffixedPropertyAliases [ j ] ) ;
124
+ suffixedPropertyAliases [ j ] = GetUserProvidedAliases ( persister . PropertyNames [ j ] , ( ) => GetPropertyAliases ( persister , j ) ) ;
113
125
}
114
126
return suffixedPropertyAliases ;
115
127
}
@@ -136,15 +148,8 @@ public string[] SuffixedKeyAliases
136
148
137
149
public string RowIdAlias
138
150
{
139
- get { return rowIdAlias ; }
140
- }
141
-
142
- private static void Intern ( string [ ] strings )
143
- {
144
- for ( int i = 0 ; i < strings . Length ; i ++ )
145
- {
146
- strings [ i ] = StringHelper . InternedIfPossible ( strings [ i ] ) ;
147
- }
151
+ // TODO: not visible to the user!
152
+ get { return rowIdAlias ?? ( rowIdAlias = Loadable . RowIdAlias + suffix ) ; }
148
153
}
149
154
}
150
155
}
0 commit comments