Skip to content

Commit 737e2c8

Browse files
authored
Cache Dialect in all public Configuration methods (#3399)
Wrap mapping usages in StaticDialectMappingWrapper Fixes #3397
1 parent 218379c commit 737e2c8

File tree

1 file changed

+19
-12
lines changed

1 file changed

+19
-12
lines changed

Diff for: src/NHibernate/Cfg/Configuration.cs

+19-12
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,14 @@ private class StaticDialectMappingWrapper : IMapping
246246
{
247247
private readonly IMapping _mapping;
248248

249-
public StaticDialectMappingWrapper(IMapping mapping)
249+
public StaticDialectMappingWrapper(IMapping mapping): this(mapping, mapping.Dialect)
250+
{
251+
}
252+
253+
public StaticDialectMappingWrapper(IMapping mapping, Dialect.Dialect dialect)
250254
{
251255
_mapping = mapping;
252-
Dialect = mapping.Dialect;
256+
Dialect = dialect;
253257
}
254258

255259
public IType GetIdentifierType(string className)
@@ -941,11 +945,12 @@ public string[] GenerateSchemaCreationScript(Dialect.Dialect dialect)
941945

942946
var script = new List<string>();
943947

948+
var staticDialectMapping = new StaticDialectMappingWrapper(mapping, dialect);
944949
foreach (var table in TableMappings)
945950
{
946951
if (table.IsPhysicalTable && IncludeAction(table.SchemaActions, SchemaAction.Export))
947952
{
948-
script.Add(table.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
953+
script.Add(table.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
949954
script.AddRange(table.SqlCommentStrings(dialect, defaultCatalog, defaultSchema));
950955
}
951956
}
@@ -958,7 +963,7 @@ public string[] GenerateSchemaCreationScript(Dialect.Dialect dialect)
958963
{
959964
foreach (var uk in table.UniqueKeyIterator)
960965
{
961-
string constraintString = uk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema);
966+
string constraintString = uk.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema);
962967
if (constraintString != null)
963968
{
964969
script.Add(constraintString);
@@ -968,7 +973,7 @@ public string[] GenerateSchemaCreationScript(Dialect.Dialect dialect)
968973

969974
foreach (var index in table.IndexIterator)
970975
{
971-
script.Add(index.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
976+
script.Add(index.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
972977
}
973978

974979
if (dialect.SupportsForeignKeyConstraintInAlterTable)
@@ -977,7 +982,7 @@ public string[] GenerateSchemaCreationScript(Dialect.Dialect dialect)
977982
{
978983
if (fk.IsGenerated(dialect) && IncludeAction(fk.ReferencedTable.SchemaActions, SchemaAction.Export))
979984
{
980-
script.Add(fk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
985+
script.Add(fk.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
981986
}
982987
}
983988
}
@@ -994,7 +999,7 @@ public string[] GenerateSchemaCreationScript(Dialect.Dialect dialect)
994999
{
9951000
if (auxDbObj.AppliesToDialect(dialect))
9961001
{
997-
script.Add(auxDbObj.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
1002+
script.Add(auxDbObj.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
9981003
}
9991004
}
10001005

@@ -2364,6 +2369,7 @@ public string[] GenerateSchemaUpdateScript(Dialect.Dialect dialect, IDatabaseMet
23642369
var defaultSchema = GetQuotedDefaultSchema(dialect);
23652370

23662371
var script = new List<string>(50);
2372+
var staticDialectMapping = new StaticDialectMappingWrapper(mapping, dialect);
23672373
foreach (var table in TableMappings)
23682374
{
23692375
if (table.IsPhysicalTable && IncludeAction(table.SchemaActions, SchemaAction.Update))
@@ -2372,11 +2378,11 @@ public string[] GenerateSchemaUpdateScript(Dialect.Dialect dialect, IDatabaseMet
23722378
table.Catalog ?? defaultCatalog, table.IsQuoted);
23732379
if (tableInfo == null)
23742380
{
2375-
script.Add(table.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
2381+
script.Add(table.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
23762382
}
23772383
else
23782384
{
2379-
string[] alterDDL = table.SqlAlterStrings(dialect, mapping, tableInfo, defaultCatalog, defaultSchema);
2385+
string[] alterDDL = table.SqlAlterStrings(dialect, staticDialectMapping, tableInfo, defaultCatalog, defaultSchema);
23802386
script.AddRange(alterDDL);
23812387
}
23822388

@@ -2404,7 +2410,7 @@ public string[] GenerateSchemaUpdateScript(Dialect.Dialect dialect, IDatabaseMet
24042410
&& (!(dialect is MySQLDialect) || tableInfo.GetIndexMetadata(fk.Name) == null));
24052411
if (create)
24062412
{
2407-
script.Add(fk.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
2413+
script.Add(fk.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
24082414
}
24092415
}
24102416
}
@@ -2414,7 +2420,7 @@ public string[] GenerateSchemaUpdateScript(Dialect.Dialect dialect, IDatabaseMet
24142420
{
24152421
if (tableInfo == null || tableInfo.GetIndexMetadata(index.Name) == null)
24162422
{
2417-
script.Add(index.SqlCreateString(dialect, mapping, defaultCatalog, defaultSchema));
2423+
script.Add(index.SqlCreateString(dialect, staticDialectMapping, defaultCatalog, defaultSchema));
24182424
}
24192425
}
24202426
}
@@ -2440,6 +2446,7 @@ public void ValidateSchema(Dialect.Dialect dialect, IDatabaseMetadata databaseMe
24402446
{
24412447
SecondPassCompile();
24422448

2449+
var staticDialectMapping = new StaticDialectMappingWrapper(mapping, dialect);
24432450
var defaultCatalog = GetQuotedDefaultCatalog(dialect);
24442451
var defaultSchema = GetQuotedDefaultSchema(dialect);
24452452

@@ -2466,7 +2473,7 @@ public void ValidateSchema(Dialect.Dialect dialect, IDatabaseMetadata databaseMe
24662473
}
24672474
else
24682475
{
2469-
validationErrors.AddRange(table.ValidateColumns(dialect, mapping, tableInfo));
2476+
validationErrors.AddRange(table.ValidateColumns(dialect, staticDialectMapping, tableInfo));
24702477
}
24712478
}
24722479
}

0 commit comments

Comments
 (0)