ibatis-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gba...@apache.org
Subject svn commit: r703732 - in /ibatis/trunk/cs/V3/src: Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/ Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/ Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/ Apache.Ibatis.DataMappe...
Date Sat, 11 Oct 2008 21:11:55 GMT
Author: gbayon
Date: Sat Oct 11 14:11:54 2008
New Revision: 703732

URL: http://svn.apache.org/viewvc?rev=703732&view=rev
Log:
Fix IBATISNET-283

Modified:
    ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/Account.cs
    ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/StatementTest.cs
    ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/AliasModule.cs
    ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Maps/Account.xml
    ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/DataExchange/DotNetObjectDataExchange.cs

Modified: ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/Account.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/Account.cs?rev=703732&r1=703731&r2=703732&view=diff
==============================================================================
--- ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/Account.cs
(original)
+++ ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Domain/Account.cs
Sat Oct 11 14:11:54 2008
@@ -1,15 +1,58 @@
 using System;
-using System.Collections;
 using System.Collections.Generic;
 
 namespace Apache.Ibatis.DataMapper.SqlClient.Test.Domain
 {
-	/// <summary>
+    public interface IAccount
+    {
+        int Id { get; set; }
+        string FirstName { get; set; }
+        string LastName { get; set; }
+        string EmailAddress { get; set; }
+    }
+
+    public class BaseAccount: IAccount
+    {
+        private int id;
+        private string firstName;
+        private string lastName;
+        private string emailAddress;
+
+        #region IAccount Members
+
+        public int Id
+        {
+            get { return id; }
+            set { id = value; }
+        }
+
+        public string FirstName
+        {
+            get { return firstName; }
+            set { firstName = value; }
+        }
+
+        public string LastName
+        {
+            get { return lastName; }
+            set { lastName = value; }
+        }
+
+        public string EmailAddress
+        {
+            get { return emailAddress; }
+            set { emailAddress = value; }
+        }
+
+        #endregion
+    }
+
+    /// <summary>
 	/// Description résumée de Account.
 	/// </summary>
 	[Serializable]
-	public class Account
-	{
+	public class Account : IAccount
+    {
 		private int id;
 		private string _firstName;
 		private string _lastName;

Modified: ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/StatementTest.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/StatementTest.cs?rev=703732&r1=703731&r2=703732&view=diff
==============================================================================
--- ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/StatementTest.cs
(original)
+++ ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/StatementTest.cs
Sat Oct 11 14:11:54 2008
@@ -45,6 +45,23 @@
 
         #region Object Query tests
 
+        /// <summary>
+        /// Test use a statement with property subtitution
+        /// (JIRA 22)
+        /// </summary>
+        [Test]
+        public void TestInterface()
+        {
+            BaseAccount account = new BaseAccount();
+
+            dataMapper.QueryForObject<IAccount>("GetInterfaceAccount", 1, account);
+
+            Assert.AreEqual(1, account.Id, "account.Id");
+            Assert.AreEqual("Joe", account.FirstName, "account.FirstName");
+            Assert.AreEqual("Dalton", account.LastName, "account.LastName");
+            Assert.AreEqual("Joe.Dalton@somewhere.com", account.EmailAddress, "account.EmailAddress");
+        }
+
 
         [Test]
         public void QueryForDatatable_with_resulclass_should_work()

Modified: ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/AliasModule.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/AliasModule.cs?rev=703732&r1=703731&r2=703732&view=diff
==============================================================================
--- ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/AliasModule.cs
(original)
+++ ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Modules/AliasModule.cs
Sat Oct 11 14:11:54 2008
@@ -15,7 +15,7 @@
             RegisterAlias<SqlSourceWithParameter>();
             RegisterAlias<SqlSourceWithInlineParameter>();
             RegisterAlias<NVelocityDynamicEngine>();
-
+            RegisterAlias<IAccount>();
         }
     }
 }

Modified: ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Maps/Account.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Maps/Account.xml?rev=703732&r1=703731&r2=703732&view=diff
==============================================================================
--- ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Maps/Account.xml (original)
+++ ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Maps/Account.xml Sat
Oct 11 14:11:54 2008
@@ -501,6 +501,16 @@
 					where Account_ID = #value#
 			]]>
 		</select>
+
+    <select id="GetInterfaceAccount" resultClass="IAccount">
+					select
+					Account_ID as Id,
+					Account_FirstName as FirstName,
+					Account_LastName as LastName,
+					Account_Email as EmailAddress
+					from Accounts
+					where Account_ID = #value#
+    </select>
 		
 		<select id="GetAccountViaInlineParameters"
 				resultMap="indexed-account-result">

Modified: ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/DataExchange/DotNetObjectDataExchange.cs
URL: http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/DataExchange/DotNetObjectDataExchange.cs?rev=703732&r1=703731&r2=703732&view=diff
==============================================================================
--- ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/DataExchange/DotNetObjectDataExchange.cs
(original)
+++ ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/DataExchange/DotNetObjectDataExchange.cs
Sat Oct 11 14:11:54 2008
@@ -37,7 +37,7 @@
 	public sealed class DotNetObjectDataExchange : BaseDataExchange
 	{
 
-        private readonly Type _parameterClass = null;
+        private readonly Type parameterClass = null;
 
 
         /// <summary>
@@ -48,7 +48,7 @@
         public DotNetObjectDataExchange(Type parameterClass, DataExchangeFactory dataExchangeFactory)
             : base(dataExchangeFactory)
 		{
-            _parameterClass = parameterClass;
+            this.parameterClass = parameterClass;
 		}
 
 		#region IDataExchange Members
@@ -60,7 +60,7 @@
 		/// <param name="parameterObject"></param>
 		public override object GetData(ParameterProperty mapping, object parameterObject)
 		{
-		    if (mapping.IsComplexMemberName || _parameterClass!=parameterObject.GetType())
+		    if (mapping.IsComplexMemberName || parameterClass!=parameterObject.GetType())
 			{
 				return ObjectProbe.GetMemberValue(parameterObject, mapping.PropertyName,
 					DataExchangeFactory.AccessorFactory);
@@ -77,10 +77,11 @@
 		public override void SetData(ref object target, ResultProperty mapping, object dataBaseValue)
 		{
 		    Type targetType = target.GetType();
-            if ((targetType != _parameterClass)
-                && !targetType.IsSubclassOf(_parameterClass)) 
+            if ((targetType != parameterClass)
+                && !targetType.IsSubclassOf(parameterClass)
+                && !parameterClass.IsAssignableFrom(targetType))
 			{
-                throw new ArgumentException("Could not set value of type '" + target.GetType()
+ "' in property '" + mapping.PropertyName + "' of type '" + _parameterClass + "'");
+                throw new ArgumentException("Could not set value in class '" + target.GetType()
+ "' for property '" + mapping.PropertyName + "' of type '" + mapping.MemberType + "'");
 			}
 			if ( mapping.IsComplexMemberName)
 			{
@@ -94,6 +95,8 @@
 			}
 		}
 
+
+
 		/// <summary>
 		/// Sets the value to the parameter property.
 		/// </summary>
@@ -112,7 +115,7 @@
 			else
 			{
                 ISetAccessorFactory setAccessorFactory = DataExchangeFactory.AccessorFactory.SetAccessorFactory;
-                ISetAccessor _setAccessor = setAccessorFactory.CreateSetAccessor(_parameterClass,
mapping.PropertyName);
+                ISetAccessor _setAccessor = setAccessorFactory.CreateSetAccessor(parameterClass,
mapping.PropertyName);
 
                 _setAccessor.Set(target, dataBaseValue);
 			}



Mime
View raw message