From: <aye...@us...> - 2010-01-27 14:00:21
|
Revision: 4934 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4934&view=rev Author: ayenderahien Date: 2010-01-27 14:00:14 +0000 (Wed, 27 Jan 2010) Log Message: ----------- Applying patch from Richard Birkb, fixing NH-2086 Fixing schema issue with SQL CE Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Dialect/MsSqlCeDialect.cs trunk/nhibernate/src/NHibernate.Test/DialectTest/SqlCEDialectFixture.cs Modified: trunk/nhibernate/src/NHibernate/Dialect/MsSqlCeDialect.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Dialect/MsSqlCeDialect.cs 2010-01-27 13:53:45 UTC (rev 4933) +++ trunk/nhibernate/src/NHibernate/Dialect/MsSqlCeDialect.cs 2010-01-27 14:00:14 UTC (rev 4934) @@ -1,7 +1,9 @@ using System.Data; using System.Data.Common; +using System.Text; using NHibernate.Dialect.Schema; -using Environment=NHibernate.Cfg.Environment; +using NHibernate.Util; +using Environment = NHibernate.Cfg.Environment; namespace NHibernate.Dialect { @@ -97,5 +99,51 @@ { return new MsSqlCeDataBaseSchema(connection); } - } + + public override string Qualify(string catalog, string schema, string table) + { + // SQL Server Compact doesn't support Schemas. So join schema name and table name with underscores + // similar to the SQLLite dialect. + + var qualifiedName = new StringBuilder(); + bool quoted = false; + + if (!string.IsNullOrEmpty(catalog)) + { + qualifiedName.Append(catalog).Append(StringHelper.Dot); + } + + var tableName = new StringBuilder(); + if (!string.IsNullOrEmpty(schema)) + { + if (schema.StartsWith(OpenQuote.ToString())) + { + schema = schema.Substring(1, schema.Length - 1); + quoted = true; + } + if (schema.EndsWith(CloseQuote.ToString())) + { + schema = schema.Substring(0, schema.Length - 1); + quoted = true; + } + tableName.Append(schema).Append(StringHelper.Underscore); + } + + if (table.StartsWith(OpenQuote.ToString())) + { + table = table.Substring(1, table.Length - 1); + quoted = true; + } + if (table.EndsWith(CloseQuote.ToString())) + { + table = table.Substring(0, table.Length - 1); + quoted = true; + } + + string name = tableName.Append(table).ToString(); + if (quoted) + name = OpenQuote + name + CloseQuote; + return qualifiedName.Append(name).ToString(); + } + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/DialectTest/SqlCEDialectFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/DialectTest/SqlCEDialectFixture.cs 2010-01-27 13:53:45 UTC (rev 4933) +++ trunk/nhibernate/src/NHibernate.Test/DialectTest/SqlCEDialectFixture.cs 2010-01-27 14:00:14 UTC (rev 4934) @@ -7,10 +7,17 @@ [TestFixture] public class SqlCEDialectFixture { - [Test] + private MsSqlCeDialect dialect; + + [SetUp] + public void SetUp() + { + dialect = new MsSqlCeDialect(); + } + + [Test] public void BinaryBlob_mapping_to_SqlCe_types() { - Dialect dialect = new MsSqlCeDialect(); SimpleValue sv = new SimpleValue(); sv.TypeName = NHibernateUtil.BinaryBlob.Name; Column column = new Column(); @@ -26,5 +33,68 @@ column.Length = 8001; Assert.AreEqual("IMAGE", column.GetSqlType(dialect, null)); } - } + + [Test] + public void QuotedSchemaNameWithSqlCE() + { + Table tbl = new Table(); + tbl.Schema = "`schema`"; + tbl.Name = "`name`"; + + Assert.AreEqual("\"schema_name\"", tbl.GetQualifiedName(dialect)); + Assert.AreEqual("\"schema_table\"", dialect.Qualify("", "\"schema\"", "\"table\"")); + } + + [Test] + public void QuotedTableNameWithoutSchemaWithSqlCE() + { + Table tbl = new Table(); + tbl.Name = "`name`"; + + Assert.AreEqual("\"name\"", tbl.GetQualifiedName(dialect)); + } + + [Test] + public void QuotedSchemaNameWithUnqoutedTableInSqlCE() + { + Table tbl = new Table(); + tbl.Schema = "`schema`"; + tbl.Name = "name"; + + Assert.AreEqual("\"schema_name\"", tbl.GetQualifiedName(dialect)); + Assert.AreEqual("\"schema_table\"", dialect.Qualify("", "\"schema\"", "table")); + } + + [Test] + public void QuotedCatalogSchemaNameWithSqlCE() + { + Table tbl = new Table(); + tbl.Catalog = "dbo"; + tbl.Schema = "`schema`"; + tbl.Name = "`name`"; + + Assert.AreEqual("dbo.\"schema_name\"", tbl.GetQualifiedName(dialect)); + Assert.AreEqual("dbo.\"schema_table\"", dialect.Qualify("dbo", "\"schema\"", "\"table\"")); + } + + [Test] + public void QuotedTableNameWithSqlCE() + { + Table tbl = new Table(); + tbl.Name = "`Group`"; + + Assert.AreEqual("\"Group\"", tbl.GetQualifiedName(dialect)); + } + + [Test] + public void SchemaNameWithSqlCE() + { + Table tbl = new Table(); + tbl.Schema = "schema"; + tbl.Name = "name"; + + Assert.AreEqual("schema_name", tbl.GetQualifiedName(dialect)); + Assert.AreEqual("schema_table", dialect.Qualify("", "schema", "table")); + } + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |