Skip to content

Commit 5dae5f1

Browse files
authored
Remove dialect instantiation in AddDeserializedMapping (#1703)
- Remove dependency on Dialect from Join and PersistentClass classes - Remove dependency on Dialect from Binder subclasses - Remove dependency on Dialect from Mappings class
1 parent 0390b46 commit 5dae5f1

27 files changed

+328
-82
lines changed

src/NHibernate.Test/Async/NHSpecificTest/NH1007/Fixture.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,12 @@ public async Task MappingIdGeneratorWithAttributeTakesPrecendenceOverMappingWith
6060

6161
private void VerifyMapping(HbmMapping mapping)
6262
{
63-
var dialect = new MsSql2008Dialect();
6463
var configuration = new Configuration();
65-
var mappings = configuration.CreateMappings(dialect);
64+
var mappings = configuration.CreateMappings();
6665
mappings.DefaultAssembly = "NHibernate.Test";
6766
mappings.DefaultNamespace = "NHibernate.Test.NHSpecificTest.NH1007";
6867

69-
var rootBinder = new MappingRootBinder(mappings, dialect);
68+
var rootBinder = new MappingRootBinder(mappings);
7069
rootBinder.Bind(mapping);
7170

7271
var employer = rootBinder.Mappings.GetClass("NHibernate.Test.NHSpecificTest.NH1007.Employer1");

src/NHibernate.Test/Bytecode/Lightweight/BytecodeProviderFixture.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ public void AllowCustomCollectionTypeFactoryBeforeBuildFirstMapping()
131131
// "mapping-sources" is better to limitate the moment of injectability.
132132
var cfg = TestConfigurationHelper.GetDefaultConfiguration();
133133
cfg.SetProperty(Environment.CollectionTypeFactoryClass, typeof(CustomCollectionTypeFactory).AssemblyQualifiedName);
134-
Dialect.Dialect dialect = Dialect.Dialect.GetDialect(cfg.Properties);
135-
cfg.CreateMappings(dialect);
134+
cfg.CreateMappings();
136135
Assert.That(Environment.BytecodeProvider.CollectionTypeFactory, Is.TypeOf<CustomCollectionTypeFactory>());
137136
}
138137

src/NHibernate.Test/CfgTest/ConfigurationAddMappingEvents.cs

-2
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@ public void WhenSubscribedToBeforeBindThenRaiseEventForEachMapping()
5353
Assert.That(listOfCalls.Count, Is.EqualTo(2));
5454
Assert.That(listOfCalls.Select(x => x.FileName).All(x => x != null), Is.True);
5555
Assert.That(listOfCalls.Select(x => x.Mapping).All(x => x != null), Is.True);
56-
Assert.That(listOfCalls.Select(x => x.Dialect).All(x => x.GetType() == typeof (MsSql2008Dialect)), Is.True);
5756
}
5857

5958
[Test]
@@ -70,7 +69,6 @@ public void WhenSubscribedToAfterBindThenRaiseEventForEachMapping()
7069
Assert.That(listOfCalls.Count, Is.EqualTo(2));
7170
Assert.That(listOfCalls.Select(x => x.FileName).All(x => x != null), Is.True);
7271
Assert.That(listOfCalls.Select(x => x.Mapping).All(x => x != null), Is.True);
73-
Assert.That(listOfCalls.Select(x => x.Dialect).All(x => x.GetType() == typeof(MsSql2008Dialect)), Is.True);
7472
}
7573
}
7674
}

src/NHibernate.Test/CfgTest/Loquacious/TypeDefinitionFixture.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public void AddTypeDef()
1919
c.Alias = "HighLow";
2020
c.Properties = new {max_lo = 99};
2121
});
22-
var mappings = configure.CreateMappings(Dialect.Dialect.GetDialect(configure.Properties));
22+
var mappings = configure.CreateMappings();
2323
var typeDef = mappings.GetTypeDef("HighLow");
2424
Assert.That(typeDef, Is.Not.Null);
2525
Assert.That(typeDef.Parameters["max_lo"], Is.EqualTo("99"));

src/NHibernate.Test/NHSpecificTest/AliasFixture.cs

