You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2009/03/15 05:52:19 UTC

svn commit: r754613 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src: main/java/org/apache/ibatis/annotations/ main/java/org/apache/ibatis/binding/ main/java/org/apache/ibatis/parser/ test/java/org/apache/ibatis/binding/ test/java/org/apache/ibatis/c...

Author: cbegin
Date: Sun Mar 15 04:52:17 2009
New Revision: 754613

URL: http://svn.apache.org/viewvc?rev=754613&view=rev
Log:
Added discriminator unit tests

Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/BaseParser.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperConfigurator.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java Sun Mar 15 04:52:17 2009
@@ -139,7 +139,7 @@
   public @interface Case {
     String value();
     Class type();
-    Result[] results();
+    Result[] results() default {};
   }
 
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java Sun Mar 15 04:52:17 2009
@@ -51,16 +51,28 @@
   }
 
   private void parseResultsAndConstructorArgs(Method method) {
-    ConstructorArgs args = method.getAnnotation(ConstructorArgs.class);
-    Results results = method.getAnnotation(Results.class);
     Class returnType = getReturnType(method);
-    String resultMapId = type.getName() + "." + method.getName();
-    if (hasResults(method)) {
+    if (returnType != null) {
+      ConstructorArgs args = method.getAnnotation(ConstructorArgs.class);
+      Results results = method.getAnnotation(Results.class);
       TypeDiscriminator typeDiscriminator = method.getAnnotation(TypeDiscriminator.class);
+      String resultMapId = generateResultMapName(method);
       applyResultMap(resultMapId, returnType, argsIf(args), resultsIf(results), typeDiscriminator);
     }
   }
 
+  private String generateResultMapName(Method method) {
+    StringBuilder suffix = new StringBuilder();
+    for (Class c : method.getParameterTypes()) {
+      suffix.append("-");
+      suffix.append(c.getSimpleName());
+    }
+    if (suffix.length() < 1) {
+      suffix.append("-void");
+    }
+    return type.getName() + "." + method.getName() + suffix;
+  }
+
   private void applyResultMap(String resultMapId, Class returnType, Arg[] args, Result[] results, TypeDiscriminator discriminator) {
     applyNestedResultMaps(resultMapId, returnType, results);
     configurator.resultMapStart(resultMapId, returnType, null);
@@ -93,7 +105,7 @@
             result.typeHandler() == void.class ? null : result.typeHandler(),
             flags);
         }
-
+        configurator.resultMapEnd();
       }
     }
   }
@@ -101,9 +113,9 @@
   private void applyDiscriminator(String resultMapId, TypeDiscriminator discriminator) {
     if (discriminator != null) {
       String column = discriminator.column();
-      Class javaType = discriminator.javaType();
-      JdbcType jdbcType = discriminator.jdbcType();
-      Class typeHandler = discriminator.typeHandler();
+      Class javaType = discriminator.javaType() == void.class ? String.class : discriminator.javaType();
+      JdbcType jdbcType = discriminator.jdbcType() == JdbcType.UNDEFINED ? null : discriminator.jdbcType();
+      Class typeHandler = discriminator.typeHandler() == void.class ? null : discriminator.typeHandler();
       Case[] cases = discriminator.cases();
 
       configurator.resultMapDiscriminatorStart(column, javaType, jdbcType, typeHandler);
@@ -164,7 +176,7 @@
           timeout,
           null,         // ParameterMapID
           getParameterType(method),
-          hasResults(method) ? mappedStatementId : null,         // ResultMapID
+          generateResultMapName(method),         // ResultMapID
           getReturnType(method),
           resultSetType,
           isSelect,                  // IsSelectStatement
@@ -308,12 +320,6 @@
         || result.many().results().value().length > 1;
   }
 
-  private boolean hasResults(Method method) {
-    ConstructorArgs args = method.getAnnotation(ConstructorArgs.class);
-    Results results = method.getAnnotation(Results.class);
-    return results != null || args != null;
-  }
-
   private Result[] resultsIf(Results results) {
     return results == null ? new Result[0] : results.value();
   }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/BaseParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/BaseParser.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/BaseParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/BaseParser.java Sun Mar 15 04:52:17 2009
@@ -80,7 +80,6 @@
   }
 
   protected String resolveAlias(String alias) {
-    System.out.println(this.getClass() +" " + typeAliasRegistry);
     return typeAliasRegistry.resolveAlias(alias);
   }
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperConfigurator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperConfigurator.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperConfigurator.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperConfigurator.java Sun Mar 15 04:52:17 2009
@@ -263,7 +263,7 @@
       List<ParameterMapping> parameterMappings = new ArrayList<ParameterMapping>();
       ParameterMap.Builder inlineParameterMapBuilder = new ParameterMap.Builder(
           configuration,
-          statementBuilder.id() + "-inline-parameter-map",
+          statementBuilder.id() + "-Inline",
           parameterTypeClass,
           parameterMappings);
       statementBuilder.parameterMap(inlineParameterMapBuilder.build());
