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