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