You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by gb...@apache.org on 2007/09/15 12:40:20 UTC

svn commit: r575902 - in /ibatis/trunk/cs/mapper: IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/ IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ IBatisNet.DataMapper.Test/Scripts/MSSQL/ IBatisNet.DataMapper/ IBatisNet.DataMapper/Configuration/Param...

Author: gbayon
Date: Sat Sep 15 03:40:19 2007
New Revision: 575902

URL: http://svn.apache.org/viewvc?rev=575902&view=rev
Log:
Fix IBATISNET-239
+ corrected bug in NullableTimeSpanTypeHandler and EnumTypeHandler

Modified:
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/Category.xml
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ProcedureTest.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterProperty.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/EnumTypeHandler.cs
    ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableTimeSpanTypeHandler.cs

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/Category.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/Category.xml?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/Category.xml (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Maps/MSSQL/SqlClient/Category.xml Sat Sep 15 03:40:19 2007
@@ -167,7 +167,7 @@
 		</parameterMap>
 			
 		<parameterMap id="insert-params" class="Category">
-			<parameter property="Name" column="Category_Name"/>
+			<parameter property="Name" column="Category_Name" />
 			<parameter property="Id" column="Category_Id" dbType="Int" /><!-- Int for SqlClient, Obdc; Integer for Oledb -->
 			<parameter property="Guid" column="Category_Guid" dbType="UniqueIdentifier"/><!--Guid for Oledb, UniqueIdentifier for SqlClient,Odbc -->
 		</parameterMap>

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ProcedureTest.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ProcedureTest.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ProcedureTest.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/NUnit/SqlMapTests/MSSQL/ProcedureTest.cs Sat Sep 15 03:40:19 2007
@@ -2,6 +2,7 @@
 using System.Collections;
 using IBatisNet.DataMapper.Test.Domain;
 using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
 
 namespace IBatisNet.DataMapper.Test.NUnit.SqlMapTests.MSSQL
 {
@@ -53,13 +54,15 @@
             category.Name = "Mapping object relational";
 
             int categoryID = ( int ) sqlMap.Insert ( "InsertCategoryViaStoreProcedureWithReturn", category );
-            Assert.AreEqual ( 1, categoryID );
+            Assert.That(categoryID, Is.EqualTo(1));
+            Assert.That(category.Id, Is.EqualTo(1));
 
             Category category2 = new Category ( );
             category2.Name = "Nausicaa";
 
             int categoryID2 = ( int ) sqlMap.Insert ( "InsertCategoryViaStoreProcedureWithReturn", category2 );
-            Assert.AreEqual ( 2, categoryID2 );
+            Assert.That(categoryID2, Is.EqualTo(2));
+            Assert.That(category2.Id, Is.EqualTo(2));
 
             Category category3 = sqlMap.QueryForObject<Category> ( "GetCategory", categoryID2 ) ;
             Category category4 = sqlMap.QueryForObject<Category> ( "GetCategory", categoryID );

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql Sat Sep 15 03:40:19 2007
@@ -7,5 +7,6 @@
 			(Category_Name, Category_Guid ) 
 values 
 			(@Category_Name, @Category_Guid)
-return SCOPE_IDENTITY()
+set @Category_Id = SCOPE_IDENTITY()
+return @Category_Id
 

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs Sat Sep 15 03:40:19 2007
@@ -339,31 +339,23 @@
 
 
 		/// <summary>
-		/// Build the properties
+        /// Get the parameter properties child for the xmlNode parameter.
 		/// </summary>
-		/// <param name="scope"></param>
-		public void BuildProperties(ConfigurationScope scope)
+        /// <param name="configScope"></param>
+        public void BuildProperties(ConfigurationScope configScope)
 		{
-			GetProperties( scope );
-		}
+            ParameterProperty property = null;
 
-		/// <summary>
-		///  Get the parameter properties child for the xmlNode parameter.
-		/// </summary>
-		/// <param name="configScope"></param>
-		private void GetProperties(ConfigurationScope configScope)
-		{
-			ParameterProperty property = null;
+            foreach (XmlNode parameterNode in configScope.NodeContext.SelectNodes(DomSqlMapBuilder.ApplyMappingNamespacePrefix(XML_PARAMATER), configScope.XmlNamespaceManager))
+            {
+                property = ParameterPropertyDeSerializer.Deserialize(parameterNode, configScope);
 
-			foreach ( XmlNode parameterNode in configScope.NodeContext.SelectNodes(DomSqlMapBuilder.ApplyMappingNamespacePrefix(XML_PARAMATER), configScope.XmlNamespaceManager) )
-			{
-				property = ParameterPropertyDeSerializer.Deserialize(parameterNode, configScope);
+                property.Initialize(configScope, _parameterClass);
 
-				property.Initialize(configScope, _parameterClass);
-
-				AddParameterProperty(property);
-			}
+                AddParameterProperty(property);
+            }
 		}
+
 		#endregion
 
 		#endregion

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterProperty.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterProperty.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterProperty.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterProperty.cs Sat Sep 15 03:40:19 2007
@@ -318,10 +318,11 @@
 			{
 				if (this.CLRType.Length == 0 )  // Unknown
 				{
-					if (scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(parameterClass)) 
+                    if (_getAccessor!= null &&
+                        scope.DataExchangeFactory.TypeHandlerFactory.IsSimpleType(_getAccessor.MemberType)) 
 					{
 						// Primitive
-						_typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(parameterClass, _dbType);
+                        _typeHandler = scope.DataExchangeFactory.TypeHandlerFactory.GetTypeHandler(_getAccessor.MemberType, _dbType);
 					}
 					else
 					{

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs Sat Sep 15 03:40:19 2007
@@ -172,10 +172,33 @@
                             }
                         }
 
-                        object dataBaseValue = mapping.TypeHandler.GetDataBaseValue(((IDataParameter)command.Parameters[parameterName]).Value, result.GetType());
-                        request.IsRowDataFound = request.IsRowDataFound || (dataBaseValue != null);
+                        // Fix IBATISNET-239
+                        //"Normalize" System.DBNull parameters
+                        IDataParameter dataParameter = (IDataParameter)command.Parameters[parameterName];
+                        object dbValue = dataParameter.Value;
 
-                        request.ParameterMap.SetOutputParameter(ref result, mapping, dataBaseValue);
+                        object value = null;
+
+                        bool wasNull = (dbValue == DBNull.Value);
+                        if (wasNull)
+                        {
+                            if (mapping.HasNullValue)
+                            {
+                               value = mapping.TypeHandler.ValueOf(mapping.GetAccessor.MemberType, mapping.NullValue);
+                            }
+                            else
+                            {
+                                value = mapping.TypeHandler.NullValue;
+                            }
+                        }
+                        else
+                        {
+                            value = mapping.TypeHandler.GetDataBaseValue(dataParameter.Value, result.GetType());
+                        }
+
+                        request.IsRowDataFound = request.IsRowDataFound || (value != null);
+
+                        request.ParameterMap.SetOutputParameter(ref result, mapping, value);
                     }
                 }
             }

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/SqlMapper.cs Sat Sep 15 03:40:19 2007
@@ -1313,10 +1313,6 @@
 				IMappedStatement statement = GetMappedStatement(statementName);
 				generatedKey = statement.ExecuteInsert(session, parameterObject);
 			} 
