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();
+    }
+  }
+
+
+}


Reply via email to