1
1
using System . Collections . Generic ;
2
2
using NHibernate . Persister . Entity ;
3
- using NHibernate . Util ;
4
3
5
4
namespace NHibernate . Loader
6
5
{
@@ -10,48 +9,75 @@ namespace NHibernate.Loader
10
9
/// </summary>
11
10
public class DefaultEntityAliases : IEntityAliases
12
11
{
13
- private readonly string [ ] suffixedKeyColumns ;
14
- private readonly string [ ] suffixedVersionColumn ;
15
- private readonly string [ ] [ ] suffixedPropertyColumns ;
16
- private readonly string suffixedDiscriminatorColumn ;
17
- private readonly string suffix ;
18
- private readonly string rowIdAlias ;
19
- private readonly IDictionary < string , string [ ] > userProvidedAliases ;
12
+ private readonly string _suffix ;
13
+ private readonly IDictionary < string , string [ ] > _userProvidedAliases ;
14
+ private string _rowIdAlias ;
20
15
21
16
public DefaultEntityAliases ( ILoadable persister , string suffix )
22
- : this ( CollectionHelper . EmptyDictionary < string , string [ ] > ( ) , persister , suffix ) { }
17
+ : this ( null , persister , suffix )
18
+ {
19
+ }
23
20
24
21
/// <summary>
25
- /// Calculate and cache select-clause suffixes .
22
+ /// Calculate and cache select-clause aliases .
26
23
/// </summary>
27
24
public DefaultEntityAliases ( IDictionary < string , string [ ] > userProvidedAliases , ILoadable persister , string suffix )
28
25
{
29
- this . suffix = suffix ;
30
- this . userProvidedAliases = userProvidedAliases ;
26
+ _suffix = suffix ;
27
+ _userProvidedAliases = userProvidedAliases ? . Count > 0 ? userProvidedAliases : null ;
31
28
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 ) ;
29
+ SuffixedKeyAliases = DetermineKeyAliases ( persister ) ;
30
+ SuffixedPropertyAliases = DeterminePropertyAliases ( persister ) ;
31
+ SuffixedDiscriminatorAlias = DetermineDiscriminatorAlias ( persister ) ;
32
+
33
+ SuffixedVersionAliases = persister . IsVersioned ? SuffixedPropertyAliases [ persister . VersionProperty ] : null ;
34
+ //rowIdAlias is generated on demand in property
35
+ }
42
36
43
- suffixedPropertyColumns = GetSuffixedPropertyAliases ( persister ) ;
44
- suffixedDiscriminatorColumn =
45
- GetUserProvidedAlias ( AbstractEntityPersister . EntityClass , GetDiscriminatorAlias ( persister , suffix ) ) ;
46
- if ( persister . IsVersioned )
37
+ /// <summary>
38
+ /// Returns aliases for subclass persister
39
+ /// </summary>
40
+ public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
41
+ {
42
+ if ( _userProvidedAliases == null )
43
+ return GetAllPropertyAliases ( persister ) ;
44
+
45
+ var propertyNames = persister . PropertyNames ;
46
+ var suffixedPropertyAliases = new string [ propertyNames . Length ] [ ] ;
47
+ for ( var i = 0 ; i < propertyNames . Length ; i ++ )
47
48
{
48
- suffixedVersionColumn = suffixedPropertyColumns [ persister . VersionProperty ] ;
49
+ suffixedPropertyAliases [ i ] =
50
+ SafeGetUserProvidedAliases ( propertyNames [ i ] ) ??
51
+ GetPropertyAliases ( persister , i ) ;
49
52
}
50
- else
53
+
54
+ return suffixedPropertyAliases ;
55
+ }
56
+
57
+ public string [ ] SuffixedVersionAliases { get ; }
58
+
59
+ public string [ ] [ ] SuffixedPropertyAliases { get ; }
60
+
61
+ public string SuffixedDiscriminatorAlias { get ; }
62
+
63
+ public string [ ] SuffixedKeyAliases { get ; }
64
+
65
+ // TODO: not visible to the user!
66
+ public string RowIdAlias => _rowIdAlias ?? ( _rowIdAlias = Loadable . RowIdAlias + _suffix ) ;
67
+
68
+ /// <summary>
69
+ /// Returns default aliases for all the properties
70
+ /// </summary>
71
+ private string [ ] [ ] GetAllPropertyAliases ( ILoadable persister )
72
+ {
73
+ var propertyNames = persister . PropertyNames ;
74
+ var suffixedPropertyAliases = new string [ propertyNames . Length ] [ ] ;
75
+ for ( var i = 0 ; i < propertyNames . Length ; i ++ )
51
76
{
52
- suffixedVersionColumn = null ;
77
+ suffixedPropertyAliases [ i ] = GetPropertyAliases ( persister , i ) ;
53
78
}
54
- rowIdAlias = Loadable . RowIdAlias + suffix ; // TODO: not visible to the user!
79
+
80
+ return suffixedPropertyAliases ;
55
81
}
56
82
57
83
protected virtual string GetDiscriminatorAlias ( ILoadable persister , string suffix )
@@ -66,85 +92,52 @@ protected virtual string[] GetIdentifierAliases(ILoadable persister, string suff
66
92
67
93
protected virtual string [ ] GetPropertyAliases ( ILoadable persister , int j )
68
94
{
69
- return persister . GetPropertyAliases ( suffix , j ) ;
95
+ return persister . GetPropertyAliases ( _suffix , j ) ;
70
96
}
71
97
72
- private string [ ] GetUserProvidedAliases ( string propertyPath , string [ ] defaultAliases )
98
+ private string [ ] DetermineKeyAliases ( ILoadable persister )
73
99
{
74
- string [ ] result = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
75
- if ( result == null )
100
+ if ( _userProvidedAliases != null )
76
101
{
77
- return defaultAliases ;
78
- }
79
- else
80
- {
81
- return result ;
102
+ var result = SafeGetUserProvidedAliases ( persister . IdentifierPropertyName ) ??
103
+ GetUserProvidedAliases ( EntityPersister . EntityID ) ;
104
+
105
+ if ( result != null )
106
+ return result ;
82
107
}
83
- }
84
108
85
- private string [ ] GetUserProvidedAlias ( string propertyPath )
86
- {
87
- string [ ] result ;
88
- userProvidedAliases . TryGetValue ( propertyPath , out result ) ;
89
- return result ;
109
+ return GetIdentifierAliases ( persister , _suffix ) ;
90
110
}
91
-
92
- private string GetUserProvidedAlias ( string propertyPath , string defaultAlias )
111
+
112
+ private string [ ] [ ] DeterminePropertyAliases ( ILoadable persister )
93
113
{
94
- string [ ] columns = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
95
- if ( columns == null )
96
- {
97
- return defaultAlias ;
98
- }
99
- else
100
- {
101
- return columns [ 0 ] ;
102
- }
114
+ return GetSuffixedPropertyAliases ( persister ) ;
103
115
}
104
-
105
- public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
116
+
117
+ private string DetermineDiscriminatorAlias ( ILoadable persister )
106
118
{
107
- int size = persister . PropertyNames . Length ;
108
- string [ ] [ ] suffixedPropertyAliases = new string [ size ] [ ] ;
109
- for ( int j = 0 ; j < size ; j ++ )
119
+ if ( _userProvidedAliases != null )
110
120
{
111
- suffixedPropertyAliases [ j ] = GetUserProvidedAliases ( persister . PropertyNames [ j ] , GetPropertyAliases ( persister , j ) ) ;
112
- Intern ( suffixedPropertyAliases [ j ] ) ;
121
+ var columns = GetUserProvidedAliases ( AbstractEntityPersister . EntityClass ) ;
122
+ if ( columns != null )
123
+ return columns [ 0 ] ;
113
124
}
114
- return suffixedPropertyAliases ;
115
- }
116
125
117
- public string [ ] SuffixedVersionAliases
118
- {
119
- get { return suffixedVersionColumn ; }
126
+ return GetDiscriminatorAlias ( persister , _suffix ) ;
120
127
}
121
-
122
- public string [ ] [ ] SuffixedPropertyAliases
128
+
129
+ private string [ ] SafeGetUserProvidedAliases ( string propertyPath )
123
130
{
124
- get { return suffixedPropertyColumns ; }
125
- }
131
+ if ( propertyPath == null )
132
+ return null ;
126
133
127
- public string SuffixedDiscriminatorAlias
128
- {
129
- get { return suffixedDiscriminatorColumn ; }
130
- }
131
-
132
- public string [ ] SuffixedKeyAliases
133
- {
134
- get { return suffixedKeyColumns ; }
134
+ return GetUserProvidedAliases ( propertyPath ) ;
135
135
}
136
136
137
- public string RowIdAlias
137
+ private string [ ] GetUserProvidedAliases ( string propertyPath )
138
138
{
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
- }
139
+ _userProvidedAliases . TryGetValue ( propertyPath , out var result ) ;
140
+ return result ;
148
141
}
149
142
}
150
143
}
0 commit comments