refactor SQLUtils

This commit is contained in:
高铁
2016-03-12 13:05:12 +08:00
parent 70f8c43a26
commit d9a6fde5d6
19 changed files with 382 additions and 197 deletions
@@ -66,29 +66,22 @@ public class SQLUtils {
private final static Log LOG = LogFactory.getLog(SQLUtils.class);
public static String toSQLString(SQLObject sqlObject, String dbType) {
if (JdbcUtils.MYSQL.equals(dbType) || //
JdbcUtils.MARIADB.equals(dbType) || //
JdbcUtils.H2.equals(dbType)) {
return toMySqlString(sqlObject);
return toSQLString(sqlObject, dbType, null);
}
public static String toSQLString(SQLObject sqlObject, String dbType, FormatOption option) {
StringBuilder out = new StringBuilder();
SQLASTOutputVisitor visitor = createOutputVisitor(out, dbType);
if (option == null) {
option = DEFAULT_FORMAT_OPTION;
}
visitor.setUppCase(option.isUppCase());
sqlObject.accept(visitor);
if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) {
return toOracleString(sqlObject);
}
if (JdbcUtils.POSTGRESQL.equals(dbType)) {
return toPGString(sqlObject);
}
if (JdbcUtils.DB2.equals(dbType)) {
return toDB2String(sqlObject);
}
if (JdbcUtils.ODPS.equals(dbType)) {
return toOdpsString(sqlObject);
}
return toSQLServerString(sqlObject);
String sql = out.toString();
return sql;
}
public static String toSQLString(SQLObject sqlObject) {
@@ -100,11 +93,11 @@ public class SQLUtils {
}
public static String toOdpsString(SQLObject sqlObject) {
StringBuilder out = new StringBuilder();
sqlObject.accept(new OdpsOutputVisitor(out));
String sql = out.toString();
return sql;
return toOdpsString(sqlObject, null);
}
public static String toOdpsString(SQLObject sqlObject, FormatOption option) {
return toSQLString(sqlObject, JdbcConstants.ODPS, option);
}
public static String toMySqlString(SQLObject sqlObject) {
@@ -112,18 +105,7 @@ public class SQLUtils {
}
public static String toMySqlString(SQLObject sqlObject, FormatOption option) {
StringBuilder out = new StringBuilder();
MySqlOutputVisitor visitor = new MySqlOutputVisitor(out);
if (option == null) {
option = DEFAULT_FORMAT_OPTION;
}
visitor.setUppCase(option.isUppCase());
sqlObject.accept(visitor);
String sql = out.toString();
return sql;
return toSQLString(sqlObject, JdbcConstants.MYSQL, option);
}
public static SQLExpr toMySqlExpr(String sql) {
@@ -163,19 +145,7 @@ public class SQLUtils {
}
public static String toOracleString(SQLObject sqlObject, FormatOption option) {
StringBuilder out = new StringBuilder();
OracleOutputVisitor visitor = new OracleOutputVisitor(out, false);
if (option == null) {
option = DEFAULT_FORMAT_OPTION;
}
visitor.setUppCase(option.isUppCase());
sqlObject.accept(visitor);
String sql = out.toString();
return sql;
return toSQLString(sqlObject, JdbcConstants.ORACLE, option);
}
public static String toPGString(SQLObject sqlObject) {
@@ -183,35 +153,23 @@ public class SQLUtils {
}
public static String toPGString(SQLObject sqlObject, FormatOption option) {
StringBuilder out = new StringBuilder();
PGOutputVisitor visitor = new PGOutputVisitor(out);
if (option == null) {
option = DEFAULT_FORMAT_OPTION;
}
visitor.setUppCase(option.isUppCase());
sqlObject.accept(visitor);
String sql = out.toString();
return sql;
return toSQLString(sqlObject, JdbcConstants.POSTGRESQL, option);
}
public static String toDB2String(SQLObject sqlObject) {
StringBuilder out = new StringBuilder();
sqlObject.accept(new DB2OutputVisitor(out));
String sql = out.toString();
return sql;
return toDB2String(sqlObject, null);
}
public static String toDB2String(SQLObject sqlObject, FormatOption option) {
return toSQLString(sqlObject, JdbcConstants.DB2, option);
}
public static String toSQLServerString(SQLObject sqlObject) {
StringBuilder out = new StringBuilder();
sqlObject.accept(new SQLServerOutputVisitor(out));
String sql = out.toString();
return sql;
return toSQLServerString(sqlObject, null);
}
public static String toSQLServerString(SQLObject sqlObject, FormatOption option) {
return toSQLString(sqlObject, JdbcConstants.SQL_SERVER, option);
}
public static String formatPGSql(String sql, FormatOption option) {
@@ -298,7 +256,11 @@ public class SQLUtils {
}
public static String toSQLString(List<SQLStatement> statementList, String dbType) {
return toSQLString(statementList, dbType, null);
return toSQLString(statementList, dbType, (List<Object>) null);
}
public static String toSQLString(List<SQLStatement> statementList, String dbType, FormatOption option) {
return toSQLString(statementList, dbType, null, option);
}
public static String toSQLString(List<SQLStatement> statementList, String dbType, List<Object> parameters) {
@@ -374,11 +336,16 @@ public class SQLUtils {
return out.toString();
}
public static SQLASTOutputVisitor createOutputVisitor(Appendable out, String dbType) {
return createFormatOutputVisitor(out, null, dbType);
}
public static SQLASTOutputVisitor createFormatOutputVisitor(Appendable out, List<SQLStatement> statementList,
public static SQLASTOutputVisitor createFormatOutputVisitor(Appendable out, //
List<SQLStatement> statementList, //
String dbType) {
if (JdbcUtils.ORACLE.equals(dbType) || JdbcUtils.ALI_ORACLE.equals(dbType)) {
if (statementList.size() == 1) {
if (statementList == null || statementList.size() == 1) {
return new OracleOutputVisitor(out, false);
} else {
return new OracleOutputVisitor(out, true);
@@ -16,5 +16,13 @@
package com.alibaba.druid.sql.ast;
public enum SQLOrderingSpecification {
ASC, DESC
ASC("ASC"), DESC("DESC");
public final String name;
public final String name_lcase;
private SQLOrderingSpecification(String name){
this.name = name;
this.name_lcase = name.toLowerCase();
}
}
@@ -34,6 +34,7 @@ import com.alibaba.druid.sql.ast.SQLKeep;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLOrderBy;
import com.alibaba.druid.sql.ast.SQLOrderingSpecification;
import com.alibaba.druid.sql.ast.SQLOver;
import com.alibaba.druid.sql.ast.SQLParameter;
import com.alibaba.druid.sql.ast.SQLPartition;
@@ -801,7 +802,8 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
x.getExpr().accept(this);
if (x.getType() != null) {
print(' ');
print0(x.getType().name().toUpperCase());
SQLOrderingSpecification type = x.getType();
print0(ucase ? type.name : type.name_lcase);
}
if (x.getCollate() != null) {
@@ -1179,7 +1181,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLUnionQuery x) {
x.getLeft().accept(this);
println();
print0(x.getOperator().name);
print0(ucase ? x.getOperator().name : x.getOperator().name_lcase);
println();
boolean needParen = false;