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. |