Author: cbegin
Date: Sat Apr 11 06:19:43 2009
New Revision: 764167

URL: http://svn.apache.org/viewvc?rev=764167&view=rev
Log:
Added support for open, close and separator on ForEach

Modified:
    ibatis/trunk/java/ibatis-3/TODO
    
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/test/java/org/apache/ibatis/parser/xml/dynamic/DynamicSqlSourceTest.java

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=764167&r1=764166&r2=764167&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Sat Apr 11 06:19:43 2009
@@ -17,7 +17,6 @@
       <otherwise prepend>
 
   <if prepend test>
-      <else prepend>
 
-  <foreach prepend item index open close conjuction >
+  <foreach prepend item index open close separator >
 

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=764167&r1=764166&r2=764167&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
 Sat Apr 11 06:19:43 2009
@@ -4,19 +4,52 @@
   private ExpressionEvaluator evaluator;
   private String collectionExpression;
   private MixedSqlNode contents;
+  private String open;
+  private String close;
+  private String separator;
 
-  public ForEachSqlNode(String collectionExpression, MixedSqlNode contents) {
+  public ForEachSqlNode(String collectionExpression, String open, String 
close, String separator, MixedSqlNode contents) {
     this.evaluator = new ExpressionEvaluator();
     this.collectionExpression = collectionExpression;
     this.contents = contents;
+    this.open = open;
+    this.close = close;
+    this.separator = separator;
   }
 
   public boolean apply(DynamicContext builder) {
     final Iterable iterable = evaluator.evaluateIterable(collectionExpression, 
builder.getParameterObject());
+    boolean first = true;
+    applyOpen(builder);
     for (Object o : iterable) {
+      first = applySeparator(builder, first);
       contents.apply(builder);
     }
+    applyClose(builder);
     return true;
   }
 
+  private void applyOpen(DynamicContext builder) {
+    if (open != null) {
+      builder.appendSql(open);
+    }
+  }
+
+  private boolean applySeparator(DynamicContext builder, boolean first) {
+    if (first) {
+      first = false;
+    } else {
+      if (separator != null) {
+        builder.appendSql(separator);
+      }
+    }
+    return first;
+  }
+
+  private void applyClose(DynamicContext builder) {
+    if (close != null) {
+      builder.appendSql(close);
+    }
+  }
+
 }

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=764167&r1=764166&r2=764167&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
 Sat Apr 11 06:19:43 2009
@@ -105,10 +105,10 @@
     final HashMap<String,String[]> parameterObject = new HashMap() {{
         put("array", new String[]{"1", "2", "3"});
       }};
-    final String expected = "SELECT * FROM BLOG WHERE ID in ? ? ?";
+    final String expected = "SELECT * FROM BLOG WHERE ID in [ ? , ? , ? ]";
     DynamicSqlSource source = createDynamicSqlSource(
         new TextSqlNode("SELECT * FROM BLOG WHERE ID in"),
-        new ForEachSqlNode("array",mixedContents(new TextSqlNode("?"))));
+        new ForEachSqlNode("array","[","]",",",mixedContents(new 
TextSqlNode("?"))));
     BoundSql boundSql = source.getBoundSql(parameterObject);
     assertEquals(expected, boundSql.getSql());
   }


Reply via email to