refactor & add testcase

This commit is contained in:
wenshao
2012-07-20 07:44:06 +08:00
parent 88ebf7d3db
commit 342b6af58b
6 changed files with 82 additions and 9 deletions
@@ -7,15 +7,20 @@ import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor;
import com.alibaba.druid.sql.dialect.postgresql.visitor.PGSchemaStatVisitor;
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerOutputVisitor;
import com.alibaba.druid.sql.dialect.sqlserver.visitor.SQLServerSchemaStatVisitor;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
import com.alibaba.druid.sql.parser.SQLParserUtils;
import com.alibaba.druid.sql.parser.SQLStatementParser;
import com.alibaba.druid.sql.parser.Token;
import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor;
import com.alibaba.druid.sql.visitor.SchemaStatVisitor;
import com.alibaba.druid.util.JdbcUtils;
public class SQLUtils {
@@ -148,6 +153,31 @@ public class SQLUtils {
return new SQLASTOutputVisitor(out);
}
public static SchemaStatVisitor createSchemaStatVisitor(Appendable out, List<SQLStatement> statementList,
String dbType) {
if (JdbcUtils.ORACLE.equals(dbType)) {
if (statementList.size() == 1) {
return new OracleSchemaStatVisitor();
} else {
return new OracleSchemaStatVisitor();
}
}
if (JdbcUtils.MYSQL.equals(dbType)) {
return new MySqlSchemaStatVisitor();
}
if (JdbcUtils.POSTGRESQL.equals(dbType)) {
return new PGSchemaStatVisitor();
}
if (JdbcUtils.SQL_SERVER.equals(dbType)) {
return new SQLServerSchemaStatVisitor();
}
return new SchemaStatVisitor();
}
public static List<SQLStatement> parseStatements(String sql, String dbType) {
SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);