Skip to content

Commit c73a7be

Browse files
committed
NH-4043 - Use case-insensitive HashSet for keywords.
1 parent db781ed commit c73a7be

File tree

4 files changed

+18
-18
lines changed

4 files changed

+18
-18
lines changed

src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void CanRetrieveReservedWords()
3838
[Test]
3939
public void UpdateReservedWordsInDialect()
4040
{
41-
var reservedDb = new HashSet<string>();
41+
var reservedDb = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
4242
var configuration = TestConfigurationHelper.GetDefaultConfiguration();
4343
var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
4444
var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
@@ -58,7 +58,7 @@ public void UpdateReservedWordsInDialect()
5858

5959
var sf = (ISessionFactoryImplementor) configuration.BuildSessionFactory();
6060
SchemaMetadataUpdater.Update(sf);
61-
var match = reservedDb.Intersect(sf.Dialect.Keywords);
61+
var match = reservedDb.Intersect(sf.Dialect.Keywords, StringComparer.OrdinalIgnoreCase);
6262

6363
// tests that nothing in the first metaData.GetReservedWords() is left out of the second metaData.GetReservedWords() call.
6464
// i.e. always passes.
@@ -68,7 +68,7 @@ public void UpdateReservedWordsInDialect()
6868
[Test]
6969
public void EnsureReservedWordsHardCodedInDialect()
7070
{
71-
var reservedDb = new HashSet<string>();
71+
var reservedDb = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
7272
var configuration = TestConfigurationHelper.GetDefaultConfiguration();
7373
var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
7474
var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
@@ -90,7 +90,7 @@ public void EnsureReservedWordsHardCodedInDialect()
9090
var sf = (ISessionFactoryImplementor)configuration.BuildSessionFactory();
9191

9292
// use the dialect as configured, with no update
93-
var match = reservedDb.Intersect(sf.Dialect.Keywords).ToList();
93+
var match = reservedDb.Intersect(sf.Dialect.Keywords, StringComparer.OrdinalIgnoreCase).ToList();
9494

9595
// tests that nothing in metaData.GetReservedWords() is left out of the Dialect.Keywords (without a refresh).
9696
var differences = reservedDb.Except(match).ToList();
@@ -99,7 +99,7 @@ public void EnsureReservedWordsHardCodedInDialect()
9999
Console.WriteLine("Update Dialect {0} with RegisterKeyword:", sf.Dialect.GetType().Name);
100100
foreach (var keyword in differences.OrderBy(x => x))
101101
{
102-
Console.WriteLine(" RegisterKeyword(\"{0}\");", keyword);
102+
Console.WriteLine(" RegisterKeyword(\"{0}\");", keyword.ToLowerInvariant());
103103
}
104104
}
105105

@@ -114,7 +114,7 @@ public void EnsureReservedWordsHardCodedInDialect()
114114
[Test]
115115
public void CheckForExcessReservedWordsHardCodedInDialect()
116116
{
117-
var reservedDb = new HashSet<string>();
117+
var reservedDb = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
118118
var configuration = TestConfigurationHelper.GetDefaultConfiguration();
119119
var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
120120
var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
@@ -124,7 +124,7 @@ public void CheckForExcessReservedWordsHardCodedInDialect()
124124
var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
125125
foreach (var rw in metaData.GetReservedWords())
126126
{
127-
reservedDb.Add(rw.ToLowerInvariant());
127+
reservedDb.Add(rw);
128128
}
129129
}
130130
finally
@@ -136,13 +136,13 @@ public void CheckForExcessReservedWordsHardCodedInDialect()
136136

137137
// use the dialect as configured, with no update
138138
// tests that nothing in Dialect.Keyword is not in metaData.GetReservedWords()
139-
var differences = sf.Dialect.Keywords.Except(reservedDb).Except(AnsiSqlKeywords.Sql2003).ToList();
139+
var differences = sf.Dialect.Keywords.Except(reservedDb, StringComparer.OrdinalIgnoreCase).Except(AnsiSqlKeywords.Sql2003, StringComparer.OrdinalIgnoreCase).ToList();
140140
if (differences.Count > 0)
141141
{
142142
Console.WriteLine("Excess RegisterKeyword in Dialect {0}:", sf.Dialect.GetType().Name);
143143
foreach (var keyword in differences.OrderBy(x => x))
144144
{
145-
Console.WriteLine(" RegisterKeyword(\"{0}\");", keyword);
145+
Console.WriteLine(" RegisterKeyword(\"{0}\");", keyword.ToLowerInvariant());
146146
}
147147
}
148148

@@ -189,7 +189,7 @@ public void AutoQuoteTableAndColumnsAtStratup()
189189
[Test]
190190
public void AutoQuoteTableAndColumnsAtStratupIncludeKeyWordsImport()
191191
{
192-
var reservedDb = new HashSet<string>();
192+
var reservedDb = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
193193
var configuration = TestConfigurationHelper.GetDefaultConfiguration();
194194
var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
195195
var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
@@ -211,8 +211,8 @@ public void AutoQuoteTableAndColumnsAtStratupIncludeKeyWordsImport()
211211
configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
212212
GetType().Assembly);
213213
var sf = (ISessionFactoryImplementor)configuration.BuildSessionFactory();
214-
var match = reservedDb.Intersect(sf.Dialect.Keywords);
215-
Assert.That(match, Is.EquivalentTo(reservedDb));
214+
var match = reservedDb.Intersect(sf.Dialect.Keywords, StringComparer.OrdinalIgnoreCase);
215+
Assert.That(match, Is.EquivalentTo(reservedDb).IgnoreCase);
216216
}
217217

