|
From: <ric...@us...> - 2009-10-08 17:51:06
|
Revision: 4741
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4741&view=rev
Author: ricbrown
Date: 2009-10-08 17:50:58 +0000 (Thu, 08 Oct 2009)
Log Message:
-----------
Merge r4740 (Fix NH-1964, NH-1983, Blobs and Clobs with Sql Server CE)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeDriverFixture.cs
trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeEntity.hbm.xml
Modified: trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs 2009-10-08 17:50:20 UTC (rev 4740)
+++ trunk/nhibernate/src/NHibernate/Driver/SqlServerCeDriver.cs 2009-10-08 17:50:58 UTC (rev 4741)
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Data;
+using System.Reflection;
using NHibernate.Cfg;
using NHibernate.SqlCommand;
using NHibernate.SqlTypes;
@@ -24,11 +25,18 @@
}
private bool prepareSql;
+ private PropertyInfo dbParamSqlDbTypeProperty;
public override void Configure(IDictionary<string, string> settings)
{
base.Configure(settings);
prepareSql = PropertiesHelper.GetBoolean(Environment.PrepareSql, settings, false);
+
+ using (IDbCommand cmd = CreateCommand())
+ {
+ IDbDataParameter dbParam = cmd.CreateParameter();
+ dbParamSqlDbTypeProperty = dbParam.GetType().GetProperty("SqlDbType");
+ }
}
/// <summary>
@@ -94,5 +102,24 @@
{
get { return true; }
}
+
+ protected override void InitializeParameter(IDbDataParameter dbParam, string name, SqlType sqlType)
+ {
+ base.InitializeParameter(dbParam, name, sqlType);
+
+ AdjustDbParamTypeForLargeObjects(dbParam, sqlType);
+ }
+
+ private void AdjustDbParamTypeForLargeObjects(IDbDataParameter dbParam, SqlType sqlType)
+ {
+ if (sqlType is BinaryBlobSqlType)
+ {
+ dbParamSqlDbTypeProperty.SetValue(dbParam, SqlDbType.Image, null);
+ }
+ else if (sqlType is StringClobSqlType)
+ {
+ dbParamSqlDbTypeProperty.SetValue(dbParam, SqlDbType.NText, null);
+ }
+ }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeDriverFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeDriverFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeDriverFixture.cs 2009-10-08 17:50:58 UTC (rev 4741)
@@ -0,0 +1,112 @@
+using System;
+using System.Collections;
+using NHibernate.Cfg;
+using NHibernate.Dialect;
+using NUnit.Framework;
+using NHibernate.Criterion;
+using System.Collections.Generic;
+
+namespace NHibernate.Test.DriverTest
+{
+ public class SqlServerCeEntity
+ {
+ public virtual int Id { get; set; }
+
+ public virtual string StringProp { get; set; }
+ public virtual byte[] BinaryProp { get; set; }
+
+ public virtual string StringClob { get; set; }
+ public virtual byte[] BinaryBlob { get; set; }
+ }
+
+ [TestFixture]
+ public class SqlServerCeDriverFixture : TestCase
+ {
+ protected override string MappingsAssembly
+ {
+ get { return "NHibernate.Test"; }
+ }
+
+ protected override IList Mappings
+ {
+ get { return new[] { "DriverTest.SqlServerCeEntity.hbm.xml" }; }
+ }
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is MsSqlCeDialect;
+ }
+
+ protected override void OnTearDown()
+ {
+ base.OnTearDown();
+
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Delete("from SqlServerCeEntity");
+ tx.Commit();
+ }
+ }
+
+ [Test]
+ public void SaveLoad()
+ {
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ SqlServerCeEntity entity = new SqlServerCeEntity();
+ entity.StringProp = "a small string";
+ entity.BinaryProp = new byte[100];
+
+ entity.StringClob = new String('a', 8193);
+ entity.BinaryBlob = new byte[8193];
+
+ s.Save(entity);
+ tx.Commit();
+ }
+
+ using (ISession s = OpenSession())
+ {
+ SqlServerCeEntity entity =
+ s.CreateCriteria(typeof(SqlServerCeEntity))
+ .UniqueResult<SqlServerCeEntity>();
+
+ Assert.That(entity.StringProp, Is.EqualTo("a small string"));
+ Assert.That(entity.BinaryProp.Length, Is.EqualTo(100));
+
+ Assert.That(entity.StringClob, Is.EqualTo(new String('a', 8193)));
+ Assert.That(entity.BinaryBlob.Length, Is.EqualTo(8193));
+ }
+ }
+
+ [Test]
+ public void Query()
+ {
+ using (ISession s = OpenSession())
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ SqlServerCeEntity entity = new SqlServerCeEntity();
+ entity.StringProp = "a small string";
+ entity.BinaryProp = System.Text.ASCIIEncoding.ASCII.GetBytes("binary string");
+
+ entity.StringClob = new String('a', 8193);
+ entity.BinaryBlob = new byte[8193];
+
+ s.Save(entity);
+ tx.Commit();
+ }
+
+ using (ISession s = OpenSession())
+ {
+ IList<SqlServerCeEntity> entities =
+ s.CreateCriteria(typeof(SqlServerCeEntity))
+ .Add(Restrictions.Eq("StringProp", "a small string"))
+ .Add(Restrictions.Eq("BinaryProp", System.Text.ASCIIEncoding.ASCII.GetBytes("binary string")))
+ .List<SqlServerCeEntity>();
+
+ Assert.That(entities.Count, Is.EqualTo(1));
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeEntity.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeEntity.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/DriverTest/SqlServerCeEntity.hbm.xml 2009-10-08 17:50:58 UTC (rev 4741)
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ namespace="NHibernate.Test.DriverTest"
+ assembly="NHibernate.Test">
+
+ <class name="SqlServerCeEntity">
+ <id name="Id">
+ <generator class="native" />
+ </id>
+
+ <property name="StringProp"/> <!-- maps to NVARCHAR(255) -->
+ <property name="BinaryProp"/> <!-- maps to VARBINARY(8000) -->
+
+ <property name="StringClob" type="StringClob">
+ <column name="StringClob" sql-type="ntext"/>
+ </property>
+
+ <property name="BinaryBlob" type="BinaryBlob">
+ <column name="BinaryBlob" sql-type="image"/>
+ </property>
+
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-08 17:50:20 UTC (rev 4740)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-10-08 17:50:58 UTC (rev 4741)
@@ -160,6 +160,7 @@
<Compile Include="Criteria\ProjectionsTest.cs" />
<Compile Include="Criteria\Reptile.cs" />
<Compile Include="DriverTest\SqlClientDriverFixture.cs" />
+ <Compile Include="DriverTest\SqlServerCeDriverFixture.cs" />
<Compile Include="ExpressionTest\RestrictionsFixture.cs" />
<Compile Include="Criteria\Student.cs" />
<Compile Include="Criteria\StudentDTO.cs" />
@@ -2029,6 +2030,7 @@
<EmbeddedResource Include="DriverTest\MultiTypeEntity.hbm.xml" />
<EmbeddedResource Include="Criteria\Lambda\Mappings.hbm.xml" />
<EmbeddedResource Include="CfgTest\Loquacious\EntityToCache.hbm.xml" />
+ <EmbeddedResource Include="DriverTest\SqlServerCeEntity.hbm.xml" />
<Content Include="DynamicEntity\package.html" />
<EmbeddedResource Include="NHSpecificTest\NH1959\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH1948\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|