|
From: <fab...@us...> - 2009-02-04 17:25:48
|
Revision: 4038
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4038&view=rev
Author: fabiomaulo
Date: 2009-02-04 17:25:35 +0000 (Wed, 04 Feb 2009)
Log Message:
-----------
Fix NH-1429 (Guid for Oracle)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs
trunk/nhibernate/src/NHibernate/Driver/OracleClientDriver.cs
trunk/nhibernate/src/NHibernate/Driver/OracleDataClientDriver.cs
trunk/nhibernate/src/NHibernate/Type/GuidType.cs
Modified: trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs 2009-02-04 15:54:52 UTC (rev 4037)
+++ trunk/nhibernate/src/NHibernate/Dialect/Oracle8iDialect.cs 2009-02-04 17:25:35 UTC (rev 4038)
@@ -68,7 +68,7 @@
RegisterNumericTypeMappings();
RegisterDateTimeTypeMappings();
RegisterLargeObjectTypeMappings();
-
+ RegisterGuidTypeMapping();
RegisterReverseHibernateTypeMappings();
RegisterFunctions();
@@ -76,6 +76,11 @@
RegisterDefaultProperties();
}
+ protected virtual void RegisterGuidTypeMapping()
+ {
+ RegisterColumnType(DbType.Guid, "RAW(16)");
+ }
+
protected virtual void RegisterCharacterTypeMappings()
{
RegisterColumnType(DbType.AnsiStringFixedLength, "CHAR(255)");
Modified: trunk/nhibernate/src/NHibernate/Driver/OracleClientDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/OracleClientDriver.cs 2009-02-04 15:54:52 UTC (rev 4037)
+++ trunk/nhibernate/src/NHibernate/Driver/OracleClientDriver.cs 2009-02-04 17:25:35 UTC (rev 4038)
@@ -1,5 +1,6 @@
using System.Data;
using System.Data.OracleClient;
+using NHibernate.SqlTypes;
namespace NHibernate.Driver
{
@@ -8,6 +9,8 @@
/// </summary>
public class OracleClientDriver : DriverBase
{
+ private static readonly SqlType GuidSqlType = new SqlType(DbType.Binary, 16);
+
public override IDbConnection CreateConnection()
{
return new OracleConnection();
@@ -32,5 +35,17 @@
{
get { return ":"; }
}
+
+ protected override void InitializeParameter(IDbDataParameter dbParam, string name, SqlType sqlType)
+ {
+ if (sqlType.DbType == DbType.Guid)
+ {
+ base.InitializeParameter(dbParam, name, GuidSqlType);
+ }
+ else
+ {
+ base.InitializeParameter(dbParam, name, sqlType);
+ }
+ }
}
}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Driver/OracleDataClientDriver.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Driver/OracleDataClientDriver.cs 2009-02-04 15:54:52 UTC (rev 4037)
+++ trunk/nhibernate/src/NHibernate/Driver/OracleDataClientDriver.cs 2009-02-04 17:25:35 UTC (rev 4038)
@@ -14,6 +14,7 @@
/// </remarks>
public class OracleDataClientDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider
{
+ private static readonly SqlType GuidSqlType = new SqlType(DbType.Binary, 16);
/// <summary>
/// Initializes a new instance of <see cref="OracleDataClientDriver"/>.
/// </summary>
@@ -54,11 +55,18 @@
{
// if the parameter coming in contains a boolean then we need to convert it
// to another type since ODP.NET doesn't support DbType.Boolean
- if (sqlType.DbType == DbType.Boolean)
+ switch (sqlType.DbType)
{
- sqlType = SqlTypeFactory.Int16;
+ case DbType.Boolean:
+ base.InitializeParameter(dbParam, name, SqlTypeFactory.Int16);
+ break;
+ case DbType.Guid:
+ base.InitializeParameter(dbParam, name, GuidSqlType);
+ break;
+ default:
+ base.InitializeParameter(dbParam, name, sqlType);
+ break;
}
- base.InitializeParameter(dbParam, name, sqlType);
}
#region IEmbeddedBatcherFactoryProvider Members
Modified: trunk/nhibernate/src/NHibernate/Type/GuidType.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Type/GuidType.cs 2009-02-04 15:54:52 UTC (rev 4037)
+++ trunk/nhibernate/src/NHibernate/Type/GuidType.cs 2009-02-04 17:25:35 UTC (rev 4038)
@@ -28,10 +28,13 @@
{
return rs.GetGuid(index);
}
- else
+
+ if (rs.GetFieldType(index) == typeof(byte[]))
{
- return new Guid(Convert.ToString(rs[index]));
- }
+ return new Guid((byte[])(rs[index]));
+ }
+
+ return new Guid(Convert.ToString(rs[index]));
}
/// <summary>
@@ -53,7 +56,9 @@
public override void Set(IDbCommand cmd, object value, int index)
{
- ((IDataParameter)cmd.Parameters[index]).Value = value;
+ var dp = (IDataParameter) cmd.Parameters[index];
+
+ dp.Value = dp.DbType == DbType.Binary ? ((Guid)value).ToByteArray() : value;
}
/// <summary></summary>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|