|
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.
|