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