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