Author: gbayon
Date: Sat Jun 28 07:41:55 2008
New Revision: 672530

URL: http://svn.apache.org/viewvc?rev=672530&view=rev
Log:
Fix for IBATISNET-274

Modified:
    
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/MultipleResultTest.cs
    
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs

Modified: 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/MultipleResultTest.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/MultipleResultTest.cs?rev=672530&r1=672529&r2=672530&view=diff
==============================================================================
--- 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/MultipleResultTest.cs
 (original)
+++ 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper.SqlClient.Test.2005/Fixtures/Mapping/MultipleResultTest.cs
 Sat Jun 28 07:41:55 2008
@@ -5,6 +5,7 @@
 using Apache.Ibatis.DataMapper.SqlClient.Test.Domain;
 using Apache.Ibatis.DataMapper.SqlClient.Test.Fixtures;
 using NUnit.Framework;
+using NUnit.Framework.SyntaxHelpers;
 
 namespace Apache.Ibatis.DataMapper.SqlClient.Test.Fixtures.Mapping
 {
@@ -75,7 +76,11 @@
         [Test]
         public void TestMultipleAccountResultClass()
         {
-            Assert.AreEqual(2, 
dataMapper.QueryForList("GetMultipleResultClassAccount", null).Count);
+            IList list = 
dataMapper.QueryForList("GetMultipleResultClassAccount", null);
+            Assert.AreEqual(2, list.Count);
+
+            Assert.That(list[0], Is.InstanceOfType(typeof(List<Account>)));
+            Assert.That(list[1], Is.InstanceOfType(typeof(List<Account>)));
         }
 
         /// <summary>
@@ -93,12 +98,12 @@
             
             Assert.AreEqual(2, list.Count);
             
-            Account account = list[0] as Account;
-            Category saveCategory = list[1] as Category;
-            AssertAccount1(account);
-            Assert.AreEqual(key, saveCategory.Id);
-            Assert.AreEqual(category.Name, saveCategory.Name);
-            Assert.AreEqual(category.Guid, saveCategory.Guid);
+            List<Account> accounts = (List<Account>)list[0];
+            List<Category> categorys = (List<Category>)list[1];
+            AssertAccount1(accounts[0]);
+            Assert.AreEqual(key, categorys[0].Id);
+            Assert.AreEqual(category.Name, categorys[0].Name);
+            Assert.AreEqual(category.Guid, categorys[0].Guid);
         }
 
         /// <summary>
@@ -115,6 +120,10 @@
 
             IList list = dataMapper.QueryForList("GetMultipleResultClass", 
null);
             Assert.AreEqual(2, list.Count);
+
+            Assert.That(list[0], Is.InstanceOfType(typeof(List<Account>)));
+            Assert.That(list[1], Is.InstanceOfType(typeof(List<Category>)));
+
         }
         
         /// <summary>

Modified: 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs?rev=672530&r1=672529&r2=672530&view=diff
==============================================================================
--- 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs
 (original)
+++ 
ibatis/trunk/cs/V3/src/Apache.Ibatis.DataMapper/MappedStatements/MappedStatement.cs
 Sat Jun 28 07:41:55 2008
@@ -393,13 +393,32 @@
                 {
                      do
                      {
+                         IList currentList = null;
+                         if (request.Statement.ResultsMap.Count == 1)
+                         {
+                             currentList = list;
+                         }
+                         else
+                         {
+                             if (request.CurrentResultMap != null)
+                             {
+                                 Type genericListType = 
typeof(List<>).MakeGenericType(new Type[] { request.CurrentResultMap.Class });
+                                 currentList = 
(IList)Activator.CreateInstance(genericListType);
+                             }
+                             else
+                             {
+                                 currentList = new ArrayList();
+                             }
+                             list.Add(currentList);
+
+                         }
                          // Get Results
                          while (reader.Read())
                          {
                              object obj = resultStrategy.Process(request, ref 
reader, null);
                              if (obj != BaseStrategy.SKIP)
                              {
-                                 list.Add(obj);
+                                 currentList.Add(obj);
                              }
                          }
                      }
@@ -454,12 +473,34 @@
                     {
                         if (rowDelegate == null)
                         {
+                            //***
+                            IList currentList = null;
+                            if (request.Statement.ResultsMap.Count == 1)
+                            {
+                                currentList = list;
+                            }
+                            else
+                            {
+                                if (request.CurrentResultMap != null)
+                                {
+                                    Type genericListType = 
typeof(List<>).MakeGenericType(new Type[] { request.CurrentResultMap.Class });
+                                    currentList = 
(IList)Activator.CreateInstance(genericListType);
+                                }
+                                else
+                                {
+                                    currentList = new ArrayList();
+                                }
+                                list.Add(currentList);
+
+                            }
+                            //***
                             while (reader.Read())
                             {
                                 object obj = resultStrategy.Process(request, 
ref reader, null);
                                 if (obj != BaseStrategy.SKIP)
                                 {
-                                    list.Add(obj);
+                                    //list.Add(obj);
+                                    currentList.Add(obj);
                                 }
                             }
                         }


Reply via email to