Author: gbayon
Date: Tue Jun 27 12:03:36 2006
New Revision: 417557

URL: http://svn.apache.org/viewvc?rev=417557&view=rev
Log:
- Fixed IBATISNET-165 
- Added SByte type handler

Added:
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
   (with props)
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs   
(with props)
Modified:
    ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypeUtils.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.2005.csproj
    
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-init.sql
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.20005.csproj
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
    
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs

Modified: ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypeUtils.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypeUtils.cs?rev=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypeUtils.cs (original)
+++ ibatis/trunk/cs/mapper/IBatisNet.Common/Utilities/TypeUtils.cs Tue Jun 27 
12:03:36 2006
@@ -59,8 +59,6 @@
                {
                }
 
-               // CLOVER:ON
-
                #endregion
 
         /// <summary>

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.2005.csproj
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.2005.csproj?rev=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.2005.csproj
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/IBatisNet.DataMapper.Test.2005.csproj
 Tue Jun 27 12:03:36 2006
@@ -409,6 +409,7 @@
     <Content Include="Scripts\MSSQL\account-procedure.sql" />
     <Content Include="Scripts\MSSQL\category-init.sql" />
     <Content Include="Scripts\MSSQL\category-procedure.sql" />
+    <Content Include="Scripts\MSSQL\category-procedureWithReturn.sql" />
     <Content Include="Scripts\MSSQL\DataBase.sql" />
     <Content Include="Scripts\MSSQL\DBCreation.sql" />
     <Content Include="Scripts\MSSQL\documents-init.sql" />

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=417557&r1=417556&r2=417557&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
 Tue Jun 27 12:03:36 2006
@@ -17,6 +17,10 @@
   
   <statements>
 
+    <procedure id="InsertCategoryViaStoreProcedureWithReturn" 
parameterMap="insert-params" resultClass="int">
+               ps_InsertCategorieWithReturnValue
+    </procedure>
+    
     <select id="GetCategoryWithNullValueReplacementGuid" 
resultMap="Category-result" >
       select
       Category_ID,

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=417557&r1=417556&r2=417557&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
 Tue Jun 27 12:03:36 2006
@@ -25,6 +25,7 @@
                        InitScript( sqlMap.DataSource, ScriptDirectory + 
"category-procedure.sql" );            
                        InitScript( sqlMap.DataSource, ScriptDirectory + 
"account-init.sql" );  
                        InitScript( sqlMap.DataSource, ScriptDirectory + 
"account-procedure.sql", false );
+            InitScript( sqlMap.DataSource, ScriptDirectory + 
"category-procedureWithReturn.sql", false);
                        InitScript( sqlMap.DataSource, ScriptDirectory + 
"ps_SelectAccount.sql", false );               
                        InitScript( sqlMap.DataSource, ScriptDirectory + 
"swap-procedure.sql" );        
                }
@@ -39,6 +40,34 @@
                #endregion
 
                #region Specific statement store procedure tests for sql server
