|
From: <fab...@us...> - 2009-06-06 20:16:57
|
Revision: 4423
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4423&view=rev
Author: fabiomaulo
Date: 2009-06-06 20:16:42 +0000 (Sat, 06 Jun 2009)
Log Message:
-----------
- Fix NH-1814 (by default)
- Fix NH-188 (so far explicitly or trough configuration)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Cfg/Environment.cs
trunk/nhibernate/src/NHibernate/Cfg/Settings.cs
trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs
trunk/nhibernate/src/NHibernate/Dialect/Schema/IDataBaseSchema.cs
trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
trunk/nhibernate/src/NHibernate/nhibernate-configuration.xsd
trunk/nhibernate/src/NHibernate.Test/App.config
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs
trunk/nhibernate/src/NHibernate.Test/CfgTest/SettingsFactoryFixture.cs
trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/
trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.cs
trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.hbm.xml
trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Cfg/Environment.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/Environment.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Cfg/Environment.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -135,9 +135,9 @@
// The classname of the HQL query parser factory
public const string QueryTranslator = "query.factory_class";
- // Unused, not implemented
public const string QueryImports = "query.imports";
public const string Hbm2ddlAuto = "hbm2ddl.auto";
+ public const string Hbm2ddlKeyWords = "hbm2ddl.keywords";
// Unused, not implemented
public const string SqlExceptionConverter = "sql_exception_converter";
Modified: trunk/nhibernate/src/NHibernate/Cfg/Settings.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/Settings.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Cfg/Settings.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -59,6 +59,10 @@
public bool IsAutoValidateSchema { get; internal set; }
+ public bool IsAutoQuoteEnabled { get; internal set; }
+
+ public bool IsKeywordsImportEnabled { get; internal set; }
+
public bool IsQueryCacheEnabled { get; internal set; }
public bool IsStructuredCacheEntriesEnabled { get; internal set; }
Modified: trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Cfg/SettingsFactory.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -140,6 +140,7 @@
log.Info("Query language substitutions: " + CollectionPrinter.ToString((IDictionary) querySubstitutions));
}
+ #region Hbm2DDL
string autoSchemaExport = PropertiesHelper.GetString(Environment.Hbm2ddlAuto, properties, null);
if ("update" == autoSchemaExport)
{
@@ -158,6 +159,29 @@
{
settings.IsAutoValidateSchema = true;
}
+
+ string autoKeyWordsImport = PropertiesHelper.GetString(Environment.Hbm2ddlKeyWords, properties, "not-defined");
+ switch (autoKeyWordsImport.ToLowerInvariant())
+ {
+ case "none":
+ settings.IsKeywordsImportEnabled = false;
+ settings.IsAutoQuoteEnabled = false;
+ break;
+ case "keywords":
+ settings.IsKeywordsImportEnabled = true;
+ break;
+ case "auto-quote":
+ settings.IsKeywordsImportEnabled = true;
+ settings.IsAutoQuoteEnabled = true;
+ break;
+ case "not-defined":
+ settings.IsKeywordsImportEnabled = true;
+ settings.IsAutoQuoteEnabled = false;
+ break;
+ }
+
+ #endregion
+
bool useSecondLevelCache = PropertiesHelper.GetBoolean(Environment.UseSecondLevelCache, properties, true);
bool useQueryCache = PropertiesHelper.GetBoolean(Environment.UseQueryCache, properties);
@@ -305,11 +329,6 @@
}
}
- internal SettingsFactory()
- {
- //should not be publically creatable
- }
-
private static ConnectionReleaseMode ParseConnectionReleaseMode(string name)
{
switch (name)
Modified: trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/AbstractDataBaseSchema.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.Common;
+using Iesi.Collections.Generic;
namespace NHibernate.Dialect.Schema
{
@@ -90,6 +91,17 @@
return connection.GetSchema(ForeignKeysSchemaName, restrictions);
}
+ public virtual ISet<string> GetReservedWords()
+ {
+ var result = new HashedSet<string>();
+ DataTable dtReservedWords = connection.GetSchema(DbMetaDataCollectionNames.ReservedWords);
+ foreach (DataRow row in dtReservedWords.Rows)
+ {
+ result.Add(row["ReservedWord"].ToString());
+ }
+ return result;
+ }
+
protected virtual string ForeignKeysSchemaName
{
get { return "ForeignKeys"; }
Modified: trunk/nhibernate/src/NHibernate/Dialect/Schema/IDataBaseSchema.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Schema/IDataBaseSchema.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Dialect/Schema/IDataBaseSchema.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -1,4 +1,5 @@
using System.Data;
+using Iesi.Collections.Generic;
namespace NHibernate.Dialect.Schema
{
@@ -115,5 +116,11 @@
/// <param name="table">A table name</param>
/// <returns>A description of the foreign keys available</returns>
DataTable GetForeignKeys(string catalog, string schema, string table);
+
+ /// <summary>
+ /// Get all reserved words
+ /// </summary>
+ /// <returns>A set of reserved words</returns>
+ ISet<string> GetReservedWords();
}
}
Modified: trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/Impl/SessionFactoryImpl.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -162,6 +162,22 @@
log.Debug("instantiating session factory with properties: " + CollectionPrinter.ToString(properties));
}
+ try
+ {
+ if (settings.IsKeywordsImportEnabled)
+ {
+ SchemaMetadataUpdater.Update(this);
+ }
+ if (settings.IsAutoQuoteEnabled)
+ {
+ SchemaMetadataUpdater.QuoteTableAndColumns(cfg);
+ }
+ }
+ catch (NotSupportedException)
+ {
+ // Ignore if the Dialect does not provide DataBaseSchema
+ }
+
#region Caches
settings.CacheProvider.Start(properties);
#endregion
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-06-06 20:16:42 UTC (rev 4423)
@@ -600,6 +600,7 @@
<Compile Include="Param\VersionTypeSeedParameterSpecification.cs" />
<Compile Include="Proxy\AbstractProxyFactory.cs" />
<Compile Include="SqlCommand\InsertSelect.cs" />
+ <Compile Include="Tool\hbm2ddl\SchemaMetadataUpdater.cs" />
<Compile Include="Transaction\AdoNetWithDistrubtedTransactionFactory.cs" />
<Compile Include="Transform\ToListResultTransformer.cs" />
<Compile Include="Util\NullableDictionary.cs" />
Added: trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Tool/hbm2ddl/SchemaMetadataUpdater.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -0,0 +1,79 @@
+using Iesi.Collections.Generic;
+using NHibernate.Cfg;
+using NHibernate.Engine;
+using NHibernate.Mapping;
+using System.Collections.Generic;
+
+namespace NHibernate.Tool.hbm2ddl
+{
+ // Candidate to be exstensions of ISessionFactory and Configuration
+ public static class SchemaMetadataUpdater
+ {
+ public static void Update(ISessionFactory sessionFactory)
+ {
+ var factory = (ISessionFactoryImplementor) sessionFactory;
+ var dialect = factory.Dialect;
+ var connectionHelper = new SuppliedConnectionProviderConnectionHelper(factory.ConnectionProvider);
+ factory.Dialect.Keywords.AddAll(GetReservedWords(dialect, connectionHelper));
+ }
+
+ public static void QuoteTableAndColumns(Configuration configuration)
+ {
+ ISet<string> reservedDb = GetReservedWords(configuration.Properties);
+ foreach (var cm in configuration.ClassMappings)
+ {
+ QuoteTable(cm.Table, reservedDb);
+ }
+ foreach (var cm in configuration.CollectionMappings)
+ {
+ QuoteTable(cm.Table, reservedDb);
+ }
+ }
+
+ private static ISet<string> GetReservedWords(IDictionary<string, string> cfgProperties)
+ {
+ var dialect = Dialect.Dialect.GetDialect(cfgProperties);
+ var connectionHelper = new ManagedProviderConnectionHelper(cfgProperties);
+ return GetReservedWords(dialect, connectionHelper);
+ }
+
+ private static ISet<string> GetReservedWords(Dialect.Dialect dialect, IConnectionHelper connectionHelper)
+ {
+ ISet<string> reservedDb = new HashedSet<string>();
+ connectionHelper.Prepare();
+ try
+ {
+ var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
+ foreach (var rw in metaData.GetReservedWords())
+ {
+ reservedDb.Add(rw.ToLowerInvariant());
+ }
+ }
+ finally
+ {
+ connectionHelper.Release();
+ }
+ return reservedDb;
+ }
+
+ private static void QuoteTable(Table table, ICollection<string> reservedDb)
+ {
+ if (!table.IsQuoted && reservedDb.Contains(table.Name.ToLowerInvariant()))
+ {
+ table.Name = GetNhQuoted(table.Name);
+ }
+ foreach (var column in table.ColumnIterator)
+ {
+ if (!column.IsQuoted && reservedDb.Contains(column.Name.ToLowerInvariant()))
+ {
+ column.Name = GetNhQuoted(column.Name);
+ }
+ }
+ }
+
+ private static string GetNhQuoted(string name)
+ {
+ return "`" + name + "`";
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/nhibernate-configuration.xsd
===================================================================
--- trunk/nhibernate/src/NHibernate/nhibernate-configuration.xsd 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate/nhibernate-configuration.xsd 2009-06-06 20:16:42 UTC (rev 4423)
@@ -84,6 +84,7 @@
<xs:enumeration value="query.factory_class" />
<xs:enumeration value="query.imports" />
<xs:enumeration value="hbm2ddl.auto" />
+ <xs:enumeration value="hbm2ddl.keywords" />
<xs:enumeration value="sql_exception_converter" />
<xs:enumeration value="adonet.wrap_result_sets" />
<xs:enumeration value="prepare_sql" />
Modified: trunk/nhibernate/src/NHibernate.Test/App.config
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/App.config 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate.Test/App.config 2009-06-06 20:16:42 UTC (rev 4423)
@@ -54,6 +54,7 @@
-->
<property name="adonet.batch_size">10</property>
<property name="connection.isolation">ReadCommitted</property>
+ <property name="hbm2ddl.keywords">none</property>
<property name="format_sql">true</property>
<!-- This is the System.Data.dll provider for MSSQL Server -->
Added: trunk/nhibernate/src/NHibernate.Test/CfgTest/SettingsFactoryFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/CfgTest/SettingsFactoryFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/CfgTest/SettingsFactoryFixture.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -0,0 +1,22 @@
+using System.Collections.Generic;
+using NHibernate.Cfg;
+using NUnit.Framework;
+
+namespace NHibernate.Test.CfgTest
+{
+ [TestFixture]
+ public class SettingsFactoryFixture
+ {
+ [Test]
+ public void DefaultValueForKeyWords()
+ {
+ var properties = new Dictionary<string, string>
+ {
+ {"dialect", typeof (Dialect.MsSql2005Dialect).FullName}
+ };
+ var settings = new SettingsFactory().BuildSettings(properties);
+ Assert.That(settings.IsKeywordsImportEnabled);
+ Assert.That(!settings.IsAutoQuoteEnabled);
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-05 22:49:48 UTC (rev 4422)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-06 20:16:42 UTC (rev 4423)
@@ -110,6 +110,7 @@
<Compile Include="CfgTest\LocatedInTestAssembly.cs" />
<Compile Include="CfgTest\MappingDocumentAggregatorTests.cs" />
<Compile Include="CfgTest\MappingDocumentParserTests.cs" />
+ <Compile Include="CfgTest\SettingsFactoryFixture.cs" />
<Compile Include="Classic\EntityWithLifecycle.cs" />
<Compile Include="Classic\LifecycleFixture.cs" />
<Compile Include="Classic\ValidatableFixture.cs" />
@@ -1157,6 +1158,8 @@
<Compile Include="Stateless\StatelessWithRelationsFixture.cs" />
<Compile Include="Tools\hbm2ddl\SchemaExportTests\WithColumnTag.cs" />
<Compile Include="Tools\hbm2ddl\SchemaExportTests\WithColumnTagFixture.cs" />
+ <Compile Include="Tools\hbm2ddl\SchemaMetadataUpdaterTest\HeavyEntity.cs" />
+ <Compile Include="Tools\hbm2ddl\SchemaMetadataUpdaterTest\SchemaMetadataUpdaterFixture.cs" />
<Compile Include="Tools\hbm2ddl\SchemaUpdate\MigrationFixture.cs" />
<Compile Include="Tools\hbm2ddl\SchemaUpdate\Version.cs" />
<Compile Include="SecondLevelCacheTest\AnotherItem.cs" />
@@ -1894,6 +1897,7 @@
<EmbeddedResource Include="CacheTest\EntityWithFilters.xml" />
<EmbeddedResource Include="Classic\EntityWithLifecycle.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
+ <EmbeddedResource Include="Tools\hbm2ddl\SchemaMetadataUpdaterTest\HeavyEntity.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1182\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1171\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1400\Mappings.hbm.xml" />
Added: trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -0,0 +1,11 @@
+namespace NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest
+{
+ public class Order
+ {
+ public string Select { get; set; }
+ public string From { get; set; }
+ public string And { get; set; }
+ public string Column { get; set; }
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/HeavyEntity.hbm.xml 2009-06-06 20:16:42 UTC (rev 4423)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest"
+ assembly="NHibernate.Test"
+ default-lazy="false">
+
+ <class name="Order">
+ <id type="int">
+ <generator class="native"/>
+ </id>
+ <property name="Select"/>
+ <property name="From"/>
+ <property name="And"/>
+ <property name="Column"/>
+ <property name="Name"/>
+ </class>
+
+</hibernate-mapping>
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Tools/hbm2ddl/SchemaMetadataUpdaterTest/SchemaMetadataUpdaterFixture.cs 2009-06-06 20:16:42 UTC (rev 4423)
@@ -0,0 +1,169 @@
+using System.Collections.Generic;
+using Iesi.Collections.Generic;
+using NHibernate.Cfg;
+using NHibernate.Engine;
+using NHibernate.Mapping;
+using NHibernate.Tool.hbm2ddl;
+using NUnit.Framework;
+
+namespace NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest
+{
+ [TestFixture]
+ public class SchemaMetadataUpdaterFixture
+ {
+ [Test]
+ public void CanRetrieveReservedWords()
+ {
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
+ var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
+ connectionHelper.Prepare();
+ try
+ {
+ var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
+ var reserved = metaData.GetReservedWords();
+ Assert.That(reserved, Is.Not.Empty);
+ Assert.That(reserved, Has.Member("SELECT"));
+ Assert.That(reserved, Has.Member("FROM"));
+ }
+ finally
+ {
+ connectionHelper.Release();
+ }
+ }
+
+ [Test]
+ public void UpdateReservedWordsInDialect()
+ {
+ var reservedDb = new HashedSet<string>();
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
+ var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
+ connectionHelper.Prepare();
+ try
+ {
+ var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
+ foreach (var rw in metaData.GetReservedWords())
+ {
+ reservedDb.Add(rw.ToLowerInvariant());
+ }
+ }
+ finally
+ {
+ connectionHelper.Release();
+ }
+
+ var sf = (ISessionFactoryImplementor) configuration.BuildSessionFactory();
+ SchemaMetadataUpdater.Update(sf);
+ var match = reservedDb.Intersect(sf.Dialect.Keywords);
+ Assert.That(match, Is.EquivalentTo(reservedDb));
+ }
+
+ [Test]
+ public void ExplicitAutoQuote()
+ {
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
+ GetType().Assembly);
+
+ SchemaMetadataUpdater.QuoteTableAndColumns(configuration);
+
+ var cm = configuration.GetClassMapping(typeof(Order));
+ Assert.That(cm.Table.IsQuoted);
+ var culs = new List<Column>(cm.Table.ColumnIterator);
+ Assert.That(GetColumnByName(culs, "From").IsQuoted);
+ Assert.That(GetColumnByName(culs, "And").IsQuoted);
+ Assert.That(GetColumnByName(culs, "Select").IsQuoted);
+ Assert.That(GetColumnByName(culs, "Column").IsQuoted);
+ Assert.That(!GetColumnByName(culs, "Name").IsQuoted);
+ }
+
+ [Test]
+ public void AutoQuoteTableAndColumnsAtStratup()
+ {
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
+ configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
+ GetType().Assembly);
+ configuration.BuildSessionFactory();
+ var cm = configuration.GetClassMapping(typeof (Order));
+ Assert.That(cm.Table.IsQuoted);
+ var culs = new List<Column>(cm.Table.ColumnIterator);
+ Assert.That(GetColumnByName(culs, "From").IsQuoted);
+ Assert.That(GetColumnByName(culs, "And").IsQuoted);
+ Assert.That(GetColumnByName(culs, "Select").IsQuoted);
+ Assert.That(GetColumnByName(culs, "Column").IsQuoted);
+ Assert.That(!GetColumnByName(culs, "Name").IsQuoted);
+ }
+
+ [Test]
+ public void AutoQuoteTableAndColumnsAtStratupIncludeKeyWordsImport()
+ {
+ var reservedDb = new HashedSet<string>();
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ var dialect = Dialect.Dialect.GetDialect(configuration.Properties);
+ var connectionHelper = new ManagedProviderConnectionHelper(configuration.Properties);
+ connectionHelper.Prepare();
+ try
+ {
+ var metaData = dialect.GetDataBaseSchema(connectionHelper.Connection);
+ foreach (var rw in metaData.GetReservedWords())
+ {
+ reservedDb.Add(rw.ToLowerInvariant());
+ }
+ }
+ finally
+ {
+ connectionHelper.Release();
+ }
+
+ configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
+ configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
+ GetType().Assembly);
+ var sf = (ISessionFactoryImplementor)configuration.BuildSessionFactory();
+ var match = reservedDb.Intersect(sf.Dialect.Keywords);
+ Assert.That(match, Is.EquivalentTo(reservedDb));
+ }
+
+ private static Column GetColumnByName(IEnumerable<Column> culs, string colName)
+ {
+ Column result= null;
+ foreach (var column in culs)
+ {
+ if (column.Name.Equals(colName))
+ {
+ result = column;
+ break;
+ }
+ }
+ return result;
+ }
+
+ [Test]
+ public void CanWorkWithAutoQuoteTableAndColumnsAtStratup()
+ {
+ var configuration = TestConfigurationHelper.GetDefaultConfiguration();
+ configuration.SetProperty(Environment.Hbm2ddlKeyWords, "auto-quote");
+ configuration.SetProperty(Environment.Hbm2ddlAuto, "create-drop");
+ configuration.AddResource("NHibernate.Test.Tools.hbm2ddl.SchemaMetadataUpdaterTest.HeavyEntity.hbm.xml",
+ GetType().Assembly);
+ var sf = configuration.BuildSessionFactory();
+ using (ISession s = sf.OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Save(new Order {From = "from", Column = "column", And = "order"});
+ t.Commit();
+ }
+
+ using (ISession s = sf.OpenSession())
+ using (ITransaction t = s.BeginTransaction())
+ {
+ s.Delete("from Order");
+ t.Commit();
+ }
+
+ new SchemaExport(configuration).Drop(false, false);
+ }
+
+ }
+}
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|