diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs b/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs new file mode 100644 index 00000000000..7d73e7f391b --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3518/ClassWithXmlMember.cs @@ -0,0 +1,23 @@ +using System.Xml; + +namespace NHibernate.Test.NHSpecificTest.NH3518 +{ + public class ClassWithXmlMember + { + private int _id; + + public ClassWithXmlMember(string name, XmlDocument xml) + { + Xml = xml; + this.Name = name; + } + + private ClassWithXmlMember() + { + } + + public string Name { get; private set; } + + public XmlDocument Xml { get; private set; } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml new file mode 100644 index 00000000000..77e6f779e68 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3518/Mappings.hbm.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + diff --git a/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs new file mode 100644 index 00000000000..4d252f6cfd3 --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3518/XmlColumnTest.cs @@ -0,0 +1,48 @@ +using System.Xml; +using NHibernate.Cfg; +using NHibernate.Driver; +using NHibernate.Engine; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH3518 +{ + [TestFixture] + public class XmlColumnTest : BugTestCase + { + protected override void OnTearDown() + { + using (var session = sessions.OpenSession()) + using (var t = session.BeginTransaction()) + { + session.Delete("from ClassWithXmlMember"); + t.Commit(); + } + } + + protected override bool AppliesTo(ISessionFactoryImplementor factory) + { + return factory.ConnectionProvider.Driver is SqlClientDriver; + } + + protected override void Configure(Configuration configuration) + { + configuration.SetProperty(Environment.PrepareSql, "true"); + } + + [Test] + public void FilteredQuery() + { + var xmlDocument = new XmlDocument(); + var xmlElement = xmlDocument.CreateElement("testXml"); + xmlDocument.AppendChild(xmlElement); + var parentA = new ClassWithXmlMember("A", xmlDocument); + + using (var s = sessions.OpenSession()) + using (var t = s.BeginTransaction()) + { + s.Save(parentA); + t.Commit(); + } + } + } +} diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index 875874ec7cb..6afa978f17f 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -718,6 +718,8 @@ + + @@ -3153,6 +3155,7 @@ + diff --git a/src/NHibernate/Driver/SqlClientDriver.cs b/src/NHibernate/Driver/SqlClientDriver.cs index fa33488ecc8..4c748ff38a9 100644 --- a/src/NHibernate/Driver/SqlClientDriver.cs +++ b/src/NHibernate/Driver/SqlClientDriver.cs @@ -15,6 +15,8 @@ public class SqlClientDriver : DriverBase, IEmbeddedBatcherFactoryProvider public const int MaxSizeForAnsiClob = 2147483647; // int.MaxValue public const int MaxSizeForClob = 1073741823; // int.MaxValue / 2 public const int MaxSizeForBlob = 2147483647; // int.MaxValue + //http://stackoverflow.com/a/7264795/259946 + public const int MaxSizeForXml = 2147483647; // int.MaxValue public const int MaxSizeForLengthLimitedAnsiString = 8000; public const int MaxSizeForLengthLimitedString = 4000; public const int MaxSizeForLengthLimitedBinary = 8000; @@ -141,6 +143,9 @@ protected static void SetDefaultParameterSize(IDbDataParameter dbParam, SqlType case DbType.DateTimeOffset: dbParam.Size = MaxDateTimeOffset; break; + case DbType.Xml: + dbParam.Size = MaxSizeForXml; + break; } }