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