+
+           /// <summary>
+        /// Test an insert with via a store procedure and getting the 
generatedKey from a t-sql return statement
+        /// </summary>
+        [Test]
+        public void InsertTestIdentityViaProcedureWithReturn ( )
+        {
+            Category category = new Category ( );
+            category.Name = "Mapping object relational";
+
+            int categoryID = ( int ) sqlMap.Insert ( 
"InsertCategoryViaStoreProcedureWithReturn", category );
+            Assert.AreEqual ( 1, categoryID );
+
+            Category category2 = new Category ( );
+            category2.Name = "Nausicaa";
+
+            int categoryID2 = ( int ) sqlMap.Insert ( 
"InsertCategoryViaStoreProcedureWithReturn", category2 );
+            Assert.AreEqual ( 2, categoryID2 );
+
+            Category category3 = sqlMap.QueryForObject<Category> ( 
"GetCategory", categoryID2 ) ;
+            Category category4 = sqlMap.QueryForObject<Category> ( 
"GetCategory", categoryID );
+            
+            Assert.AreEqual ( categoryID2, category3.Id );
+            Assert.AreEqual ( category2.Name, category3.Name );
+
+            Assert.AreEqual ( categoryID, category4.Id );
+            Assert.AreEqual ( category.Name, category4.Name );
+        }
 
                /// <summary>
                /// Test get an account via a store procedure.

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-init.sql
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-init.sql?rev=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-init.sql
 (original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-init.sql
 Tue Jun 27 12:03:36 2006
@@ -15,3 +15,6 @@
 
 if exists (select * from dbo.sysobjects where id = 
object_id(N'[dbo].[ps_InsertCategorie]') and OBJECTPROPERTY(id, N'IsProcedure') 
= 1)
 drop procedure [dbo].[ps_InsertCategorie]
+
+if exists (select * from dbo.sysobjects where id = 
object_id(N'[dbo].[ps_InsertCategorieWithReturnValue]') and OBJECTPROPERTY(id, 
N'IsProcedure') = 1)
+drop procedure [dbo].[ps_InsertCategorieWithReturnValue]

Added: 
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=417557&view=auto
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql
 (added)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper.Test/Scripts/MSSQL/category-procedureWithReturn.sql
 Tue Jun 27 12:03:36 2006
@@ -0,0 +1,11 @@
+CREATE PROCEDURE dbo.[ps_InsertCategorieWithReturnValue]
[EMAIL PROTECTED] [int] output,
[EMAIL PROTECTED] [varchar] (32),
[EMAIL PROTECTED] [uniqueidentifier] 
+AS
+insert into Categories  
+                       (Category_Name, Category_Guid ) 
+values 
+                       (@Category_Name, @Category_Guid)
+return SCOPE_IDENTITY()
+

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.20005.csproj
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.20005.csproj?rev=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.20005.csproj 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/IBatisNet.DataMapper.20005.csproj 
Tue Jun 27 12:03:36 2006
@@ -623,6 +623,7 @@
     <Compile Include="TypeHandlers\Nullables\NullableInt16TypeHandler.cs" />
     <Compile Include="TypeHandlers\Nullables\NullableInt32TypeHandler.cs" />
     <Compile Include="TypeHandlers\Nullables\NullableInt64TypeHandler.cs" />
+    <Compile Include="TypeHandlers\Nullables\NullableSByteTypeHandler.cs" />
     <Compile Include="TypeHandlers\Nullables\NullableSingleTypeHandler.cs" />
     <Compile Include="TypeHandlers\Nullables\NullableUInt16TypeHandler.cs" />
     <Compile Include="TypeHandlers\Nullables\NullableUInt32TypeHandler.cs" />
@@ -636,6 +637,7 @@
     <Compile Include="TypeHandlers\ResultGetterImpl.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="TypeHandlers\SByteTypeHandler.cs" />
     <Compile Include="TypeHandlers\SingleTypeHandler.cs">
       <SubType>Code</SubType>
     </Compile>

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=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs 
Tue Jun 27 12:03:36 2006
@@ -766,7 +766,21 @@
                                {
                                        command.ExecuteNonQuery();
                                }
-                               else
+                else if (_statement is Procedure && (_statement.ResultClass != 
null) &&
+                        
_sqlMap.TypeHandlerFactory.IsSimpleType(_statement.ResultClass) )
+                {
+                    IDataParameter returnValueParameter = 
command.CreateParameter();
+                    returnValueParameter.Direction = 
ParameterDirection.ReturnValue;
+                    command.Parameters.Add(returnValueParameter);
+                    
+                    command.ExecuteNonQuery ( );
+                    generatedKey = returnValueParameter.Value;
+
+                    ITypeHandler typeHandler = 
_sqlMap.TypeHandlerFactory.GetTypeHandler ( _statement.ResultClass );
+                    generatedKey = typeHandler.GetDataBaseValue ( 
generatedKey, _statement.ResultClass );
+                               }
+                           else
+
                                {
                                        generatedKey = command.ExecuteScalar();
                                        if ( (_statement.ResultClass!=null) && 

Added: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs?rev=417557&view=auto
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
 (added)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
 Tue Jun 27 12:03:36 2006
@@ -0,0 +1,111 @@
+#region Apache Notice
+/*****************************************************************************
+ * $Revision: 378879 $
+ * $LastChangedDate$
+ * $LastChangedBy$
+ * 
+ * iBATIS.NET Data Mapper
+ * Copyright (C) 2006/2005 - The Apache Software Foundation
+ *  
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ 
********************************************************************************/
+#endregion
+
+#if dotnet2
+#region Using
+using System;
+using System.Data;
+
+using System.Collections.Generic;
+using IBatisNet.DataMapper.Configuration.ParameterMapping;
+using IBatisNet.DataMapper.Configuration.ResultMapping;
+#endregion
+
+namespace IBatisNet.DataMapper.TypeHandlers.Nullables
+{
+    class NullableSByteTypeHandler : BaseTypeHandler
+    {
+
+        public override void SetParameter(IDataParameter dataParameter, object 
parameterValue, string dbType)
+        {
+            byte? nullableValue = (byte?)parameterValue;
+
+            if (nullableValue.HasValue)
+            {
+                dataParameter.Value = nullableValue.Value;
+            }
+            else
+            {
+                dataParameter.Value = DBNull.Value;
+            }
+        }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="mapping"></param>
+        /// <param name="dataReader"></param>
+        /// <returns></returns>
+        public override object GetValueByName(ResultProperty mapping, 
IDataReader dataReader)
+        {
+            int index = dataReader.GetOrdinal(mapping.ColumnName);
+
+            if (dataReader.IsDBNull(index) == true)
+            {
+                return DBNull.Value;
+            }
+            else
+            {
+                return new sbyte?(Convert.ToSByte(dataReader.GetValue(index)));
+            }
+        }
+
+        public override object GetValueByIndex(ResultProperty mapping, 
IDataReader dataReader)
+        {
+            if (dataReader.IsDBNull(mapping.ColumnIndex) == true)
+            {
+                return DBNull.Value;
+            }
+            else
+            {
+                return new 
sbyte?(Convert.ToSByte(dataReader.GetValue(mapping.ColumnIndex)));
+            }
+        }
+
+        public override object GetDataBaseValue(object outputValue, Type 
parameterType)
+        {
+            return new sbyte?(Convert.ToSByte(outputValue));
+        }
+
+        public override object ValueOf(Type type, string s)
+        {
+            return new sbyte?(Convert.ToSByte(s));
+        }
+
+
+        public override bool IsSimpleType
+        {
+            get { return true; }
+        }
+
+
+        public override object NullValue
+        {
+            get { return new sbyte?(); }
+        }
+    }
+}
+
+#endif

Propchange: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/Nullables/NullableSByteTypeHandler.cs
------------------------------------------------------------------------------
    svn:keywords = Id LastChangedDate LastChangedBy

Added: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs?rev=417557&view=auto
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs 
(added)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs 
Tue Jun 27 12:03:36 2006
@@ -0,0 +1,125 @@
+
+#region Apache Notice
+/*****************************************************************************
+ * $Revision: 408164 $
+ * $LastChangedDate$
+ * $LastChangedBy$
+ * 
+ * iBATIS.NET Data Mapper
+ * Copyright (C) 2006/2005 - The Apache Software Foundation
+ *  
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * 
+ 
********************************************************************************/
+#endregion
+
+#region Using
+
+using System;
+using System.Data;
+using System.Globalization;
+
+using IBatisNet.DataMapper.Configuration.ResultMapping;
+#endregion
+
+
+namespace IBatisNet.DataMapper.TypeHandlers
+{
+    /// <summary>
+    /// SByteTypeHandler.
+    /// </summary>
+    internal sealed class SByteTypeHandler : BaseTypeHandler
+    {
+        /// <summary>
+        /// Gets a column value by the name
+        /// </summary>
+        /// <param name="mapping"></param>
+        /// <param name="dataReader"></param>
+        /// <returns></returns>
+        public override object GetValueByName(ResultProperty mapping, 
IDataReader dataReader)
+        {
+            int index = dataReader.GetOrdinal(mapping.ColumnName);
+
+            if (dataReader.IsDBNull(index) == true)
+            {
+                return System.DBNull.Value;
+            }
+            else
+            {
+                return Convert.ToSByte(dataReader.GetValue(index));
+            }
+        }
+
+        /// <summary>
+        /// Gets a column value by the index
+        /// </summary>
+        /// <param name="mapping"></param>
+        /// <param name="dataReader"></param>
+        /// <returns></returns>
+        public override object GetValueByIndex(ResultProperty mapping, 
IDataReader dataReader)
+        {
+            if (dataReader.IsDBNull(mapping.ColumnIndex) == true)
+            {
+                return System.DBNull.Value;
+            }
+            else
+            {
+                return 
Convert.ToSByte(dataReader.GetValue(mapping.ColumnIndex));
+            }
+        }
+
+        /// <summary>
+        /// Converts the String to the type that this handler deals with
+        /// </summary>
+        /// <param name="type">the tyepe of the property (used only for enum 
conversion)</param>
+        /// <param name="s">the String value</param>
+        /// <returns>the converted value</returns>
+        public override object ValueOf(Type type, string s)
+        {
+            return Convert.ToSByte(s);
+        }
+
+        /// <summary>
+        /// Retrieve ouput database value of an output parameter
+        /// </summary>
+        /// <param name="outputValue">ouput database value</param>
+        /// <param name="parameterType">type used in EnumTypeHandler</param>
+        /// <returns></returns>
+        public override object GetDataBaseValue(object outputValue, Type 
parameterType)
+        {
+            return Convert.ToSByte(outputValue);
+        }
+
+
+        /// <summary>
+        /// Gets a value indicating whether this instance is simple type.
+        /// </summary>
+        /// <value>
+        ///    <c>true</c> if this instance is simple type; otherwise, 
<c>false</c>.
+        /// </value>
+        public override bool IsSimpleType
+        {
+            get { return true; }
+        }
+
+        /// <summary>
+        /// The null value for this type
+        /// </summary>
+        /// <value></value>
+        public override object NullValue
+        {
+            get { throw new InvalidCastException("SByteTypeHandler, could not 
cast a null value in sbyte field."); }
+        }
+    }
+}

Propchange: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/SByteTypeHandler.cs
------------------------------------------------------------------------------
    svn:keywords = Id LastChangedDate LastChangedBy

Modified: 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs?rev=417557&r1=417556&r2=417557&view=diff
==============================================================================
--- 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs 
(original)
+++ 
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/TypeHandlers/TypeHandlerFactory.cs 
Tue Jun 27 12:03:36 2006
@@ -125,6 +125,9 @@
 
             handler = new UInt64TypeHandler();
             this.Register(typeof(UInt64), handler);
+
+            handler = new SByteTypeHandler();
+            this.Register(typeof(SByte), handler);
                    
 #if dotnet2
             handler = new NullableBooleanTypeHandler();
@@ -168,6 +171,9 @@
 
             handler = new NullableUInt64TypeHandler();
             this.Register(typeof(UInt64?), handler);
+
+            handler = new NullableSByteTypeHandler();
+            this.Register(typeof(SByte?), handler);
 #endif
 
             _unknownTypeHandler = new UnknownTypeHandler(this);


Reply via email to