+35-7
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,44 @@ public class AliasFixture
1111
[Test]
1212
public void NoLeadingUnderscores()
1313
{
14-
Alias alias = new Alias("suffix");
14+
var alias = new Alias("suffix");
1515
Dialect.Dialect dialect = new MsSql2000Dialect();
1616

17-
Assert.IsFalse(
18-
alias.ToAliasString("__someIdentifier", dialect)
19-
.StartsWith("_"));
17+
Assert.That(alias.ToAliasString("__someIdentifier", dialect), Does.Not.StartWith("_"));
2018

21-
Assert.IsFalse(
22-
alias.ToUnquotedAliasString("__someIdentifier", dialect)
23-
.StartsWith("_"));
19+
Assert.That(alias.ToUnquotedAliasString("__someIdentifier", dialect), Does.Not.StartsWith("_"));
20+
}
21+
22+
[Test]
23+
public void TestDialectQuotedAlias()
24+
{
25+
var alias = new Alias(15, "PK");
26+
var aliasString = alias.ToAliasString("[Hello]]World]", new MsSql2000Dialect());
27+
Assert.That(aliasString, Is.EqualTo("[Hello]]WorldPK]"));
28+
}
29+
30+
[Test]
31+
public void TestDialectQuotedAliasWithEscapedStringAtTheEdge()
32+
{
33+
var alias = new Alias(15, "PK");
34+
var aliasString = alias.ToAliasString("[Table0123456]]7890]", new MsSql2000Dialect());
35+
Assert.That(aliasString, Is.EqualTo("[Table0123456]]PK]"));
36+
}
37+
38+
[Test]
39+
public void TestQuotedAlias()
40+
{
41+
var alias = new Alias(15, "PK");
42+
var aliasString = alias.ToAliasString("[Hello]]World]");
43+
Assert.That(aliasString, Is.EqualTo("[Hello]]WorldPK]"));
44+
}
45+
46+
[Test]
47+
public void TestQuotedAliasWithEscapedStringAtTheEdge()
48+
{
49+
var alias = new Alias(15, "PK");
50+
var aliasString = alias.ToAliasString("[Table0123456]]7890]");
51+
Assert.That(aliasString, Is.EqualTo("[Table0123456PK]"));
2452
}
2553
}
2654
}

src/NHibernate.Test/NHSpecificTest/NH1007/Fixture.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,12 @@ public void ConfiguringIdGeneratorUsingAttributeAndElementIsEquivalent()
8484

