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