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/10/17 15:38:55 UTC
svn commit: r826246 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src:
main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
test/java/org/apache/ibatis/builder/PostMapper.xml
test/java/org/apache/ibatis/session/SqlSessionTest.java
Author: cbegin
Date: Sat Oct 17 13:38:54 2009
New Revision: 826246
URL: http://svn.apache.org/viewvc?rev=826246&view=rev
Log:
IBATIS-671 ConcurrentModificationException with parameter called keys - fixed
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java?rev=826246&r1=826245&r2=826246&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicContext.java Sat Oct 17 13:38:54 2009
@@ -1,5 +1,8 @@
package org.apache.ibatis.builder.xml.dynamic;
+import org.apache.ibatis.ognl.OgnlException;
+import org.apache.ibatis.ognl.OgnlRuntime;
+import org.apache.ibatis.ognl.PropertyAccessor;
import org.apache.ibatis.reflection.MetaObject;
import java.util.HashMap;
@@ -7,8 +10,12 @@
public class DynamicContext {
- private Map<String, Object> bindings = new HashMap<String, Object>();
- private StringBuilder sqlBuilder = new StringBuilder();
+ static {
+ OgnlRuntime.setPropertyAccessor(ContextMap.class, new ContextAccessor());
+ }
+
+ private final ContextMap bindings = new ContextMap();
+ private final StringBuilder sqlBuilder = new StringBuilder();
private int uniqueNumber = 0;
public DynamicContext(Object parameterObject) {
@@ -44,4 +51,22 @@
public int getUniqueNumber() {
return uniqueNumber++;
}
+
+ static class ContextMap extends HashMap<String, Object> {
+ }
+
+ static class ContextAccessor implements PropertyAccessor {
+ public Object getProperty(Map context, Object target, Object name)
+ throws OgnlException {
+ Map map = (Map) target;
+ return map.get(name);
+ }
+
+ public void setProperty(Map context, Object target, Object name, Object value)
+ throws OgnlException {
+ Map map = (Map) target;
+ map.put(name, value);
+ }
+ }
+
}
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml?rev=826246&r1=826245&r2=826246&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/builder/PostMapper.xml Sat Oct 17 13:38:54 2009
@@ -52,4 +52,16 @@
</if>
</foreach>
</select>
+
+ <select id="selectOddPostsInKeysList" resultType="domain.blog.Post">
+ SELECT *
+ FROM POST P
+ WHERE ID in
+ <foreach item="item" index="index" collection="keys"
+ open="(" separator="," close=")">
+ <if test="index / 2 != 0">
+ #{item}
+ </if>
+ </foreach>
+ </select>
</mapper>
\ No newline at end of file
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java?rev=826246&r1=826245&r2=826246&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java Sat Oct 17 13:38:54 2009
@@ -603,4 +603,24 @@
}
}
+
+ @Test
+ public void shouldSelectOddPostsInKeysList() throws Exception {
+ SqlSession session = sqlMapper.openSession();
+ try {
+ List<Post> posts = session.selectList("domain.blog.mappers.PostMapper.selectOddPostsInKeysList",
+ new HashMap() {{put("keys",new ArrayList() {{
+ add(1);
+ add(2);
+ add(3);
+ add(4);
+ add(5);
+ }});
+ }});
+ assertEquals(3, posts.size());
+ } finally {
+ session.close();
+ }
+ }
+
}