Skip to content

Commit 1e0bc28

Browse files
committed
NH-3620 Fix ORA-01483 when inserting two blobs and a date using the OracleManagedDataClientDriver
1 parent cd13018 commit 1e0bc28

File tree

5 files changed

+74
-0
lines changed

5 files changed

+74
-0
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
using System;
2+
using NHibernate.Driver;
3+
using NUnit.Framework;
4+
5+
namespace NHibernate.Test.NHSpecificTest.NH3620 {
6+
[TestFixture]
7+
public class Fixture : BugTestCase {
8+
protected override bool AppliesTo(Engine.ISessionFactoryImplementor factory) {
9+
return (factory.ConnectionProvider.Driver is OracleManagedDataClientDriver);
10+
}
11+
12+
protected override void OnTearDown() {
13+
CleanupData();
14+
}
15+
16+
[Test]
17+
public void Should_insert_two_blobs_and_a_date() {
18+
using (ISession s = OpenSession()) {
19+
var blob = new Byte[1024*24];
20+
for (int i = 0; i < blob.Length; i++) {
21+
blob[i] = 65;
22+
}
23+
24+
using (ITransaction tx = s.BeginTransaction()) {
25+
var tb = new TwoBlobs {
26+
Blob1 = blob, Blob2 = blob, Id = 1, TheDate = DateTime.Now
27+
};
28+
s.Save(tb);
29+
tx.Commit();
30+
}
31+
}
32+
}
33+
34+
private void CleanupData() {
35+
using (ISession session = OpenSession()) {
36+
using (ITransaction tx = session.BeginTransaction()) {
37+
session.Delete("from TwoBlobs");
38+
tx.Commit();
39+
}
40+
}
41+
}
42+
}
43+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
3+
assembly="NHibernate.Test"
4+
namespace="NHibernate.Test.NHSpecificTest.NH3620">
5+
<class name="TwoBlobs">
6+
<id name="Id" type="Int32" />
7+
<property name="TheDate" />
8+
<property name="Blob1" length="5224880" />
9+
<property name="Blob2" length="5224880" />
10+
11+
</class>
12+
</hibernate-mapping>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
3+
namespace NHibernate.Test.NHSpecificTest.NH3620 {
4+
public class TwoBlobs {
5+
public virtual int Id { get; set; }
6+
public virtual byte[] Blob1 { get; set; }
7+
public virtual byte[] Blob2 { get; set; }
8+
public virtual DateTime TheDate { get; set; }
9+
10+
}
11+
}

src/NHibernate.Test/NHibernate.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,8 @@
686686
<Compile Include="NHSpecificTest\BagWithLazyExtraAndFilter\Fixture.cs" />
687687
<Compile Include="Linq\ByMethod\DistinctTests.cs" />
688688
<Compile Include="Component\Basic\ComponentWithUniqueConstraintTests.cs" />
689+
<Compile Include="NHSpecificTest\NH3620\Fixture.cs" />
690+
<Compile Include="NHSpecificTest\NH3620\TwoBlobs.cs" />
689691
<Compile Include="NHSpecificTest\NH1082\SynchronizationThatThrowsExceptionAtBeforeTransactionCompletion.cs" />
690692
<Compile Include="NHSpecificTest\NH2756\Fixture.cs" />
691693
<Compile Include="NHSpecificTest\NH2756\Model.cs" />
@@ -3371,6 +3373,7 @@
33713373
<EmbeddedResource Include="NHSpecificTest\NH1810\Mappings.hbm.xml" />
33723374
<EmbeddedResource Include="NHSpecificTest\NH1092\Mappings.hbm.xml" />
33733375
<EmbeddedResource Include="NHSpecificTest\NH1507\Mappings.hbm.xml" />
3376+
<EmbeddedResource Include="NHSpecificTest\NH3620\Mappings.hbm.xml" />
33743377
<EmbeddedResource Include="NHSpecificTest\NH1044\Mappings.hbm.xml" />
33753378
<EmbeddedResource Include="NHSpecificTest\NH1427\Mappings.hbm.xml" />
33763379
<EmbeddedResource Include="NHSpecificTest\NH1531\Mappings.hbm.xml" />

src/NHibernate/Driver/OracleManagedDataClientDriver.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public class OracleManagedDataClientDriver : ReflectionBasedDriver, IEmbeddedBat
2121
private readonly PropertyInfo oracleDbType;
2222
private readonly object oracleDbTypeRefCursor;
2323
private readonly object oracleDbTypeXmlType;
24+
private readonly object oracleDbTypeBlob;
2425

2526
/// <summary>
2627
/// Initializes a new instance of <see cref="OracleDataClientDriver"/>.
@@ -44,6 +45,7 @@ public OracleManagedDataClientDriver()
4445
var oracleDbTypeEnum = ReflectHelper.TypeFromAssembly("Oracle.ManagedDataAccess.Client.OracleDbType", driverAssemblyName, false);
4546
oracleDbTypeRefCursor = Enum.Parse(oracleDbTypeEnum, "RefCursor");
4647
oracleDbTypeXmlType = Enum.Parse(oracleDbTypeEnum, "XmlType");
48+
oracleDbTypeBlob = Enum.Parse(oracleDbTypeEnum, "Blob");
4749
}
4850

4951
/// <summary></summary>
@@ -83,6 +85,9 @@ protected override void InitializeParameter(IDbDataParameter dbParam, string nam
8385
case DbType.Xml:
8486
this.InitializeParameter(dbParam, name, oracleDbTypeXmlType);
8587
break;
88+
case DbType.Binary:
89+
this.InitializeParameter(dbParam, name, oracleDbTypeBlob);
90+
break;
8691
default:
8792
base.InitializeParameter(dbParam, name, sqlType);
8893
break;

0 commit comments

Comments
 (0)