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>