Skip to content

Commit a602b00

Browse files
committed
NH-4043 - Use Dialect.Keywords for auto-quoting.
settings.IsKeywordsImportEnabled was supposed to import from the driver, not settings.IsAutoQuoteEnabled.
1 parent 9eda5b3 commit a602b00

File tree

5 files changed

+57
-24
lines changed

5 files changed

+57
-24
lines changed

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,8 @@ public void ExplicitAutoQuote()
157157
configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
158158
GetType().Assembly);
159159

160-
SchemaMetadataUpdater.QuoteTableAndColumns(configuration);
160+
var dialect = Dialect.Dialect.GetDialect(configuration.GetDerivedProperties());
161+
SchemaMetadataUpdater.QuoteTableAndColumns(configuration, dialect);
161162

162163
var cm = configuration.GetClassMapping(typeof(Order));
163164
Assert.That(cm.Table.IsQuoted);
@@ -258,7 +259,8 @@ public void WhenConfiguredOnlyExplicitAutoQuote()
258259
configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
259260
GetType().Assembly);
260261

261-
SchemaMetadataUpdater.QuoteTableAndColumns(configuration);
262+
var dialect = Dialect.Dialect.GetDialect(configuration.GetDerivedProperties());
263+
SchemaMetadataUpdater.QuoteTableAndColumns(configuration, dialect);
262264

263265
var cm = configuration.GetClassMapping(typeof(Order));
264266
Assert.That(cm.Table.IsQuoted);

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);
204+
SchemaMetadataUpdater.QuoteTableAndColumns(cfg, this.Dialect);
205205
}
206206
}
207207
catch (NotSupportedException)

src/NHibernate/Tool/hbm2ddl/SchemaExport.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,16 @@ private void Initialize()
5656
{
5757
return;
5858
}
59+
dialect = Dialect.Dialect.GetDialect(configProperties);
60+
5961
string autoKeyWordsImport = PropertiesHelper.GetString(Environment.Hbm2ddlKeyWords, configProperties, "not-defined");
6062
autoKeyWordsImport = autoKeyWordsImport.ToLowerInvariant();
6163
if (autoKeyWordsImport == Hbm2DDLKeyWords.AutoQuote)
6264
{
63-
SchemaMetadataUpdater.QuoteTableAndColumns(cfg);
65+
SchemaMetadataUpdater.Update(cfg, dialect);
66+
SchemaMetadataUpdater.QuoteTableAndColumns(cfg, dialect);
6467
}
6568

66-
dialect = Dialect.Dialect.GetDialect(configProperties);
6769
dropSQL = cfg.GenerateDropSchemaScript(dialect);
6870
createSQL = cfg.GenerateSchemaCreationScript(dialect);
6971
formatter = (PropertiesHelper.GetBoolean(Environment.FormatSql, configProperties, true) ? FormatStyle.Ddl : FormatStyle.None).Formatter;

src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs

Lines changed: 46 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,39 @@
1+
using System;
12
using NHibernate.Cfg;
23
using NHibernate.Engine;
34
using NHibernate.Mapping;
45
using System.Collections.Generic;
6+
using NHibernate.Connection;
57