8585
private void VerifyMapping(HbmMapping mapping)
8686
{
87-
var dialect = new MsSql2008Dialect();
8887
var configuration = new Configuration();
89-
var mappings = configuration.CreateMappings(dialect);
88+
var mappings = configuration.CreateMappings();
9089
mappings.DefaultAssembly = "NHibernate.Test";
9190
mappings.DefaultNamespace = "NHibernate.Test.NHSpecificTest.NH1007";
9291

93-
var rootBinder = new MappingRootBinder(mappings, dialect);
92+
var rootBinder = new MappingRootBinder(mappings);
9493
rootBinder.Bind(mapping);
9594

9695
var employer = rootBinder.Mappings.GetClass("NHibernate.Test.NHSpecificTest.NH1007.Employer1");

src/NHibernate.Test/NHSpecificTest/NH2041/Fixture.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void WhenJoinTableContainComponentsThenColumnsShouldBeInJoinedTable()
1212
{
1313
Configuration cfg = TestConfigurationHelper.GetDefaultConfiguration();
1414
cfg.AddResource("NHibernate.Test.NHSpecificTest.NH2041.Mappings.hbm.xml", GetType().Assembly);
15-
var mappings = cfg.CreateMappings(Dialect.Dialect.GetDialect(cfg.Properties));
15+
var mappings = cfg.CreateMappings();
1616
var table = mappings.GetTable(null, null, "Locations");
1717
Assert.That(table, Is.Not.Null);
1818
Assert.That(table.ColumnIterator.Select(c => c.Name), Is.EquivalentTo(new [] {"myclassId", "latitudecol", "longitudecol"}));

src/NHibernate.Test/NHSpecificTest/NH2569/Fixture.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public void WhenMapHiloToDifferentSchemaThanClassThenIdHasTheMappedSchema()
3030
conf.DataBaseIntegration(x=> x.Dialect<MsSql2008Dialect>());
3131
conf.AddDeserializedMapping(mapper.CompileMappingForAllExplicitlyAddedEntities(), "wholeDomain");
3232

33-
var mappings = conf.CreateMappings(Dialect.Dialect.GetDialect());
33+
var mappings = conf.CreateMappings();
3434
var pc = mappings.GetClass(typeof(MyClass).FullName);
3535
Assert.That(((SimpleValue)pc.Identifier).IdentifierGeneratorProperties["schema"], Is.EqualTo("gSchema"));
3636
}

src/NHibernate.Test/NHSpecificTest/NH2761/Fixture.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public void WhenMultipleConfigurationUseSameMappingsThenConstraintsHasSameNames(
2323
private Mappings GetMappings()
2424
{
2525
var configuration = GetConfiguration();
26-
return configuration.CreateMappings(Dialect.Dialect.GetDialect(configuration.Properties));
26+
return configuration.CreateMappings();
2727
}
2828

2929
private Configuration GetConfiguration()

src/NHibernate.Test/NHSpecificTest/NH3153/Fixture.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public void ShouldGetIdentifierSchemaFromClassElement()
1717
var conf = TestConfigurationHelper.GetDefaultConfiguration();
1818
conf.AddResource("NHibernate.Test.NHSpecificTest.NH3153.SchemaInClass.hbm.xml", typeof(A).Assembly);
1919

20-
var mappings = conf.CreateMappings(Dialect.Dialect.GetDialect());
20+
var mappings = conf.CreateMappings();
2121

2222
var pc = mappings.GetClass(typeof(A).FullName);
2323
Assert.That(((SimpleValue)pc.Identifier).IdentifierGeneratorProperties["schema"], Is.EqualTo("Test"));
@@ -30,7 +30,7 @@ public void ShouldGetIdentifierSchemaFromMappingElement()
3030
var conf = TestConfigurationHelper.GetDefaultConfiguration();
3131
conf.AddResource("NHibernate.Test.NHSpecificTest.NH3153.SchemaInMapping.hbm.xml", typeof(A).Assembly);
3232

33-
var mappings = conf.CreateMappings(Dialect.Dialect.GetDialect());
33+
var mappings = conf.CreateMappings();
3434

3535
var pc = mappings.GetClass(typeof(A).FullName);
3636
Assert.That(((SimpleValue)pc.Identifier).IdentifierGeneratorProperties["schema"], Is.EqualTo("Test"));

src/NHibernate/Cfg/BindMappingEventArgs.cs

+16-5
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,28 @@
33

44
namespace NHibernate.Cfg
55
{
6-
public class BindMappingEventArgs: EventArgs
6+
public class BindMappingEventArgs : EventArgs
77
{
8+
//6.0 TODO: Remove
9+
internal Lazy<Dialect.Dialect> LazyDialect;
10+
11+
[Obsolete("Please use constructor without a dialect parameter.")]
812
public BindMappingEventArgs(Dialect.Dialect dialect, HbmMapping mapping, string fileName)
13+
: this(mapping, fileName)
14+
{
15+
LazyDialect = new Lazy<Dialect.Dialect>(() => dialect);
16+
}
17+
18+
public BindMappingEventArgs(HbmMapping mapping, string fileName)
919
{
10-
Dialect = dialect;
1120
Mapping = mapping;
1221
FileName = fileName;
1322
}
1423

15-
public Dialect.Dialect Dialect { get; private set; }
16-
public HbmMapping Mapping { get; private set; }
17-
public string FileName { get; private set; }
24+
//Since v5.2
25+
[Obsolete("This property will be removed in a future version.")]
26+
public Dialect.Dialect Dialect => LazyDialect.Value;
27+
public HbmMapping Mapping { get; }
28+
public string FileName { get; }
1829
}
1930
}

src/NHibernate/Cfg/Configuration.cs

+16-7
Original file line numberDiff line numberDiff line change
@@ -518,12 +518,12 @@ public void AddDeserializedMapping(HbmMapping mappingDocument, string documentFi
518518
}
519519
try
520520
{
521-
Dialect.Dialect dialect = Dialect.Dialect.GetDialect(properties);
522-
OnBeforeBindMapping(new BindMappingEventArgs(dialect, mappingDocument, documentFileName));
523-
Mappings mappings = CreateMappings(dialect);
524-
525-
new MappingRootBinder(mappings, dialect).Bind(mappingDocument);
526-
OnAfterBindMapping(new BindMappingEventArgs(dialect, mappingDocument, documentFileName));
521+
var dialect = new Lazy<Dialect.Dialect>(() => Dialect.Dialect.GetDialect(properties));
522+
OnBeforeBindMapping(new BindMappingEventArgs(mappingDocument, documentFileName) {LazyDialect = dialect});
523+
var mappings = CreateMappings();
524+
mappings.LazyDialect = dialect;
525+
new MappingRootBinder(mappings).Bind(mappingDocument);
526+
OnAfterBindMapping(new BindMappingEventArgs(mappingDocument, documentFileName) {LazyDialect = dialect});
527527
}
528528
catch (Exception e)
529529
{
@@ -561,7 +561,16 @@ private void OnBeforeBindMapping(BindMappingEventArgs bindMappingEventArgs)
561561
/// Create a new <see cref="Mappings" /> to add classes and collection
562562
/// mappings to.
563563
/// </summary>
564+
//Since v5.2
565+
[Obsolete("Please use overload without a dialect parameter.")]
564566
public Mappings CreateMappings(Dialect.Dialect dialect)
567+
{
568+
var mappings = CreateMappings();
569+
mappings.LazyDialect = new Lazy<Dialect.Dialect>(() => dialect);
570+
return mappings;
571+
}
572+
573+
public Mappings CreateMappings()
565574
{
566575
string defaultCatalog = PropertiesHelper.GetString(Environment.DefaultCatalog, properties, null);
567576
string defaultSchema = PropertiesHelper.GetString(Environment.DefaultSchema, properties, null);
@@ -571,7 +580,7 @@ public Mappings CreateMappings(Dialect.Dialect dialect)
571580
return new Mappings(classes, collections, tables, NamedQueries, NamedSQLQueries, SqlResultSetMappings, Imports,
572581
secondPasses, filtersSecondPasses, propertyReferences, namingStrategy, typeDefs, FilterDefinitions, extendsQueue,
573582
auxiliaryDatabaseObjects, tableNameBinding, columnNameBindingPerTable, defaultAssembly,
574-
defaultNamespace, defaultCatalog, defaultSchema, preferPooledValuesLo, dialect);
583+
defaultNamespace, defaultCatalog, defaultSchema, preferPooledValuesLo);
575584
}
576585

577586
private void ProcessPreMappingBuildProperties()

src/NHibernate/Cfg/ConfigurationExtensions.cs

+2-7
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,8 @@ public static Configuration TypeDefinition<TDef>(this Configuration configuratio
139139
{
140140
return configuration;
141141
}
142-
var mappings = GetMappings(configuration);
142+
var mappings = configuration.CreateMappings();
143+
mappings.LazyDialect = new Lazy<Dialect.Dialect>(() => Dialect.Dialect.GetDialect(configuration.Properties));
143144
mappings.AddTypeDef(tdConfiguration.Alias, typeof(TDef).AssemblyQualifiedName, tdConfiguration.Properties.ToTypeParameters());
144145
return configuration;
145146
}
@@ -163,11 +164,5 @@ public static Configuration AddNamedQuery(this Configuration configuration, stri
163164
configuration.NamedQueries.Add(queryIdentifier, builder.Build());
164165
return configuration;
165166
}
166-
167-
private static Mappings GetMappings(Configuration configuration)
168-
{
169-
Dialect.Dialect dialect = Dialect.Dialect.GetDialect(configuration.Properties);
170-
return configuration.CreateMappings(dialect);
171-
}
172167
}
173168
}