@@ -286,7 +286,7 @@
     } else if (resultType != null) {
       ResultMap.Builder inlineResultMapBuilder = new ResultMap.Builder(
           configuration,
-          statementBuilder.id() + "-inline-result-map",
+          statementBuilder.id() + "-Inline",
           resultType,
           new ArrayList<ResultMapping>());
       resultMaps.add(inlineResultMapBuilder.build());

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java Sun Mar 15 04:52:17 2009
@@ -121,5 +121,39 @@
     }
   }
 
+  @Test
+  public void shouldSelectDraftTypedPosts() {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+      List<Post> posts = mapper.selectPosts();
+      assertEquals(5, posts.size());
+      assertEquals(DraftPost.class, posts.get(0).getClass());
+      assertEquals(Post.class, posts.get(1).getClass());
+      assertEquals(DraftPost.class, posts.get(2).getClass());
+      assertEquals(Post.class, posts.get(3).getClass());
+      assertEquals(Post.class, posts.get(4).getClass());
+    } finally {
+      session.close();
+    }
+  }
+
+  @Test
+  public void shouldSelectDraftTypedPostsWithResultMap() {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+      List<Post> posts = mapper.selectPostsWithResultMap();
+      assertEquals(5, posts.size());
+      assertEquals(DraftPost.class, posts.get(0).getClass());
+      assertEquals(Post.class, posts.get(1).getClass());
+      assertEquals(DraftPost.class, posts.get(2).getClass());
+      assertEquals(Post.class, posts.get(3).getClass());
+      assertEquals(Post.class, posts.get(4).getClass());
+    } finally {
+      session.close();
+    }
+  }
+
 
 }

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java Sun Mar 15 04:52:17 2009
@@ -26,6 +26,30 @@
 
   //======================================================
 
+  @Select("SELECT * FROM post ORDER BY id")
+  @TypeDiscriminator(
+      column = "draft",
+      javaType = String.class,
+      cases={@Case(value = "1", type = DraftPost.class)}
+      )
+  List<Post> selectPosts();
+
+  //======================================================
+
+  @Select("SELECT * FROM post ORDER BY id")
+  @Results({
+      @Result(id = true,property = "id",column = "id" )
+      })
+  @TypeDiscriminator(
+      column = "draft",
+      javaType = int.class,
+      cases={@Case(value = "1", type = DraftPost.class,
+          results = {@Result(id=true,property = "id",column="id")})}
+      )
+  List<Post> selectPostsWithResultMap();
+
+  //======================================================
+
   @Select("SELECT * FROM " +
       "blog WHERE id = #{id}")
   Blog selectBlog(int id);

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SoftCacheTest.java Sun Mar 15 04:52:17 2009
@@ -18,7 +18,6 @@
       cache.putObject(i, array);
       Object value = cache.getObject(i);
     }
-    System.out.println(cache.getSize());
     assertTrue(cache.getSize() < N);
   }
 

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/cache/SuperCacheTest.java Sun Mar 15 04:52:17 2009
@@ -26,7 +26,6 @@
       Object o = cache.getObject(i);
       assertTrue(o == null || i == ((Integer) o));
     }
-    System.out.println(cache.getSize());
     assertTrue(cache.getSize() < N);
   }
 

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java?rev=754613&r1=754612&r2=754613&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java Sun Mar 15 04:52:17 2009
@@ -298,7 +298,6 @@
     SqlSession session = sqlMapper.openSession();
     try {
       AuthorMapper mapper = session.getMapper(AuthorMapper.class);
-      System.out.println(mapper.getClass());
       List authors = mapper.selectAllAuthors();
       assertEquals(2,authors.size());
     } finally {
@@ -311,7 +310,6 @@
     SqlSession session = sqlMapper.openSession();
     try {
       AuthorMapper mapper = session.getMapper(AuthorMapper.class);
-      System.out.println(mapper.getClass());
       Author author = mapper.selectAuthor(101);
       assertEquals(101,author.getId());
     } finally {