68
namespace NHibernate.Tool.hbm2ddl
79
{
810
// Candidate to be exstensions of ISessionFactory and Configuration
911
public static class SchemaMetadataUpdater
1012
{
11-
public static void Update(ISessionFactory sessionFactory)
13+
public static void Update(ISessionFactoryImplementor sessionFactory)
1214
{
13-
var factory = (ISessionFactoryImplementor) sessionFactory;
14-
var dialect = factory.Dialect;
15-
var connectionHelper = new SuppliedConnectionProviderConnectionHelper(factory.ConnectionProvider);
16-
factory.Dialect.Keywords.UnionWith(GetReservedWords(dialect, connectionHelper));
15+
var reservedWords = GetReservedWords(sessionFactory.ConnectionProvider, sessionFactory.Dialect);
16+
sessionFactory.Dialect.Keywords.UnionWith(reservedWords);
1717
}
1818

19+
public static void Update(Configuration configuration, Dialect.Dialect dialect)
20+
{
21+
dialect.Keywords.UnionWith(GetReservedWords(configuration, dialect));
22+
}
23+
24+
[Obsolete("Use the overload that passes dialect so keywords will be updated and persisted before auto-quoting")]
1925
public static void QuoteTableAndColumns(Configuration configuration)
2026
{
21-
ISet<string> reservedDb = GetReservedWords(configuration.GetDerivedProperties());
27+
// Instantiates a new instance of the dialect so doesn't benefit from the Update call.
28+
var dialect = Dialect.Dialect.GetDialect(configuration.GetDerivedProperties());
29+
Update(configuration, dialect);
30+
QuoteTableAndColumns(configuration, dialect);
31+
}
32+
33+
public static void QuoteTableAndColumns(Configuration configuration, Dialect.Dialect dialect)
34+
{
35+
ISet<string> reservedDb = dialect.Keywords;
36+
2237
foreach (var cm in configuration.ClassMappings)
2338
{
2439
QuoteTable(cm.Table, reservedDb);
@@ -29,30 +44,43 @@ public static void QuoteTableAndColumns(Configuration configuration)
2944
}
3045
}
3146

32-
private static ISet<string> GetReservedWords(IDictionary<string, string> cfgProperties)
47+
private static ISet<string> GetReservedWords(Configuration configuration, Dialect.Dialect dialect)
3348
{
34-
var dialect = Dialect.Dialect.GetDialect(cfgProperties);
35-
var connectionHelper = new ManagedProviderConnectionHelper(cfgProperties);
36-
return GetReservedWords(dialect, connectionHelper);
49+
IConnectionHelper connectionHelper = new ManagedProviderConnectionHelper(configuration.GetDerivedProperties());
50+
connectionHelper.Prepare();
51+
try
52+
{
53+
return GetReservedWords(dialect, connectionHelper);
54+
}
55+
finally
56+
{
57+
connectionHelper.Release();
58+
}
3759
}
3860

39-
private static ISet<string> GetReservedWords(Dialect.Dialect dialect, IConnectionHelper connectionHelper)
61+
private static ISet<string> GetReservedWords(IConnectionProvider connectionProvider, Dialect.Dialect dialect)
4062
{
41-
ISet<string> reservedDb = new HashSet<string>();
63+
IConnectionHelper connectionHelper = new SuppliedConnectionProviderConnectionHelper(connectionProvider);
4264
connectionHelper.Prepare();
4365
try
4466
{
45-
var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
46-
foreach (var rw in metaData.GetReservedWords())
47-
{
48-
reservedDb.Add(rw.ToLowerInvariant());
49-
}
67+
return GetReservedWords(dialect, connectionHelper);
5068
}
5169
finally
5270
{
5371
connectionHelper.Release();
5472
}
55-
return reservedDb;
73+
}
74+
75+
private static ISet<string> GetReservedWords(Dialect.Dialect dialect, IConnectionHelper connectionHelper)
76+
{
77+
ISet<string> reservedWords = new HashSet<string>(dialect.Keywords);
78+
var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
79+
foreach (var rw in metaData.GetReservedWords())
80+
{
81+
reservedWords.Add(rw.ToLowerInvariant());
82+
}
83+
return reservedWords;
5684
}
5785

5886
private static void QuoteTable(Table table, ICollection<string> reservedDb)

src/NHibernate/Tool/hbm2ddl/SchemaUpdate.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ public void Execute(Action<string> scriptAction, bool doUpdate)
141141
autoKeyWordsImport = autoKeyWordsImport.ToLowerInvariant();
142142
if (autoKeyWordsImport == Hbm2DDLKeyWords.AutoQuote)
143143
{
144-
SchemaMetadataUpdater.QuoteTableAndColumns(configuration);
144+
SchemaMetadataUpdater.Update(configuration, dialect);
145+
SchemaMetadataUpdater.QuoteTableAndColumns(configuration, dialect);
145146
}
146147

147148
DbConnection connection;

0 commit comments

Comments
 (0)