src/NHibernate/Cfg/Mappings.cs

+62-10
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ public sealed class PropertyReference
6060
private string catalogName;
6161
private string defaultCascade;
6262
private string defaultNamespace;
63-
private readonly Dialect.Dialect dialect;
6463
private string defaultAssembly;
6564
private string defaultAccess;
6665
private bool autoImport;
@@ -89,6 +88,11 @@ public sealed class PropertyReference
8988
/// </summary>
9089
protected internal IDictionary<string, TableDescription> tableNameBinding;
9190

91+
//6.0 TODO: Remove
92+
internal Lazy<Dialect.Dialect> LazyDialect;
93+
94+
//Since v5.2
95+
[Obsolete("Please use constructor without a dialect parameter.")]
9296
protected internal Mappings(
9397
IDictionary<string, PersistentClass> classes,
9498
IDictionary<string, Mapping.Collection> collections,
@@ -112,7 +116,57 @@ protected internal Mappings(
112116
string defaultCatalog,
113117
string defaultSchema,
114118
string preferPooledValuesLo,
115-
Dialect.Dialect dialect)
119+
Dialect.Dialect dialect) :
120+
this(
121+
classes,
122+
collections,
123+
tables,
124+
queries,
125+
sqlqueries,
126+
resultSetMappings,
127+
imports,
128+
secondPasses,
129+
filtersSecondPasses,
130+
propertyReferences,
131+
namingStrategy,
132+
typeDefs,
133+
filterDefinitions,
134+
extendsQueue,
135+
auxiliaryDatabaseObjects,
136+
tableNameBinding,
137+
columnNameBindingPerTable,
138+
defaultAssembly,
139+
defaultNamespace,
140+
defaultCatalog,
141+
defaultSchema,
142+
preferPooledValuesLo)
143+
{
144+
LazyDialect = new Lazy<Dialect.Dialect>(() => dialect);
145+
}
146+
147+
protected internal Mappings(
148+
IDictionary<string, PersistentClass> classes,
149+
IDictionary<string, Mapping.Collection> collections,
150+
IDictionary<string, Table> tables,
151+
IDictionary<string, NamedQueryDefinition> queries,
152+
IDictionary<string, NamedSQLQueryDefinition> sqlqueries,
153+
IDictionary<string, ResultSetMappingDefinition> resultSetMappings,
154+
IDictionary<string, string> imports,
155+
IList<SecondPassCommand> secondPasses,
156+
Queue<FilterSecondPassArgs> filtersSecondPasses,
157+
IList<PropertyReference> propertyReferences,
158+
INamingStrategy namingStrategy,
159+
IDictionary<string, TypeDef> typeDefs,
160+
IDictionary<string, FilterDefinition> filterDefinitions,
161+
ISet<ExtendsQueueEntry> extendsQueue,
162+
IList<IAuxiliaryDatabaseObject> auxiliaryDatabaseObjects,
163+
IDictionary<string, TableDescription> tableNameBinding,
164+
IDictionary<Table, ColumnNames> columnNameBindingPerTable,
165+
string defaultAssembly,
166+
string defaultNamespace,
167+
string defaultCatalog,
168+
string defaultSchema,
169+
string preferPooledValuesLo)
116170
{
117171
this.classes = classes;
118172
this.collections = collections;
@@ -135,7 +189,6 @@ protected internal Mappings(
135189
DefaultCatalog = defaultCatalog;
136190
DefaultSchema = defaultSchema;
137191
PreferPooledValuesLo = preferPooledValuesLo;
138-
this.dialect = dialect;
139192
this.filtersSecondPasses = filtersSecondPasses;
140193
}
141194

@@ -183,10 +236,9 @@ public PersistentClass GetClass(string className)
183236
return result;
184237
}
185238

