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/03/31 07:02:47 UTC

svn commit: r760334 - in /ibatis/trunk/java/ibatis-3: TODO ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java

Author: cbegin
Date: Tue Mar 31 05:02:46 2009
New Revision: 760334

URL: http://svn.apache.org/viewvc?rev=760334&view=rev
Log:
Added some code for thought for new dynamic tag implementation

Modified:
    ibatis/trunk/java/ibatis-3/TODO
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=760334&r1=760333&r2=760334&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Tue Mar 31 05:02:46 2009
@@ -13,6 +13,7 @@
 
   <choose>
       <when prepend test>
+      <when prepend test>
       <otherwise prepend>
 
   <if prepend test>

Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java?rev=760334&r1=760333&r2=760334&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/DynamicSqlSource.java Tue Mar 31 05:02:46 2009
@@ -2,10 +2,80 @@
 
 import org.apache.ibatis.mapping.BoundSql;
 import org.apache.ibatis.mapping.SqlSource;
+import org.apache.ibatis.mapping.Configuration;
+
+import java.util.List;
 
 public class DynamicSqlSource implements SqlSource {
 
+  private Configuration configuration;
+
+  public DynamicSqlSource(Configuration configuration) {
+    this.configuration = configuration;
+  }
+
   public BoundSql getBoundSql(Object parameterObject) {
-    return null;
+    String sql = "";
+    SqlSourceParser sqlSourceParser = new SqlSourceParser(configuration);
+    SqlSource sqlSource = sqlSourceParser.parse(sql);
+    return sqlSource.getBoundSql(parameterObject);
+  }
+
+  public static interface SqlNode {
+    String getString(Object parameterObject);
+  }
+
+  public static class StaticSqlNode implements SqlNode {
+    private String sql;
+
+    public StaticSqlNode(String sql) {
+      this.sql = sql;
+    }
+
+    public String getString(Object parameterObject) {
+      return sql;
+    }
   }
+
+  public static class ForEachSqlNode implements SqlNode {
+    private List collection;
+    private List<SqlNode> childSqlNodes;
+
+    public ForEachSqlNode(List collection, List<SqlNode> childSqlNodes) {
+      this.collection = collection;
+      this.childSqlNodes = childSqlNodes;
+    }
+
+    public String getString(Object parameterObject) {
+      StringBuilder builder = new StringBuilder();
+      for (Object o : collection) {
+        for (SqlNode sqlNode : childSqlNodes) {
+          builder.append(sqlNode.getString(parameterObject));
+        }
+      }
+      return builder.toString();
+    }
+  }
+
+  public static class IfSqlNode implements SqlNode {
+    private boolean test;
+    private List<SqlNode> childSqlNodes;
+
+    public IfSqlNode(boolean test, List<SqlNode> childSqlNodes) {
+      this.test = test;
+      this.childSqlNodes = childSqlNodes;
+    }
+
+    public String getString(Object parameterObject) {
+      StringBuilder builder = new StringBuilder();
+      if (test) {
+        for (SqlNode sqlNode : childSqlNodes) {
+          builder.append(sqlNode.getString(parameterObject));
+        }
+      }
+      return builder.toString();
+    }
+  }
+
+
 }