diff --git a/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs
new file mode 100644
index 00000000000..a0f0f8664f9
--- /dev/null
+++ b/src/NHibernate.Test/Async/DriverTest/OdbcDriverFixture.cs
@@ -0,0 +1,117 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System;
+using System.Collections;
+using NHibernate.Dialect;
+using NHibernate.Driver;
+using NHibernate.Engine;
+using NUnit.Framework;
+
+namespace NHibernate.Test.DriverTest
+{
+ using System.Threading.Tasks;
+ [TestFixture]
+ public class OdbcDriverFixtureAsync : TestCase
+ {
+ protected override string MappingsAssembly => "NHibernate.Test";
+
+ protected override IList Mappings => new[] { "DriverTest.MultiTypeEntity.hbm.xml" };
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return dialect is MsSql2000Dialect;
+ }
+
+ protected override bool AppliesTo(ISessionFactoryImplementor factory)
+ {
+ return factory.ConnectionProvider.Driver is OdbcDriver;
+ }
+
+ protected override void OnTearDown()
+ {
+ base.OnTearDown();
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ s.CreateQuery("delete from MultiTypeEntity").ExecuteUpdate();
+ t.Commit();
+ }
+ }
+
+ [Test]
+ public async Task CrudAsync()
+ {
+ // Should use default dimension for CRUD op because the mapping does not
+ // have dimensions specified.
+ object savedId;
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ savedId = await (s.SaveAsync(
+ new MultiTypeEntity
+ {
+ StringProp = "a",
+ StringClob = "a",
+ BinaryBlob = new byte[] { 1, 2, 3 },
+ Binary = new byte[] { 4, 5, 6 },
+ Currency = 123.4m,
+ Double = 123.5d,
+ Decimal = 789.5m,
+ DecimalHighScale = 1234567890.0123456789m
+ }));
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var m = await (s.GetAsync(savedId));
+
+ Assert.That(m.StringProp, Is.EqualTo("a"), "StringProp");
+ Assert.That(m.StringClob, Is.EqualTo("a"), "StringClob");
+ Assert.That(m.BinaryBlob, Is.EqualTo(new byte[] { 1, 2, 3 }), "BinaryBlob");
+ Assert.That(m.Binary, Is.EqualTo(new byte[] { 4, 5, 6 }), "BinaryBlob");
+ Assert.That(m.Currency, Is.EqualTo(123.4m), "Currency");
+ Assert.That(m.Double, Is.EqualTo(123.5d).Within(0.0001d), "Double");
+ Assert.That(m.Decimal, Is.EqualTo(789.5m), "Decimal");
+ Assert.That(m.DecimalHighScale, Is.EqualTo(1234567890.0123456789m), "DecimalHighScale");
+
+ m.StringProp = "b";
+ m.StringClob = "b";
+ m.BinaryBlob = new byte[] { 4, 5, 6 };
+ m.Binary = new byte[] { 7, 8, 9 };
+ m.Currency = 456.78m;
+ m.Double = 987.6d;
+ m.Decimal = 1323456.45m;
+ m.DecimalHighScale = 9876543210.0123456789m;
+ await (t.CommitAsync());
+ }
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var m = await (s.LoadAsync(savedId));
+
+ Assert.That(m.StringProp, Is.EqualTo("b"), "StringProp");
+ Assert.That(m.StringClob, Is.EqualTo("b"), "StringClob");
+ Assert.That(m.BinaryBlob, Is.EqualTo(new byte[] { 4, 5, 6 }), "BinaryBlob");
+ Assert.That(m.Binary, Is.EqualTo(new byte[] { 7, 8, 9 }), "BinaryBlob");
+ Assert.That(m.Currency, Is.EqualTo(456.78m), "Currency");
+ Assert.That(m.Double, Is.EqualTo(987.6d).Within(0.0001d), "Double");
+ Assert.That(m.Decimal, Is.EqualTo(1323456.45m), "Decimal");
+ Assert.That(m.DecimalHighScale, Is.EqualTo(9876543210.0123456789m), "DecimalHighScale");
+
+ await (t.CommitAsync());
+ }
+ }
+ }
+}
diff --git a/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs b/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs
index 2bb3106f6a1..62fe9232900 100644
--- a/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs
+++ b/src/NHibernate.Test/Async/DriverTest/SqlClientDriverFixture.cs
@@ -10,9 +10,13 @@
using System;
using System.Collections;
+using System.Data;
using NHibernate.Dialect;
using NHibernate.Driver;
+using NHibernate.Engine;
+using NHibernate.SqlTypes;
using NUnit.Framework;
+using Environment = NHibernate.Cfg.Environment;
namespace NHibernate.Test.DriverTest
{
@@ -21,19 +25,30 @@ namespace NHibernate.Test.DriverTest
[TestFixture]
public class SqlClientDriverFixtureAsync : TestCase
{
- protected override string MappingsAssembly
+ protected override string MappingsAssembly => "NHibernate.Test";
+
+ protected override IList Mappings => new[] { "DriverTest.MultiTypeEntity.hbm.xml" };
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
{
- get { return "NHibernate.Test"; }
+ return dialect is MsSql2008Dialect;
}
- protected override IList Mappings
+ protected override bool AppliesTo(ISessionFactoryImplementor factory)
{
- get { return new[] { "DriverTest.MultiTypeEntity.hbm.xml" }; }
+ return factory.ConnectionProvider.Driver is SqlClientDriver;
}
- protected override bool AppliesTo(Dialect.Dialect dialect)
+ protected override void OnTearDown()
{
- return dialect is MsSql2008Dialect;
+ base.OnTearDown();
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ s.CreateQuery("delete from MultiTypeEntity").ExecuteUpdate();
+ t.Commit();
+ }
}
[Test]
@@ -42,40 +57,63 @@ public async Task CrudAsync()
// Should use default dimension for CRUD op because the mapping does not
// have dimensions specified.
object savedId;
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
{
- savedId = await (s.SaveAsync(new MultiTypeEntity
- {
- StringProp = "a",
- StringClob = "a",
- BinaryBlob = new byte[]{1,2,3},
- Binary = new byte[] { 4, 5, 6 },
- Currency = 123.4m,
- Double = 123.5d,
- Decimal = 789.5m
- }));
+ savedId = await (s.SaveAsync(
+ new MultiTypeEntity
+ {
+ StringProp = "a",
+ StringClob = "a",
+ BinaryBlob = new byte[] { 1, 2, 3 },
+ Binary = new byte[] { 4, 5, 6 },
+ Currency = 123.4m,
+ Double = 123.5d,
+ Decimal = 789.5m,
+ DecimalHighScale = 1234567890.0123456789m
+ }));
await (t.CommitAsync());
}
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
{
var m = await (s.GetAsync(savedId));
+
+ Assert.That(m.StringProp, Is.EqualTo("a"), "StringProp");
+ Assert.That(m.StringClob, Is.EqualTo("a"), "StringClob");
+ Assert.That(m.BinaryBlob, Is.EqualTo(new byte[] { 1, 2, 3 }), "BinaryBlob");
+ Assert.That(m.Binary, Is.EqualTo(new byte[] { 4, 5, 6 }), "BinaryBlob");
+ Assert.That(m.Currency, Is.EqualTo(123.4m), "Currency");
+ Assert.That(m.Double, Is.EqualTo(123.5d).Within(0.0001d), "Double");
+ Assert.That(m.Decimal, Is.EqualTo(789.5m), "Decimal");
+ Assert.That(m.DecimalHighScale, Is.EqualTo(1234567890.0123456789m), "DecimalHighScale");
+
m.StringProp = "b";
m.StringClob = "b";
- m.BinaryBlob = new byte[] {4,5,6};
- m.Binary = new byte[] {7,8,9};
+ m.BinaryBlob = new byte[] { 4, 5, 6 };
+ m.Binary = new byte[] { 7, 8, 9 };
m.Currency = 456.78m;
m.Double = 987.6d;
m.Decimal = 1323456.45m;
+ m.DecimalHighScale = 9876543210.0123456789m;
await (t.CommitAsync());
}
- using (ISession s = OpenSession())
- using (ITransaction t = s.BeginTransaction())
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
{
- await (s.CreateQuery("delete from MultiTypeEntity").ExecuteUpdateAsync());
+ var m = await (s.LoadAsync(savedId));
+
+ Assert.That(m.StringProp, Is.EqualTo("b"), "StringProp");
+ Assert.That(m.StringClob, Is.EqualTo("b"), "StringClob");
+ Assert.That(m.BinaryBlob, Is.EqualTo(new byte[] { 4, 5, 6 }), "BinaryBlob");
+ Assert.That(m.Binary, Is.EqualTo(new byte[] { 7, 8, 9 }), "BinaryBlob");
+ Assert.That(m.Currency, Is.EqualTo(456.78m), "Currency");
+ Assert.That(m.Double, Is.EqualTo(987.6d).Within(0.0001d), "Double");
+ Assert.That(m.Decimal, Is.EqualTo(1323456.45m), "Decimal");
+ Assert.That(m.DecimalHighScale, Is.EqualTo(9876543210.0123456789m), "DecimalHighScale");
+
await (t.CommitAsync());
}
}
@@ -83,9 +121,6 @@ public async Task CrudAsync()
[Test]
public async Task QueryPlansAreReusedAsync()
{
- if (!(Sfi.ConnectionProvider.Driver is SqlClientDriver))
- Assert.Ignore("Test designed for SqlClientDriver only");
-
using (ISession s = OpenSession())
using (ITransaction t = s.BeginTransaction())
{
@@ -102,7 +137,7 @@ public async Task QueryPlansAreReusedAsync()
var beforeCount = await (countPlansCommand.UniqueResultAsync());
var insertCount = 10;
- for (var i=0; i());
- Assert.That(afterCount - beforeCount, Is.LessThan(insertCount - 1),
- string.Format("Excessive query plans created: before={0} after={1}", beforeCount, afterCount));
+ Assert.That(
+ afterCount - beforeCount,
+ Is.LessThan(insertCount - 1),
+ $"Excessive query plans created: before={beforeCount} after={afterCount}");
await (t.RollbackAsync());
}
}
}
-}
\ No newline at end of file
+}
diff --git a/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs b/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
index d3d4fb2cfbd..189d89d9e09 100644
--- a/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
+++ b/src/NHibernate.Test/Async/TypesTest/DecimalTypeFixture.cs
@@ -8,7 +8,8 @@
//------------------------------------------------------------------------------
-using System;
+using NHibernate.Cfg;
+using NHibernate.Dialect;
using NHibernate.Type;
using NUnit.Framework;
@@ -21,34 +22,125 @@ namespace NHibernate.Test.TypesTest
[TestFixture]
public class DecimalTypeFixtureAsync : TypeFixtureBase
{
- protected override string TypeName
+ protected override string TypeName => "Decimal";
+ private const int _highScaleId = 2;
+ private const decimal _highScaleTestedValue = 123456789.123456789m;
+
+ protected override bool AppliesTo(Dialect.Dialect dialect)
+ {
+ return base.AppliesTo(dialect) && !TestDialect.HasBrokenDecimalType;
+ }
+
+ protected override void Configure(Configuration configuration)
{
- get { return "Decimal"; }
+ base.Configure(configuration);
+
+ if (Dialect is FirebirdDialect)
+ {
+ configuration.SetProperty(Environment.QueryDefaultCastPrecision, "18");
+ configuration.SetProperty(Environment.QueryDefaultCastScale, "9");
+ }
+ }
+
+ protected override void OnSetUp()
+ {
+ base.OnSetUp();
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ s.Save(new DecimalClass { Id = _highScaleId, HighScaleDecimalValue = _highScaleTestedValue });
+ t.Commit();
+ }
+ }
+
+ protected override void OnTearDown()
+ {
+ base.OnTearDown();
+
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ s.CreateQuery("delete from DecimalClass").ExecuteUpdate();
+ t.Commit();
+ }
}
[Test]
public async Task ReadWriteAsync()
{
- decimal expected = 5.64351M;
+ const decimal expected = 5.64351M;
- DecimalClass basic = new DecimalClass();
- basic.Id = 1;
- basic.DecimalValue = expected;
+ var basic = new DecimalClass
+ {
+ Id = 1,
+ DecimalValue = expected
+ };
- ISession s = OpenSession();
- await (s.SaveAsync(basic));
- await (s.FlushAsync());
- s.Close();
+ using (var s = OpenSession())
+ {
+ await (s.SaveAsync(basic));
+ await (s.FlushAsync());
+ }
- s = OpenSession();
- basic = (DecimalClass) await (s.LoadAsync(typeof(DecimalClass), 1));
+ using (var s = OpenSession())
+ {
+ basic = await (s.LoadAsync(1));
- Assert.AreEqual(expected, basic.DecimalValue);
- Assert.AreEqual(5.643510M, basic.DecimalValue);
+ Assert.That(basic.DecimalValue, Is.EqualTo(expected));
+ Assert.That(basic.DecimalValue, Is.EqualTo(5.643510M));
+ }
+ }
+
+ [Test]
+ public async Task HighScaleParameterSelectAsync()
+ {
+ using (var s = OpenSession())
+ using (var t = s.BeginTransaction())
+ {
+ var selectedValue = await (s
+ .CreateQuery("select dc.HighScaleDecimalValue + :d1 from DecimalClass dc")
+ .SetMaxResults(1)
+ .SetDecimal("d1", _highScaleTestedValue)
+ .UniqueResultAsync