186-
public Dialect.Dialect Dialect
187-
{
188-
get { return dialect; }
189-
}
239+
//Since v5.2
240+
[Obsolete("This property will be removed in a future version.")]
241+
public Dialect.Dialect Dialect => LazyDialect.Value;
190242

191243
/// <summary>
192244
///
@@ -260,7 +312,7 @@ public void AddImport(string className, string rename)
260312

261313
public Table AddTable(string schema, string catalog, string name, string subselect, bool isAbstract, string schemaAction)
262314
{
263-
string key = subselect ?? dialect.Qualify(catalog, schema, name);
315+
string key = subselect ?? BuildTableNameKey(catalog, schema, name);
264316
Table table;
265317
if (!tables.TryGetValue(key, out table))
266318
{
@@ -327,7 +379,7 @@ private static SchemaAction GetSchemaActions(string schemaAction)
327379

328380
public Table AddDenormalizedTable(string schema, string catalog, string name, bool isAbstract, string subselect, Table includedTable)
329381
{
330-
string key = subselect ?? dialect.Qualify(schema, catalog, name);
382+
string key = subselect ?? BuildTableNameKey(schema, catalog, name);
331383

332384
Table table = new DenormalizedTable(includedTable)
333385
{
@@ -370,7 +422,7 @@ public void AddTableBinding(string schema, string catalog, string logicalName, s
370422

371423
public Table GetTable(string schema, string catalog, string name)
372424
{
373-
string key = dialect.Qualify(catalog, schema, name);
425+
string key = BuildTableNameKey(catalog, schema, name);
374426
return tables[key];
375427
}
376428

0 commit comments

Comments
 (0)