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","******","[email protected]",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();
+ }
+ }
+
+
+}