Author: cbegin
Date: Tue Oct  6 05:18:31 2009
New Revision: 822130

URL: http://svn.apache.org/viewvc?rev=822130&view=rev
Log:
IBATIS-646 Association field always returns not null value in Ibatis3 - 
submitted unit test passes with new resultsethandler


Added:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Bar.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Foo.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.xml
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapperTest.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/sqlmap.xml
Modified:
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/factory/DefaultObjectFactory.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
    
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/factory/DefaultObjectFactory.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/factory/DefaultObjectFactory.java?rev=822130&r1=822129&r2=822130&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/factory/DefaultObjectFactory.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/factory/DefaultObjectFactory.java
 Tue Oct  6 05:18:31 2009
@@ -38,14 +38,18 @@
       }
     } catch (Exception e) {
       StringBuilder argTypes = new StringBuilder();
-      for (Class argType : constructorArgTypes) {
-        argTypes.append(argType.getSimpleName());
-        argTypes.append(",");
+      if (constructorArgTypes != null) {
+        for (Class argType : constructorArgTypes) {
+          argTypes.append(argType.getSimpleName());
+          argTypes.append(",");
+        }
       }
       StringBuilder argValues = new StringBuilder();
-      for (Object argValue : constructorArgs) {
-        argValues.append(String.valueOf(argValue));
-        argValues.append(",");
+      if (constructorArgs != null) {
+        for (Object argValue : constructorArgs) {
+          argValues.append(String.valueOf(argValue));
+          argValues.append(",");
+        }
       }
       throw new ReflectionException("Error instantiating " + type + " with 
invalid types (" + argTypes + ") or values (" + argValues + "). Cause: " + e, 
e);
     }

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java?rev=822130&r1=822129&r2=822130&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/SqlSession.java
 Tue Oct  6 05:18:31 2009
@@ -4,6 +4,7 @@
 import org.apache.ibatis.mapping.Configuration;
 
 import java.util.List;
+import java.sql.Connection;
 
 public interface SqlSession {
 
@@ -47,4 +48,5 @@
 
   <T> T getMapper(Class<T> type);
 
+  Connection getConnection();
 }

Modified: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java?rev=822130&r1=822129&r2=822130&view=diff
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 (original)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 Tue Oct  6 05:18:31 2009
@@ -9,6 +9,7 @@
 
 import java.util.List;
 import java.util.HashMap;
+import java.sql.Connection;
 
 public class DefaultSqlSession implements SqlSession {
 
@@ -148,6 +149,10 @@
     return configuration.getMapper(type, this);
   }
 
+  public Connection getConnection() {
+    return executor.getTransaction().getConnection();
+  }
+
   private boolean isCommitOrRollbackRequired(boolean force) {
     return (!autoCommit && dirty) || force;
   }

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Bar.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Bar.java?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Bar.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Bar.java
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,46 @@
+package org.apache.ibatis.submitted.null_associations;
+
+import java.io.Serializable;
+
+public class Bar implements Serializable {
+
+  private long field1;
+  private long field2;
+  private long field3;
+
+  public Bar() {
+    super();
+  }
+
+  public Bar(long field1, long field2, long field3) {
+    super();
+    this.field1 = field1;
+    this.field2 = field2;
+    this.field3 = field3;
+  }
+
+  public long getField1() {
+    return field1;
+  }
+
+  public void setField1(long field1) {
+    this.field1 = field1;
+  }
+
+  public long getField2() {
+    return field2;
+  }
+
+  public void setField2(long field2) {
+    this.field2 = field2;
+  }
+
+  public long getField3() {
+    return field3;
+  }
+
+  public void setField3(long field3) {
+    this.field3 = field3;
+  }
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Foo.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Foo.java?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Foo.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/Foo.java
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,46 @@
+package org.apache.ibatis.submitted.null_associations;
+
+import java.io.Serializable;
+
+public class Foo implements Serializable {
+
+  private long field1;
+  private Bar field2;
+  private boolean field3;
+
+  public Foo() {
+    super();
+  }
+
+  public Foo(long field1, Bar field2, boolean field3) {
+    super();
+    this.field1 = field1;
+    this.field2 = field2;
+    this.field3 = field3;
+  }
+
+  public long getField1() {
+    return field1;
+  }
+
+  public void setField1(long field1) {
+    this.field1 = field1;
+  }
+
+  public Bar getField2() {
+    return field2;
+  }
+
+  public void setField2(Bar field2) {
+    this.field2 = field2;
+  }
+
+  public boolean isField3() {
+    return field3;
+  }
+
+  public void setField3(boolean field3) {
+    this.field3 = field3;
+  }
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.java?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.java
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,11 @@
+package org.apache.ibatis.submitted.null_associations;
+
+public interface FooMapper {
+
+  void insertFoo(Foo foo);
+
+  Foo selectFoo();
+
+  int deleteAllFoo();
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.xml?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapper.xml
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" 
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd";>
+<mapper namespace="org.apache.ibatis.submitted.null_associations.FooMapper">
+
+  <resultMap type="Bar" id="barResult">
+    <result property="field1" column="F_FIELD2_FIELD1" javaType="long" 
jdbcType="BIGINT"/>
+    <result property="field2" column="F_FIELD2_FIELD2" javaType="long" 
jdbcType="BIGINT"/>
+    <result property="field3" column="F_FIELD2_FIELD3" javaType="long" 
jdbcType="BIGINT"/>
+  </resultMap>
+
+  <resultMap type="Foo" id="fooResult">
+    <result property="field1" column="F_FIELD1" javaType="long" 
jdbcType="BIGINT"/>
+    <result property="field3" column="F_FIELD3" javaType="boolean" 
jdbcType="BOOLEAN"/>
+    <association property="field2" resultMap="barResult"/>
+  </resultMap>
+
+  <insert id="insertFoo" parameterType="Foo">
+    insert into FOO (
+    F_FIELD1,
+    F_FIELD2_FIELD1,
+    F_FIELD2_FIELD2,
+    F_FIELD2_FIELD3,
+    F_FIELD3
+    ) values (
+    #{field1,jdbcType=BIGINT},
+    #{field2.field1,jdbcType=BIGINT},
+    #{field2.field2,jdbcType=BIGINT},
+    #{field2.field3,jdbcType=BIGINT},
+    #{field3,jdbcType=BOOLEAN}
+    )
+  </insert>
+
+  <select id="selectFoo" resultMap="fooResult">
+    select * from FOO;
+  </select>
+
+  <delete id="deleteAllFoo">
+    delete from FOO;
+  </delete>
+
+</mapper>

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapperTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapperTest.java?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapperTest.java
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/FooMapperTest.java
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,77 @@
+package org.apache.ibatis.submitted.null_associations;
+
+import org.apache.ibatis.io.Resources;
+import org.apache.ibatis.session.SqlSession;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.apache.ibatis.session.SqlSessionFactoryBuilder;
+import org.apache.ibatis.jdbc.SqlRunner;
+import org.apache.ibatis.jdbc.ScriptRunner;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.io.Reader;
+
+public class FooMapperTest {
+
+  private final static String SQL_MAP_CONFIG = 
"org/apache/ibatis/submitted/null_associations/sqlmap.xml";
+  private static SqlSession session;
+
+  @BeforeClass
+  public static void setUpBeforeClass() {
+    try {
+      final SqlSessionFactory factory = new 
SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(SQL_MAP_CONFIG));
+      session = factory.openSession();
+      Connection conn = session.getConnection();
+      ScriptRunner runner = new ScriptRunner(conn);
+      Reader reader = 
Resources.getResourceAsReader("org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql");
+      runner.runScript(reader);
+    } catch (Exception ex) {
+      ex.printStackTrace();
+    }
+  }
+
+  @Before
+  public void setUp() {
+    final FooMapper mapper = session.getMapper(FooMapper.class);
+    mapper.deleteAllFoo();
+    session.commit();
+  }
+
+  @Test
+  public void testNullAssociation() {
+    final FooMapper mapper = session.getMapper(FooMapper.class);
+    final Foo foo = new Foo(1L, null, true);
+    mapper.insertFoo(foo);
+    session.commit();
+    final Foo read = mapper.selectFoo();
+    Assert.assertEquals("Invalid mapping", 1L, read.getField1());
+    Assert.assertNull("Invalid mapping - field2 (Bar) should be null", 
read.getField2());
+    Assert.assertTrue("Invalid mapping", read.isField3());
+  }
+
+  @Test
+  public void testNotNullAssociation() {
+    final FooMapper mapper = session.getMapper(FooMapper.class);
+    final Bar bar = new Bar(1L, 2L, 3L);
+    final Foo foo = new Foo(1L, bar, true);
+    mapper.insertFoo(foo);
+    session.commit();
+    final Foo read = mapper.selectFoo();
+    Assert.assertEquals("Invalid mapping", 1L, read.getField1());
+    Assert.assertNotNull("Bar should be not null", read.getField2());
+    Assert.assertTrue("Invalid mapping", read.isField3());
+    Assert.assertEquals("Invalid mapping", 1L, read.getField2().getField1());
+    Assert.assertEquals("Invalid mapping", 2L, read.getField2().getField2());
+    Assert.assertEquals("Invalid mapping", 3L, read.getField2().getField3());
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() {
+    session.close();
+  }
+
+}

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/create-schema-mysql.sql
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,7 @@
+CREATE TABLE FOO (
+F_FIELD1 BIGINT NOT NULL,
+F_FIELD2_FIELD1 BIGINT,
+F_FIELD2_FIELD2 BIGINT,
+F_FIELD2_FIELD3 BIGINT,
+F_FIELD3 BOOLEAN NOT NULL
+);

Added: 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/sqlmap.xml
URL: 
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/sqlmap.xml?rev=822130&view=auto
==============================================================================
--- 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/sqlmap.xml
 (added)
+++ 
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_associations/sqlmap.xml
 Tue Oct  6 05:18:31 2009
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-config.dtd";>
+<configuration>
+  <settings>
+    <setting name="cacheEnabled" value="true"/>
+    <setting name="lazyLoadingEnabled" value="false"/>
+    <setting name="multipleResultSetsEnabled" value="false"/>
+    <setting name="useColumnLabel" value="true"/>
+  </settings>
+  <typeAliases>
+    <typeAlias type="org.apache.ibatis.submitted.null_associations.Foo" 
alias="Foo"/>
+    <typeAlias type="org.apache.ibatis.submitted.null_associations.Bar" 
alias="Bar"/>
+  </typeAliases>
+  <environments default="development">
+    <environment id="development">
+      <transactionManager type="JDBC">
+        <property name="" value=""/>
+      </transactionManager>
+      <dataSource type="UNPOOLED">
+        <property name="driver" value="org.hsqldb.jdbcDriver"/>
+        <property name="url" value="jdbc:hsqldb:mem:cname"/>
+        <property name="username" value="sa"/>
+      </dataSource>
+    </environment>
+  </environments>
+  <mappers>
+    <mapper 
resource="org/apache/ibatis/submitted/null_associations/FooMapper.xml"/>
+  </mappers>
+</configuration>


Reply via email to