Author: cbegin
Date: Sun Mar 15 05:36:29 2009
New Revision: 754620

URL: http://svn.apache.org/viewvc?rev=754620&view=rev
Log:
reorganized SelectBuilder

Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java?rev=754620&r1=754619&r2=754620&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
 Sun Mar 15 05:36:29 2009
@@ -8,123 +8,126 @@
   private static final String OR = ") \nOR (";
 
 
-  private static final ThreadLocal<Query> localQuery = new 
ThreadLocal<Query>();
+  private static final ThreadLocal<SelectSQL> localSQL = new 
ThreadLocal<SelectSQL>();
 
   static {
-    localQuery.set(new Query());
+    RESET();
   }
 
-  private static class Query {
-    List<String> select = new ArrayList<String>();
-    List<String> from = new ArrayList<String>();
-    List<String> join = new ArrayList<String>();
-    List<String> innerJoin = new ArrayList<String>();
-    List<String> outerJoin = new ArrayList<String>();
-    List<String> leftOuterJoin = new ArrayList<String>();
-    List<String> rightOuterJoin = new ArrayList<String>();
-    List<String> where = new ArrayList<String>();
-    List<String> having = new ArrayList<String>();
-    List<String> groupBy = new ArrayList<String>();
-    List<String> orderBy = new ArrayList<String>();
-    List<String> lastList = new ArrayList<String>();
-  }
-
-  private static Query query() {
-    return localQuery.get();
-  }
-
-  public static String SQL() {
-    try {
-      StringBuilder builder = new StringBuilder();
-      sqlClause(builder, "SELECT", query().select, "", "", ", ");
-      sqlClause(builder, "FROM", query().from, "", "", ", ");
-      sqlClause(builder, "JOIN", query().join, "", "", "JOIN");
-      sqlClause(builder, "INNER JOIN", query().innerJoin, "", "", "\nINNER 
JOIN ");
-      sqlClause(builder, "OUTER JOIN", query().outerJoin, "", "", "\nOUTER 
JOIN ");
-      sqlClause(builder, "LEFT OUTER JOIN", query().leftOuterJoin, "", "", 
"\nLEFT OUTER JOIN ");
-      sqlClause(builder, "RIGHT OUTER JOIN", query().rightOuterJoin, "", "", 
"\nRIGHT OUTER JOIN ");
-      sqlClause(builder, "WHERE", query().where, "(", ")", " AND ");
-      sqlClause(builder, "GROUP BY", query().groupBy, "", "", ", ");
-      sqlClause(builder, "HAVING", query().having, "(", ")", " AND ");
-      sqlClause(builder, "ORDER BY", query().orderBy, "", "", ", ");
-      return builder.toString();
-    } finally {
-      localQuery.set(new Query());
-    }
-  }
-
-  private static void sqlClause(StringBuilder builder, String keyword, 
List<String> parts, String open, String close, String conjunction) {
-    if (!parts.isEmpty()) {
-      if (builder.length() > 0) builder.append("\n");
-      builder.append(keyword);
-      builder.append(" ");
-      builder.append(open);
-      String last = "________";
-      for (int i = 0, n = parts.size(); i < n; i++) {
-        String part = parts.get(i);
-        if (i > 0 && !part.equals(AND) && !part.equals(OR)&& !last.equals(AND) 
&& !last.equals(OR)) {
-          builder.append(conjunction);
-        }
-        builder.append(part);
-        last = part;
-      }
-      builder.append(close);
-    }
+  public static void RESET() {
+    localSQL.set(new SelectSQL());
   }
 
   public static void SELECT(String columns) {
-    query().select.add(columns);
+    sql().select.add(columns);
   }
 
   public static void FROM(String table) {
-    query().from.add(table);
+    sql().from.add(table);
   }
 
   public static void JOIN(String join) {
-    query().join.add(join);
+    sql().join.add(join);
   }
 
   public static void INNER_JOIN(String join) {
-    query().innerJoin.add(join);
+    sql().innerJoin.add(join);
   }
 
   public static void LEFT_OUTER_JOIN(String join) {
-    query().leftOuterJoin.add(join);
+    sql().leftOuterJoin.add(join);
   }
 
   public static void RIGHT_OUTER_JOIN(String join) {
-    query().rightOuterJoin.add(join);
+    sql().rightOuterJoin.add(join);
   }
 
   public static void OUTER_JOIN(String join) {
-    query().outerJoin.add(join);
+    sql().outerJoin.add(join);
   }
 
   public static void WHERE(String conditions) {
-    query().where.add(conditions);
-    query().lastList = query().where;
+    sql().where.add(conditions);
+    sql().lastList = sql().where;
   }
 
   public static void OR() {
-    query().lastList.add(OR);
+    sql().lastList.add(OR);
   }
 
   public static void AND() {
-    query().lastList.add(AND);
+    sql().lastList.add(AND);
   }
 
   public static void GROUP_BY(String columns) {
-    query().groupBy.add(columns);
+    sql().groupBy.add(columns);
   }
 
   public static void HAVING(String conditions) {
-    query().having.add(conditions);
-    query().lastList = query().having;
+    sql().having.add(conditions);
+    sql().lastList = sql().having;
   }
 
   public static void ORDER_BY(String columns) {
-    query().orderBy.add(columns);
+    sql().orderBy.add(columns);
   }
 
+  public static String SQL() {
+    try {
+      StringBuilder builder = new StringBuilder();
+      selectClause(builder, "SELECT", sql().select, "", "", ", ");
+      selectClause(builder, "FROM", sql().from, "", "", ", ");
+      selectClause(builder, "JOIN", sql().join, "", "", "JOIN");
+      selectClause(builder, "INNER JOIN", sql().innerJoin, "", "", "\nINNER 
JOIN ");
+      selectClause(builder, "OUTER JOIN", sql().outerJoin, "", "", "\nOUTER 
JOIN ");
+      selectClause(builder, "LEFT OUTER JOIN", sql().leftOuterJoin, "", "", 
"\nLEFT OUTER JOIN ");
+      selectClause(builder, "RIGHT OUTER JOIN", sql().rightOuterJoin, "", "", 
"\nRIGHT OUTER JOIN ");
+      selectClause(builder, "WHERE", sql().where, "(", ")", " AND ");
+      selectClause(builder, "GROUP BY", sql().groupBy, "", "", ", ");
+      selectClause(builder, "HAVING", sql().having, "(", ")", " AND ");
+      selectClause(builder, "ORDER BY", sql().orderBy, "", "", ", ");
+      return builder.toString();
+    } finally {
+      RESET();
+    }
+  }
+
+  private static void selectClause(StringBuilder builder, String keyword, 
List<String> parts, String open, String close, String conjunction) {
+    if (!parts.isEmpty()) {
+      if (builder.length() > 0) builder.append("\n");
+      builder.append(keyword);
+      builder.append(" ");
+      builder.append(open);
+      String last = "________";
+      for (int i = 0, n = parts.size(); i < n; i++) {
+        String part = parts.get(i);
+        if (i > 0 && !part.equals(AND) && !part.equals(OR)&& !last.equals(AND) 
&& !last.equals(OR)) {
+          builder.append(conjunction);
+        }
+        builder.append(part);
+        last = part;
+      }
+      builder.append(close);
+    }
+  }
+
+  private static SelectSQL sql() {
+    return localSQL.get();
+  }
+
+  private static class SelectSQL {
+    List<String> select = new ArrayList<String>();
+    List<String> from = new ArrayList<String>();
+    List<String> join = new ArrayList<String>();
+    List<String> innerJoin = new ArrayList<String>();
+    List<String> outerJoin = new ArrayList<String>();
+    List<String> leftOuterJoin = new ArrayList<String>();
+    List<String> rightOuterJoin = new ArrayList<String>();
+    List<String> where = new ArrayList<String>();
+    List<String> having = new ArrayList<String>();
+    List<String> groupBy = new ArrayList<String>();
+    List<String> orderBy = new ArrayList<String>();
+    List<String> lastList = new ArrayList<String>();
+  }
 
 }


Reply via email to