-			catch
-			{
-				throw;
-			}
 			finally
 			{
 				if ( isSessionLocal )

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/EnumTypeHandler.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/EnumTypeHandler.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/EnumTypeHandler.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/EnumTypeHandler.cs Sat Sep 15 03:40:19 2007
@@ -48,7 +48,16 @@
 		/// <param name="dbType">the dbType of the parameter</param>
 		public override void SetParameter(IDataParameter dataParameter, object parameterValue, string dbType)
 		{
-			dataParameter.Value =  Convert.ChangeType( parameterValue, Enum.GetUnderlyingType( parameterValue.GetType() ) );
+            if (parameterValue != null)
+            {
+			    dataParameter.Value =  Convert.ChangeType( parameterValue, Enum.GetUnderlyingType( parameterValue.GetType() ) );
+            }
+            else
+            {
+                // When sending a null parameter value to the server,
+                // the user must specify DBNull, not null. 
+                dataParameter.Value = DBNull.Value;
+            }
 		}
 
 		/// <summary>

Modified: ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableTimeSpanTypeHandler.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableTimeSpanTypeHandler.cs?rev=575902&r1=575901&r2=575902&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableTimeSpanTypeHandler.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableTimeSpanTypeHandler.cs Sat Sep 15 03:40:19 2007
@@ -50,7 +50,7 @@
 
             if (nullableValue.HasValue)
             {
-                dataParameter.Value = nullableValue.Value;
+                dataParameter.Value = nullableValue.Value.Ticks; //nullableValue.Value;
             }
             else
             {