Author: cbegin
Date: Sun Apr 12 15:25:09 2009
New Revision: 764296

URL: http://svn.apache.org/viewvc?rev=764296&view=rev
Log:
Introduced PrefixSqlNode, which Where and Set now extend from.
Refactored constructors to be more consistent.

Added:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/PrefixSqlNode.java
Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ChooseSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/DynamicContext.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ForEachSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/SetSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/WhereSqlNode.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ChooseSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ChooseSqlNode.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ChooseSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ChooseSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -3,10 +3,10 @@
 import java.util.List;
 
 public class ChooseSqlNode implements SqlNode {
-  private MixedSqlNode defaultSqlNode;
+  private SqlNode defaultSqlNode;
   private List<IfSqlNode> ifSqlNodes;
 
-  public ChooseSqlNode(List<IfSqlNode> ifSqlNodes, MixedSqlNode 
defaultSqlNode) {
+  public ChooseSqlNode(List<IfSqlNode> ifSqlNodes, SqlNode defaultSqlNode) {
     this.ifSqlNodes = ifSqlNodes;
     this.defaultSqlNode = defaultSqlNode;
   }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/DynamicContext.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/DynamicContext.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/DynamicContext.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/DynamicContext.java
 Sun Apr 12 15:25:09 2009
@@ -7,8 +7,8 @@
 public class DynamicContext {
 
   private Map<String,Object> bindings = new HashMap<String,Object>();
-  private Object parameterObject;
   private StringBuilder sqlBuilder = new StringBuilder();
+  private Object parameterObject;
 
   public DynamicContext(Object parameterObject) {
     if (parameterObject instanceof Map) {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ForEachSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ForEachSqlNode.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ForEachSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/ForEachSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -3,14 +3,14 @@
 public class ForEachSqlNode implements SqlNode {
   private ExpressionEvaluator evaluator;
   private String collectionExpression;
-  private MixedSqlNode contents;
+  private SqlNode contents;
   private String open;
   private String close;
   private String separator;
   private String item;
   private String index;
 
-  public ForEachSqlNode(String collectionExpression, String index, String 
item, String open, String close, String separator, MixedSqlNode contents) {
+  public ForEachSqlNode(SqlNode contents, String collectionExpression, String 
index, String item, String open, String close, String separator) {
     this.evaluator = new ExpressionEvaluator();
     this.collectionExpression = collectionExpression;
     this.contents = contents;

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/IfSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -3,9 +3,9 @@
 public class IfSqlNode implements SqlNode {
   private ExpressionEvaluator evaluator;
   private String test;
-  private MixedSqlNode contents;
+  private SqlNode contents;
 
-  public IfSqlNode(String test, MixedSqlNode contents) {
+  public IfSqlNode(SqlNode contents, String test) {
     this.test = test;
     this.contents = contents;
     this.evaluator = new ExpressionEvaluator();

Added: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/PrefixSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/PrefixSqlNode.java?rev=764296&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/PrefixSqlNode.java
 (added)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/PrefixSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -0,0 +1,64 @@
+package org.apache.ibatis.parser.xml.dynamic;
+
+import java.util.*;
+
+public class PrefixSqlNode implements SqlNode {
+
+  private SqlNode contents;
+  private List<String> stringsToRemove = new ArrayList<String>();
+  private String stringToInsert;
+
+  public PrefixSqlNode(SqlNode contents, String stringToInsert, List<String> 
stringsToRemove) {
+    this.contents = contents;
+    this.stringsToRemove = stringsToRemove;
+    this.stringToInsert = stringToInsert;
+  }
+
+  public boolean apply(DynamicContext context) {
+    return contents.apply(new FilteredDynamicContext(context));
+  }
+
+
+  private class FilteredDynamicContext extends DynamicContext {
+    private DynamicContext delegate;
+    private boolean filtered;
+
+    public FilteredDynamicContext(DynamicContext delegate) {
+      super(null);
+      this.delegate = delegate;
+      this.filtered = false;
+    }
+
+    public Map<String, Object> getBindings() {
+      return delegate.getBindings();
+    }
+
+    public void bind(String name, Object value) {
+      delegate.bind(name, value);
+    }
+
+    public void appendSql(String sql) {
+      if (!filtered) {
+        filtered = true;
+        String filteredSql = sql.trim().toUpperCase();
+        for(String toRemove : stringsToRemove) {
+          if (filteredSql.startsWith(toRemove)) {
+            sql = sql.trim().substring(toRemove.trim().length()).trim();
+            break;
+          }
+        }
+        if (stringToInsert != null) {
+          delegate.appendSql(stringToInsert);
+        }
+        delegate.appendSql(sql);
+      } else {
+        delegate.appendSql(sql);
+      }
+    }
+
+    public String getSql() {
+      return delegate.getSql();
+    }
+  }
+
+}

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/SetSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/SetSqlNode.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/SetSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/SetSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -1,56 +1,13 @@
 package org.apache.ibatis.parser.xml.dynamic;
 
-import java.util.Map;
+import java.util.*;
 
-public class SetSqlNode implements SqlNode {
+public class SetSqlNode extends PrefixSqlNode {
 
-  private MixedSqlNode contents;
-
-  public SetSqlNode(MixedSqlNode contents) {
-    this.contents = contents;
-  }
-
-  public boolean apply(DynamicContext context) {
-    return contents.apply(new FilteredDynamicContext(context));
-  }
-
-
-  private static class FilteredDynamicContext extends DynamicContext {
-    private DynamicContext delegate;
-    private boolean filtered;
-
-    public FilteredDynamicContext(DynamicContext delegate) {
-      super(null);
-      this.delegate = delegate;
-      this.filtered = false;
-    }
-
-    public Map<String, Object> getBindings() {
-      return delegate.getBindings();
-    }
-
-    public void bind(String name, Object value) {
-      delegate.bind(name, value);
-    }
-
-    public void appendSql(String sql) {
-      if (!filtered) {
-        filtered = true;
-        String filteredSql = sql.trim().toUpperCase();
-        if (filteredSql.startsWith(",")) {
-          sql = sql.trim().substring(1).trim();
-        }
-        delegate.appendSql("SET");
-        delegate.appendSql(sql);
-      } else {
-        delegate.appendSql(sql);
-      }
-    }
-
-    public String getSql() {
-      return delegate.getSql();
-    }
+  public SetSqlNode(SqlNode contents) {
+    super(contents, "SET", new ArrayList<String>() {{
+      add(",");
+    }});
   }
 
-
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/WhereSqlNode.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/WhereSqlNode.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/WhereSqlNode.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/xml/dynamic/WhereSqlNode.java
 Sun Apr 12 15:25:09 2009
@@ -1,57 +1,15 @@
 package org.apache.ibatis.parser.xml.dynamic;
 
-import java.util.Map;
+import java.util.*;
 
-public class WhereSqlNode implements SqlNode {
+public class WhereSqlNode extends PrefixSqlNode{
 
-  private MixedSqlNode contents;
-
-  public WhereSqlNode(MixedSqlNode contents) {
-    this.contents = contents;
-  }
-
-  public boolean apply(DynamicContext context) {
-    return contents.apply(new FilteredDynamicContext(context));
+  public WhereSqlNode(SqlNode contents) {
+    super(contents, "WHERE", new ArrayList<String>() {{
+      add("AND ");
+      add("OR ");
+    }});
   }
 
 
-  private static class FilteredDynamicContext extends DynamicContext {
-    private DynamicContext delegate;
-    private boolean filtered;
-
-    public FilteredDynamicContext(DynamicContext delegate) {
-      super(null);
-      this.delegate = delegate;
-      this.filtered = false;
-    }
-
-    public Map<String, Object> getBindings() {
-      return delegate.getBindings();
-    }
-
-    public void bind(String name, Object value) {
-      delegate.bind(name, value);
-    }
-
-    public void appendSql(String sql) {
-      if (!filtered) {
-        filtered = true;
-        String filteredSql = sql.trim().toUpperCase();
-        if (filteredSql.startsWith("AND ")) {
-          sql = sql.trim().substring(3).trim();
-        } else if (filteredSql.startsWith("OR ")) {
-          sql = sql.trim().substring(2).trim();
-        }
-        delegate.appendSql("WHERE");
-        delegate.appendSql(sql);
-      } else {
-        delegate.appendSql(sql);
-      }
-    }
-
-    public String getSql() {
-      return delegate.getSql();
-    }
-  }
-
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java?rev=764296&r1=764295&r2=764296&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java
 Sun Apr 12 15:25:09 2009
@@ -3,7 +3,6 @@
 import static org.junit.Assert.*;
 import org.junit.Test;
 import org.apache.ibatis.BaseDataTest;
-import org.apache.ibatis.ognl.Ognl;
 import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.session.*;
 import org.apache.ibatis.io.Resources;
@@ -38,8 +37,8 @@
     final String expected = "SELECT * FROM BLOG WHERE ID = ?";
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
-        new IfSqlNode("true",
-            mixedContents(new TextSqlNode("WHERE ID = ?"))));
+        new IfSqlNode(mixedContents(new TextSqlNode("WHERE ID = ?")), "true"
+        ));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
   }
@@ -49,8 +48,8 @@
     final String expected = "SELECT * FROM BLOG";
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
-        new IfSqlNode("false",
-            mixedContents(new TextSqlNode("WHERE ID = ?"))));
+        new IfSqlNode(mixedContents(new TextSqlNode("WHERE ID = ?")), "false"
+        ));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
   }
@@ -61,10 +60,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"), 
         new ChooseSqlNode(new ArrayList() {{
-          add(new IfSqlNode("false",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = ?"))));
-          add(new IfSqlNode("false",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = 'NONE'"))));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
?")), "false"
+          ));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
'NONE'")), "false"
+          ));
         }},mixedContents(new TextSqlNode("WHERE CATEGORY = 'DEFAULT'"))));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -76,10 +75,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new ChooseSqlNode(new ArrayList() {{
-          add(new IfSqlNode("true",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = ?"))));
-          add(new IfSqlNode("false",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = 'NONE'"))));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
?")), "true"
+          ));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
'NONE'")), "false"
+          ));
         }},mixedContents(new TextSqlNode("WHERE CATEGORY = 'DEFAULT'"))));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -91,10 +90,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new ChooseSqlNode(new ArrayList() {{
-          add(new IfSqlNode("false",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = ?"))));
-          add(new IfSqlNode("true",
-            mixedContents(new TextSqlNode("WHERE CATEGORY = 'NONE'"))));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
?")), "false"
+          ));
+          add(new IfSqlNode(mixedContents(new TextSqlNode("WHERE CATEGORY = 
'NONE'")), "true"
+          ));
         }},mixedContents(new TextSqlNode("WHERE CATEGORY = 'DEFAULT'"))));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -106,10 +105,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new WhereSqlNode(mixedContents(
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode("   and ID = ?  "))),
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode("   or NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   and ID = ?  ")), 
"true"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode("   or NAME = ?  ")), 
"false"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -121,10 +120,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new WhereSqlNode(mixedContents(
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode("   and ID = ?  "))),
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode("   or NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   and ID = ?  ")), 
"false"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode("   or NAME = ?  ")), 
"true"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -136,10 +135,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new WhereSqlNode(mixedContents(
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode("   and ID = ?   "))),
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode("OR NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   and ID = ?   ")), 
"true"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode("OR NAME = ?  ")), "true"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -151,10 +150,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG"),
         new WhereSqlNode(mixedContents(
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode("   and ID = ?   "))),
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode("OR NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   and ID = ?   ")), 
"false"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode("OR NAME = ?  ")), 
"false"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -166,10 +165,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("UPDATE BLOG"),
         new SetSqlNode(mixedContents(
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode("   , ID = ?   "))),
-          new IfSqlNode("true",
-            mixedContents(new TextSqlNode(", NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   , ID = ?   ")), 
"true"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode(", NAME = ?  ")), "true"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -181,10 +180,10 @@
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("UPDATE BLOG"),
         new SetSqlNode(mixedContents(
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode("   , ID = ?   "))),
-          new IfSqlNode("false",
-            mixedContents(new TextSqlNode(", NAME = ?  ")))
+          new IfSqlNode(mixedContents(new TextSqlNode("   , ID = ?   ")), 
"false"
+          ),
+          new IfSqlNode(mixedContents(new TextSqlNode(", NAME = ?  ")), "false"
+          )
         )));
     BoundSql boundSql = source.getBoundSql(null);
     assertEquals(expected, boundSql.getSql());
@@ -198,7 +197,7 @@
     final String expected = "SELECT * FROM BLOG WHERE ID in ( one = ? AND two 
= ? AND three = ? )";
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG WHERE ID in"),
-        new 
ForEachSqlNode("array","index","item","(",")","AND",mixedContents(new 
TextSqlNode("${item} = #{id[${index}]}"))));
+        new ForEachSqlNode(mixedContents(new TextSqlNode("${item} = 
#{id[${index}]}")),"array","index","item","(",")","AND"));
     BoundSql boundSql = source.getBoundSql(parameterObject);
     assertEquals(expected, boundSql.getSql());
     assertEquals(3, boundSql.getParameterMappings().size());


Reply via email to