218218
private static Column GetColumnByName(IEnumerable<Column> columns, string colName)

src/NHibernate/Dialect/Dialect.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ protected Dialect()
8282

8383
_sqlFunctions = CollectionHelper.CreateCaseInsensitiveHashtable(StandardAggregateFunctions);
8484

85-
_sqlKeywords = new HashSet<string>(AnsiSqlKeywords.Sql2003);
85+
_sqlKeywords = new HashSet<string>(AnsiSqlKeywords.Sql2003, StringComparer.OrdinalIgnoreCase);
8686

8787
// standard sql92 functions (can be overridden by subclasses)
8888
RegisterFunction("substring", new AnsiSubstringFunction());

src/NHibernate/Impl/SessionFactoryImpl.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ public SessionFactoryImpl(Configuration cfg, IMapping mapping, Settings settings
201201
}
202202
if (settings.IsAutoQuoteEnabled)
203203
{
204-
SchemaMetadataUpdater.QuoteTableAndColumns(cfg, this.Dialect);
204+
SchemaMetadataUpdater.QuoteTableAndColumns(cfg, Dialect);
205205
}
206206
}
207207
catch (NotSupportedException)

src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,24 +74,24 @@ private static ISet<string> GetReservedWords(IConnectionProvider connectionProvi
7474

7575
private static ISet<string> GetReservedWords(Dialect.Dialect dialect, IConnectionHelper connectionHelper)
7676
{
77-
ISet<string> reservedWords = new HashSet<string>(dialect.Keywords);
77+
ISet<string> reservedWords = new HashSet<string>(dialect.Keywords, StringComparer.OrdinalIgnoreCase);
7878
var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
7979
foreach (var rw in metaData.GetReservedWords())
8080
{
81-
reservedWords.Add(rw.ToLowerInvariant());
81+
reservedWords.Add(rw);
8282
}
8383
return reservedWords;
8484
}
8585

8686
private static void QuoteTable(Table table, ICollection<string> reservedDb)
8787
{
88-
if (!table.IsQuoted && reservedDb.Contains(table.Name.ToLowerInvariant()))
88+
if (!table.IsQuoted && reservedDb.Contains(table.Name))
8989
{
9090
table.Name = GetNhQuoted(table.Name);
9191
}
9292
foreach (var column in table.ColumnIterator)
9393
{
94-
if (!column.IsQuoted && reservedDb.Contains(column.Name.ToLowerInvariant()))
94+
if (!column.IsQuoted && reservedDb.Contains(column.Name))
9595
{
9696
column.Name = GetNhQuoted(column.Name);
9797
}

0 commit comments

Comments
 (0)