1
+ using System ;
1
2
using System . Collections . Generic ;
2
3
using System . Linq ;
3
- using NHibernate . Cfg ;
4
+ using NHibernate . Dialect ;
5
+ using NHibernate . Driver ;
4
6
using NHibernate . Engine ;
5
7
using NHibernate . Mapping ;
6
8
using NHibernate . Tool . hbm2ddl ;
7
9
using NUnit . Framework ;
10
+ using Environment = NHibernate . Cfg . Environment ;
8
11
9
12
namespace NHibernate . Test . Tools . hbm2ddl . SchemaMetadataUpdaterTest
10
13
{
@@ -23,8 +26,8 @@ public void CanRetrieveReservedWords()
23
26
var metaData = dialect . GetDataBaseSchema ( connectionHelper . Connection ) ;
24
27
var reserved = metaData . GetReservedWords ( ) ;
25
28
Assert . That ( reserved , Is . Not . Empty ) ;
26
- Assert . That ( reserved , Has . Member ( "SELECT" ) ) ;
27
- Assert . That ( reserved , Has . Member ( "FROM" ) ) ;
29
+ Assert . That ( reserved , Has . Member ( "SELECT" ) . IgnoreCase ) ;
30
+ Assert . That ( reserved , Has . Member ( "FROM" ) . IgnoreCase ) ;
28
31
}
29
32
finally
30
33
{
@@ -35,7 +38,7 @@ public void CanRetrieveReservedWords()
35
38
[ Test ]
36
39
public void UpdateReservedWordsInDialect ( )
37
40
{
38
- var reservedDb = new HashSet < string > ( ) ;
41
+ var reservedDb = new HashSet < string > ( StringComparer . OrdinalIgnoreCase ) ;
39
42
var configuration = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
40
43
var dialect = Dialect . Dialect . GetDialect ( configuration . Properties ) ;
41
44
var connectionHelper = new ManagedProviderConnectionHelper ( configuration . Properties ) ;
@@ -55,25 +58,118 @@ public void UpdateReservedWordsInDialect()
55
58
56
59
var sf = ( ISessionFactoryImplementor ) configuration . BuildSessionFactory ( ) ;
57
60
SchemaMetadataUpdater . Update ( sf ) ;
58
- var match = reservedDb . Intersect ( sf . Dialect . Keywords ) ;
61
+ var match = reservedDb . Intersect ( sf . Dialect . Keywords , StringComparer . OrdinalIgnoreCase ) ;
62
+
63
+ // tests that nothing in the first metaData.GetReservedWords() is left out of the second metaData.GetReservedWords() call.
64
+ // i.e. always passes.
65
+ Assert . That ( match , Is . EquivalentTo ( reservedDb ) ) ;
66
+ }
67
+
68
+ [ Test ]
69
+ public void EnsureReservedWordsHardCodedInDialect ( )
70
+ {
71
+ var reservedDb = new HashSet < string > ( ) ;
72
+ var configuration = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
73
+ var dialect = Dialect . Dialect . GetDialect ( configuration . Properties ) ;
74
+ var connectionHelper = new ManagedProviderConnectionHelper ( configuration . Properties ) ;
75
+ connectionHelper . Prepare ( ) ;
76
+ try
77
+ {
78
+ var metaData = dialect . GetDataBaseSchema ( connectionHelper . Connection ) ;
79
+ foreach ( var rw in metaData . GetReservedWords ( ) )
80
+ {
81
+ if ( rw . Contains ( " " ) ) continue ;
82
+ reservedDb . Add ( rw . ToLowerInvariant ( ) ) ;
83
+ }
84
+ }
85
+ finally
86
+ {
87
+ connectionHelper . Release ( ) ;
88
+ }
89
+
90
+ var sf = ( ISessionFactoryImplementor ) configuration . BuildSessionFactory ( ) ;
91
+
92
+ // use the dialect as configured, with no update
93
+ var match = reservedDb . Intersect ( sf . Dialect . Keywords ) . ToList ( ) ;
94
+
95
+ // tests that nothing in metaData.GetReservedWords() is left out of the Dialect.Keywords (without a refresh).
96
+ var differences = reservedDb . Except ( match ) . ToList ( ) ;
97
+ if ( differences . Count > 0 )
98
+ {
99
+ Console . WriteLine ( "Update Dialect {0} with RegisterKeyword:" , sf . Dialect . GetType ( ) . Name ) ;
100
+ foreach ( var keyword in differences . OrderBy ( x => x ) )
101
+ {
102
+ Console . WriteLine ( " RegisterKeyword(\" {0}\" );" , keyword ) ;
103
+ }
104
+ }
105
+
106
+ if ( sf . ConnectionProvider . Driver is OdbcDriver )
107
+ {
108
+ Assert . Inconclusive ( "ODBC has excess keywords reserved" ) ;
109
+ }
110
+
59
111
Assert . That ( match , Is . EquivalentTo ( reservedDb ) ) ;
60
112
}
61
113
114
+ [ Test , Explicit ]
115
+ public void CheckForExcessReservedWordsHardCodedInDialect ( )
116
+ {
117
+ var reservedDb = new HashSet < string > ( ) ;
118
+ var configuration = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
119
+ var dialect = Dialect . Dialect . GetDialect ( configuration . Properties ) ;
120
+ var connectionHelper = new ManagedProviderConnectionHelper ( configuration . Properties ) ;
121
+ connectionHelper . Prepare ( ) ;
122
+ try
123
+ {
124
+ var metaData = dialect . GetDataBaseSchema ( connectionHelper . Connection ) ;
125
+ foreach ( var rw in metaData . GetReservedWords ( ) )
126
+ {
127
+ reservedDb . Add ( rw . ToLowerInvariant ( ) ) ;
128
+ }
129
+ }
130
+ finally
131
+ {
132
+ connectionHelper . Release ( ) ;
133
+ }
134
+
135
+ var sf = ( ISessionFactoryImplementor ) configuration . BuildSessionFactory ( ) ;
136
+
137
+ // use the dialect as configured, with no update
138
+ // tests that nothing in Dialect.Keyword is not in metaData.GetReservedWords()
139
+ var differences = sf . Dialect . Keywords . Except ( reservedDb ) . Except ( AnsiSqlKeywords . Sql2003 ) . ToList ( ) ;
140
+ if ( differences . Count > 0 )
141
+ {
142
+ Console . WriteLine ( "Excess RegisterKeyword in Dialect {0}:" , sf . Dialect . GetType ( ) . Name ) ;
143
+ foreach ( var keyword in differences . OrderBy ( x => x ) )
144
+ {
145
+ Console . WriteLine ( " RegisterKeyword(\" {0}\" );" , keyword ) ;
146
+ }
147
+ }
148
+
149
+ // Don't fail incase the driver returns nothing.
150
+ // This is an info-only test.
151
+ }
152
+
62
153
[ Test ]
63
154
public void ExplicitAutoQuote ( )
64
155
{
65
156
var configuration = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
66
157
configuration . AddResource ( "NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml" ,
67
158
GetType ( ) . Assembly ) ;
68
159
69
- SchemaMetadataUpdater . QuoteTableAndColumns ( configuration ) ;
160
+ var dialect = Dialect . Dialect . GetDialect ( configuration . GetDerivedProperties ( ) ) ;
161
+ dialect . Keywords . Add ( "Abracadabra" ) ;
162
+
163
+ SchemaMetadataUpdater . Update ( configuration , dialect ) ;
164
+ SchemaMetadataUpdater . QuoteTableAndColumns ( configuration , dialect ) ;
70
165
71
166
var cm = configuration . GetClassMapping ( typeof ( Order ) ) ;
72
167
Assert . That ( cm . Table . IsQuoted ) ;
73
168
var culs = new List < Column > ( cm . Table . ColumnIterator ) ;
74
169
Assert . That ( GetColumnByName ( culs , "From" ) . IsQuoted ) ;
75
170
Assert . That ( GetColumnByName ( culs , "And" ) . IsQuoted ) ;
76
171
Assert . That ( GetColumnByName ( culs , "Select" ) . IsQuoted ) ;
172
+ Assert . That ( GetColumnByName ( culs , "Abracadabra" ) . IsQuoted ) ;
77
173
Assert . That ( ! GetColumnByName ( culs , "Name" ) . IsQuoted ) ;
78
174
}
79
175
@@ -97,7 +193,7 @@ public void AutoQuoteTableAndColumnsAtStratup()
97
193
[ Test ]
98
194
public void AutoQuoteTableAndColumnsAtStratupIncludeKeyWordsImport ( )
99
195
{
100
- var reservedDb = new HashSet < string > ( ) ;
196
+ var reservedDb = new HashSet < string > ( StringComparer . OrdinalIgnoreCase ) ;
101
197
var configuration = TestConfigurationHelper . GetDefaultConfiguration ( ) ;
102
198
var dialect = Dialect . Dialect . GetDialect ( configuration . Properties ) ;
103
199
var connectionHelper = new ManagedProviderConnectionHelper ( configuration . Properties ) ;
@@ -119,8 +215,8 @@ public void AutoQuoteTableAndColumnsAtStratupIncludeKeyWordsImport()
119
215
configuration . AddResource ( "NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml" ,
120
216
GetType ( ) . Assembly ) ;
121
217
var sf = ( ISessionFactoryImplementor ) configuration . BuildSessionFactory ( ) ;
122
- var match = reservedDb . Intersect ( sf . Dialect . Keywords ) ;
123
- Assert . That ( match , Is . EquivalentTo ( reservedDb ) ) ;
218
+ var match = reservedDb . Intersect ( sf . Dialect . Keywords , StringComparer . OrdinalIgnoreCase ) ;
219
+ Assert . That ( match , Is . EquivalentTo ( reservedDb ) . IgnoreCase ) ;
124
220
}
125
221
126
222
private static Column GetColumnByName ( IEnumerable < Column > columns , string colName )
@@ -167,14 +263,19 @@ public void WhenConfiguredOnlyExplicitAutoQuote()
167
263
configuration . AddResource ( "NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml" ,
168
264
GetType ( ) . Assembly ) ;
169
265
170
- SchemaMetadataUpdater . QuoteTableAndColumns ( configuration ) ;
266
+ var dialect = Dialect . Dialect . GetDialect ( configuration . GetDerivedProperties ( ) ) ;
267
+ dialect . Keywords . Add ( "Abracadabra" ) ;
268
+
269
+ SchemaMetadataUpdater . Update ( configuration , dialect ) ;
270
+ SchemaMetadataUpdater . QuoteTableAndColumns ( configuration , dialect ) ;
171
271
172
272
var cm = configuration . GetClassMapping ( typeof ( Order ) ) ;
173
273
Assert . That ( cm . Table . IsQuoted ) ;
174
274
var culs = new List < Column > ( cm . Table . ColumnIterator ) ;
175
275
Assert . That ( GetColumnByName ( culs , "From" ) . IsQuoted ) ;
176
276
Assert . That ( GetColumnByName ( culs , "And" ) . IsQuoted ) ;
177
277
Assert . That ( GetColumnByName ( culs , "Select" ) . IsQuoted ) ;
278
+ Assert . That ( GetColumnByName ( culs , "Abracadabra" ) . IsQuoted ) ;
178
279
Assert . That ( ! GetColumnByName ( culs , "Name" ) . IsQuoted ) ;
179
280
}
180
281
}
0 commit comments