Author: jgbutler
Date: Mon May 3 14:13:58 2010
New Revision: 940463
URL: http://svn.apache.org/viewvc?rev=940463view=rev
Log:
Add general SqlBuilder
Added:
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/jdbc/SqlBuilder.java
Added:
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/jdbc/SqlBuilder.java
URL:
http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/jdbc/SqlBuilder.java?rev=940463view=auto
==
---
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/jdbc/SqlBuilder.java
(added)
+++
ibatis/java/ibatis-3/trunk/src/main/java/org/apache/ibatis/jdbc/SqlBuilder.java
Mon May 3 14:13:58 2010
@@ -0,0 +1,244 @@
+package org.apache.ibatis.jdbc;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class SqlBuilder {
+ private static final String AND = ) \nAND (;
+ private static final String OR = ) \nOR (;
+
+ private static final ThreadLocalSQL localSQL = new ThreadLocalSQL();
+
+ public static void BEGIN() {
+RESET();
+ }
+
+ public static void RESET() {
+localSQL.set(new SQL());
+ }
+
+ public static void UPDATE(String table) {
+sql().statementType = SQL.StatementType.UPDATE;
+sql().tables.add(table);
+ }
+
+ public static void SET(String sets) {
+sql().sets.add(sets);
+ }
+
+ public static String SQL() {
+try {
+ return sql().sql();
+} finally {
+RESET();
+}
+ }
+
+ public static void INSERT_INTO(String tableName) {
+sql().statementType = SQL.StatementType.INSERT;
+sql().tables.add(tableName);
+ }
+
+ public static void VALUES(String columns, String values) {
+sql().columns.add(columns);
+sql().values.add(values);
+ }
+
+ public static void SELECT(String columns) {
+sql().statementType = SQL.StatementType.SELECT;
+sql().select.add(columns);
+ }
+
+ public static void SELECT_DISTINCT(String columns) {
+sql().distinct = true;
+SELECT(columns);
+ }
+
+ public static void DELETE_FROM(String table) {
+sql().statementType = SQL.StatementType.DELETE;
+sql().tables.add(table);
+ }
+
+ public static void FROM(String table) {
+sql().tables.add(table);
+ }
+
+ public static void JOIN(String join) {
+sql().join.add(join);
+ }
+
+ public static void INNER_JOIN(String join) {
+sql().innerJoin.add(join);
+ }
+
+ public static void LEFT_OUTER_JOIN(String join) {
+sql().leftOuterJoin.add(join);
+ }
+
+ public static void RIGHT_OUTER_JOIN(String join) {
+sql().rightOuterJoin.add(join);
+ }
+
+ public static void OUTER_JOIN(String join) {
+sql().outerJoin.add(join);
+ }
+
+ public static void WHERE(String conditions) {
+sql().where.add(conditions);
+sql().lastList = sql().where;
+ }
+
+ public static void OR() {
+sql().lastList.add(OR);
+ }
+
+ public static void AND() {
+sql().lastList.add(AND);
+ }
+
+ public static void GROUP_BY(String columns) {
+sql().groupBy.add(columns);
+ }
+
+ public static void HAVING(String conditions) {
+sql().having.add(conditions);
+sql().lastList = sql().having;
+ }
+
+ public static void ORDER_BY(String columns) {
+sql().orderBy.add(columns);
+ }
+
+ private static SQL sql() {
+SQL sql = localSQL.get();
+if (sql == null) {
+ RESET();
+ sql = localSQL.get();
+}
+return sql;
+ }
+
+ private static class SQL {
+public enum StatementType {
+DELETE,
+INSERT,
+SELECT,
+UPDATE
+}
+
+StatementType statementType;
+ListString sets = new ArrayListString();
+ListString select = new ArrayListString();
+ListString tables = new ArrayListString();
+ListString join = new ArrayListString();
+ListString innerJoin = new ArrayListString();
+ListString outerJoin = new ArrayListString();
+ListString leftOuterJoin = new ArrayListString();
+ListString rightOuterJoin = new ArrayListString();
+ListString where = new ArrayListString();
+ListString having = new ArrayListString();
+ListString groupBy = new ArrayListString();
+ListString orderBy = new ArrayListString();
+ListString lastList = new ArrayListString();
+ListString columns = new ArrayListString();
+ListString values = new ArrayListString();
+boolean distinct;
+
+private void sqlClause(StringBuilder builder, String keyword, ListString
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);