1+ using System ;
12using System . Collections . Generic ;
3+ using System . Linq ;
24using NHibernate . Persister . Entity ;
3- using NHibernate . Util ;
45
56namespace NHibernate . Loader
67{
@@ -15,43 +16,26 @@ public class DefaultEntityAliases : IEntityAliases
1516 private readonly string [ ] [ ] suffixedPropertyColumns ;
1617 private readonly string suffixedDiscriminatorColumn ;
1718 private readonly string suffix ;
18- private readonly string rowIdAlias ;
19+ private string rowIdAlias ;
1920 private readonly IDictionary < string , string [ ] > userProvidedAliases ;
2021
2122 public DefaultEntityAliases ( ILoadable persister , string suffix )
22- : this ( CollectionHelper . EmptyDictionary < string , string [ ] > ( ) , persister , suffix ) { }
23+ : this ( null , persister , suffix ) { }
2324
2425 /// <summary>
2526 /// Calculate and cache select-clause suffixes.
2627 /// </summary>
2728 public DefaultEntityAliases ( IDictionary < string , string [ ] > userProvidedAliases , ILoadable persister , string suffix )
2829 {
2930 this . suffix = suffix ;
30- this . userProvidedAliases = userProvidedAliases ;
31+ this . userProvidedAliases = userProvidedAliases ? . Count > 0 ? userProvidedAliases : null ;
3132
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 ) ;
4234
4335 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 ;
5539 }
5640
5741 protected virtual string GetDiscriminatorAlias ( ILoadable persister , string suffix )
@@ -69,12 +53,20 @@ protected virtual string[] GetPropertyAliases(ILoadable persister, int j)
6953 return persister . GetPropertyAliases ( suffix , j ) ;
7054 }
7155
72- private string [ ] GetUserProvidedAliases ( string propertyPath , string [ ] defaultAliases )
56+ /// <summary>
57+ /// Returns default aliases for all the properties
58+ /// </summary>
59+ protected string [ ] [ ] GetPropertyAliases ( ILoadable persister )
60+ {
61+ return persister . PropertyNames . Select ( ( pn , i ) => GetPropertyAliases ( persister , i ) ) . ToArray ( ) ;
62+ }
63+
64+ private string [ ] GetUserProvidedAliases ( string propertyPath , Func < string [ ] > getDefaultAliases )
7365 {
7466 string [ ] result = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
7567 if ( result == null )
7668 {
77- return defaultAliases ;
69+ return getDefaultAliases ( ) ;
7870 }
7971 else
8072 {
@@ -89,27 +81,47 @@ private string[] GetUserProvidedAlias(string propertyPath)
8981 return result ;
9082 }
9183
92- private string GetUserProvidedAlias ( string propertyPath , string defaultAlias )
84+ private string GetUserProvidedAlias ( string propertyPath , Func < string > getDefaultAlias )
9385 {
9486 string [ ] columns = propertyPath == null ? null : GetUserProvidedAlias ( propertyPath ) ;
9587 if ( columns == null )
9688 {
97- return defaultAlias ;
89+ return getDefaultAlias ( ) ;
9890 }
9991 else
10092 {
10193 return columns [ 0 ] ;
10294 }
10395 }
10496
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+
105115 public string [ ] [ ] GetSuffixedPropertyAliases ( ILoadable persister )
106116 {
117+ if ( userProvidedAliases == null )
118+ return GetPropertyAliases ( persister ) ;
119+
107120 int size = persister . PropertyNames . Length ;
108121 string [ ] [ ] suffixedPropertyAliases = new string [ size ] [ ] ;
109122 for ( int j = 0 ; j < size ; j ++ )
110123 {
111- suffixedPropertyAliases [ j ] = GetUserProvidedAliases ( persister . PropertyNames [ j ] , GetPropertyAliases ( persister , j ) ) ;
112- Intern ( suffixedPropertyAliases [ j ] ) ;
124+ suffixedPropertyAliases [ j ] = GetUserProvidedAliases ( persister . PropertyNames [ j ] , ( ) => GetPropertyAliases ( persister , j ) ) ;
113125 }
114126 return suffixedPropertyAliases ;
115127 }
@@ -136,15 +148,8 @@ public string[] SuffixedKeyAliases
136148
137149 public string RowIdAlias
138150 {
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 ) ; }
148153 }
149154 }
150155}
0 commit comments