You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2009/12/05 23:39:30 UTC

svn commit: r887603 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src: main/java/org/apache/ibatis/executor/ test/java/org/apache/ibatis/submitted/cglib_lazy_error/

Author: cbegin
Date: Sat Dec  5 22:39:30 2009
New Revision: 887603

URL: http://svn.apache.org/viewvc?rev=887603&view=rev
Log:
ibatis-687 Exception while fetching data after insert, in the same transaction

Modified:
    ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
    ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
    ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
    ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java

Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java?rev=887603&r1=887602&r2=887603&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/executor/BaseExecutor.java Sat Dec  5 22:39:30 2009
@@ -202,9 +202,9 @@
         Object array = java.lang.reflect.Array.newInstance(targetType.getComponentType(), list.size());
         value = list.toArray((Object[]) array);
       } else {
-        if (list.size() > 1) {
+        if (list != null && list.size() > 1) {
           throw new ExecutorException("Statement returned more than one row, where no more than one was expected.");
-        } else if (list.size() == 1) {
+        } else if (list != null && list.size() == 1) {
           value = list.get(0);
         }
       }

Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java?rev=887603&r1=887602&r2=887603&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/CglibNPETest.java Sat Dec  5 22:39:30 2009
@@ -96,4 +96,30 @@
         Assert.assertNotNull("Grandparent must not be null", person.getParent().getParent());
         Assert.assertEquals("Ancestor must be John Smith sr.", expectedAncestor, person.getAncestor());
     }
+
+  @Test
+  public void testInsertBetweenTwoSelects() {
+    SqlSession sqlSession = sqlSessionFactory.openSession();
+    try {
+      PersonMapper personMapper = sqlSession.getMapper(PersonMapper.class);
+      Person selected1 = personMapper.selectById(1);
+      Person selected2 = personMapper.selectById(2);
+      Person selected3 = personMapper.selectById(3);
+      selected1.setId(4L);
+      int rows = personMapper.insertPerson(selected1);
+      Assert.assertEquals(1,rows);
+      selected1 = personMapper.selectById(1);
+      selected2 = personMapper.selectById(2);
+      selected3 = personMapper.selectById(3);
+      Person selected4 = personMapper.selectById(4);
+      Assert.assertEquals(1,selected1.getId());
+      Assert.assertEquals(2,selected2.getId());
+      Assert.assertEquals(3,selected3.getId());
+      Assert.assertEquals(4,selected4.getId());
+
+    } finally {
+      sqlSession.close();
+    }
+  }
+
 }

Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml?rev=887603&r1=887602&r2=887603&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/Person.xml Sat Dec  5 22:39:30 2009
@@ -26,5 +26,10 @@
         FROM Person
         WHERE id = #{id,jdbcType=INTEGER}
     </select>
+
+    <insert id="insertPerson">
+      INSERT INTO person (id, firstName, lastName, parent)
+      VALUES (#{id}, #{firstName}, #{lastName}, null);
+    </insert>
     
 </mapper>

Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java?rev=887603&r1=887602&r2=887603&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/cglib_lazy_error/PersonMapper.java Sat Dec  5 22:39:30 2009
@@ -3,5 +3,6 @@
 public interface PersonMapper {
     
     public Person selectById(int id);
-    
+    public int insertPerson (Person person);
+
 }