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/07/27 06:36:04 UTC

svn commit: r798022 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src: main/java/org/apache/ibatis/builder/xml/dynamic/ test/java/org/apache/ibatis/builder/ test/java/org/apache/ibatis/session/

Author: cbegin
Date: Mon Jul 27 04:36:03 2009
New Revision: 798022

URL: http://svn.apache.org/viewvc?rev=798022&view=rev
Log:
Added a unit test and improved error handling.

Modified:
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ForEachSqlNode.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml
    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/builder/xml/dynamic/ExpressionEvaluator.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java?rev=798022&r1=798021&r2=798022&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ExpressionEvaluator.java Mon Jul 27 04:36:03 2009
@@ -2,6 +2,7 @@
 
 import org.apache.ibatis.builder.BuilderException;
 import org.apache.ibatis.ognl.*;
+import org.apache.ibatis.mapping.SqlMapperException;
 
 import java.math.BigDecimal;
 import java.util.Arrays;
@@ -22,6 +23,7 @@
   public Iterable evaluateIterable(String expression, Object parameterObject) {
     try {
       Object value = Ognl.getValue(expression, parameterObject);
+      if (value == null) throw new SqlMapperException("The expression '" +expression+ "' evaluated to a null value.");
       if (value instanceof Iterable) return (Iterable) value;
       if (value.getClass().isArray()) return Arrays.asList((Object[])value);
       throw new BuilderException("Error evaluating expression '"+expression+"'.  Return value ("+value+") was not iterable.");

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ForEachSqlNode.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ForEachSqlNode.java?rev=798022&r1=798021&r2=798022&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ForEachSqlNode.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/ForEachSqlNode.java Mon Jul 27 04:36:03 2009
@@ -26,7 +26,8 @@
   }
 
   public boolean apply(DynamicContext context) {
-    final Iterable iterable = evaluator.evaluateIterable(collectionExpression, context.getBindings());    
+    Map<String, Object> bindings = context.getBindings();
+    final Iterable iterable = evaluator.evaluateIterable(collectionExpression, bindings);    
     boolean first = true;
     applyOpen(context);
     int i = 0;

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml?rev=798022&r1=798021&r2=798022&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml Mon Jul 27 04:36:03 2009
@@ -29,4 +29,14 @@
       </choose>
     </where>
   </select>  
+
+  <select id="selectPostIn" resultType="domain.blog.Post">
+    SELECT *
+    FROM POST P
+    WHERE ID in
+    <foreach item="item" index="index" collection="list"
+        open="(" separator="," close=")">
+          #{item}
+    </foreach>
+  </select>
 </mapper>
\ No newline at end of file

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=798022&r1=798021&r2=798022&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 Mon Jul 27 04:36:03 2009
@@ -553,4 +553,20 @@
     }
   }
 
+  @Test
+  public void shouldFindPostsInList() throws Exception {
+    SqlSession session = sqlMapper.openSession();
+    try {
+      List<Post> posts = session.selectList("domain.blog.mappers.PostMapper.selectPostIn",
+          new ArrayList(){{
+              add(1);
+              add(3);
+              add(5);
+            }});
+      assertEquals(3, posts.size());
+    } finally {
+      session.close();
+    }
+  }
+
 }