Author: cbegin Date: Wed Mar 17 03:48:45 2010 New Revision: 924140 URL: http://svn.apache.org/viewvc?rev=924140&view=rev Log: fixed iBATIS-762 default jdbctype is no longer used
Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/NullWithNoJdbcTypeTest.java Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/type/BaseTypeHandler.java Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/type/BaseTypeHandler.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/type/BaseTypeHandler.java?rev=924140&r1=924139&r2=924140&view=diff ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/type/BaseTypeHandler.java (original) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/type/BaseTypeHandler.java Wed Mar 17 03:48:45 2010 @@ -11,9 +11,14 @@ public abstract class BaseTypeHandler im throws SQLException { if (parameter == null) { if (jdbcType == null) { - throw new TypeException("JDBC requires that the JdbcType must be specified for all nullable parameters."); + try { + ps.setNull(i, JdbcType.OTHER.TYPE_CODE); + } catch (SQLException e) { + throw new TypeException("Error setting null parameter. Most JDBC drivers require that the JdbcType must be specified for all nullable parameters. Cause: " + e, e); + } + } else { + ps.setNull(i, jdbcType.TYPE_CODE); } - ps.setNull(i, jdbcType.TYPE_CODE); } else { setNonNullParameter(ps, i, parameter, jdbcType); } Added: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/NullWithNoJdbcTypeTest.java URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/NullWithNoJdbcTypeTest.java?rev=924140&view=auto ============================================================================== --- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/NullWithNoJdbcTypeTest.java (added) +++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/submitted/null_with_no_jdbctype/NullWithNoJdbcTypeTest.java Wed Mar 17 03:48:45 2010 @@ -0,0 +1,80 @@ +package org.apache.ibatis.submitted.null_with_no_jdbctype; + +import domain.blog.Author; +import domain.blog.Section; +import org.apache.ibatis.BaseDataTest; +import org.apache.ibatis.annotations.Insert; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.mapping.Environment; +import org.apache.ibatis.session.Configuration; +import org.apache.ibatis.session.SqlSession; +import org.apache.ibatis.session.SqlSessionFactory; +import org.apache.ibatis.session.SqlSessionFactoryBuilder; +import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory; +import org.junit.Test; + +import javax.sql.DataSource; + +import static org.junit.Assert.*; + +public class NullWithNoJdbcTypeTest extends BaseDataTest { + + private static interface JPetStoreMapper { + @Insert("INSERT INTO category (catid, name, descn) VALUES (#{id},#{name},#{description})") + int insertCategory(@Param("id") String id, @Param("name") String name, @Param("description") String description); + } + + @Test + public void shouldSucceedAddingRowWithNullValueWithHSQLDB() throws Exception { + DataSource ds = BaseDataTest.createJPetstoreDataSource(); + Environment env = new Environment("test",new JdbcTransactionFactory(),ds); + Configuration config = new Configuration(env); + config.addMapper(JPetStoreMapper.class); + + SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); + SqlSessionFactory sqlMapper = builder.build(config); + SqlSession session = sqlMapper.openSession(); + try { + JPetStoreMapper mapper = session.getMapper(JPetStoreMapper.class); + int n = mapper.insertCategory("MONKEYS",null,"Big hairy friendly (sometimes) mammals..."); + assertEquals(1,n); + session.rollback(); + } finally { + if (session != null) session.close(); + } + } + + private static interface BlogMapper { + @Insert("insert into " + + "Author (id,username,password,email,bio,favourite_section) " + + "values(#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection})") + int insertAuthor(Author author); + } + + @Test + public void shouldParseMapWithIntegerJdbcType() throws Exception { + DataSource ds = BaseDataTest.createBlogDataSource(); + Environment env = new Environment("test",new JdbcTransactionFactory(),ds); + Configuration config = new Configuration(env); + config.addMapper(BlogMapper.class); + + SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); + SqlSessionFactory sqlMapper = builder.build(config); + SqlSession session = sqlMapper.openSession(); + try { + BlogMapper mapper = session.getMapper(BlogMapper.class); + int n = 0; + try { + n = mapper.insertAuthor(new Author(99999,"barney","******","bar...@iloveyou.com",null, Section.NEWS)); + fail("Expected exception."); + } catch (Exception e) { + assertTrue(e.getMessage().contains("Most JDBC drivers require")); + } + session.rollback(); + } finally { + if (session != null) session.close(); + } + } + + +}