From 70b0664815b12ab86cfb9ac32733d8f4a7bfb15a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Wed, 14 Mar 2012 20:29:00 +0800 Subject: [PATCH] add sql format utils --- .../java/com/alibaba/druid/sql/SQLUtils.java | 62 +++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/SQLUtils.java b/src/main/java/com/alibaba/druid/sql/SQLUtils.java index a8525bd99d..a6d26d6619 100644 --- a/src/main/java/com/alibaba/druid/sql/SQLUtils.java +++ b/src/main/java/com/alibaba/druid/sql/SQLUtils.java @@ -1,8 +1,14 @@ package com.alibaba.druid.sql; +import java.util.List; + import com.alibaba.druid.sql.ast.SQLObject; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor; +import com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGOutputVisitor; public class SQLUtils { @@ -15,20 +21,68 @@ public class SQLUtils { return sql; } + public static String formatMySql(String sql) { + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + MySqlOutputVisitor visitor = new MySqlOutputVisitor(out); + + for (SQLStatement stmt : statementList) { + stmt.accept(visitor); + } + + return out.toString(); + } + + public static String formatOracle(String sql) { + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + + OracleOutputVisitor visitor; + + if (statementList.size() == 1) { + visitor = new OracleOutputVisitor(out, false); + } else { + visitor = new OracleOutputVisitor(out, true); + } + + for (SQLStatement stmt : statementList) { + stmt.accept(visitor); + } + + return out.toString(); + } + public static String toOracleString(SQLObject sqlObject) { StringBuilder out = new StringBuilder(); sqlObject.accept(new OracleOutputVisitor(out)); - + String sql = out.toString(); return sql; } - + public static String toPGString(SQLObject sqlObject) { StringBuilder out = new StringBuilder(); sqlObject.accept(new PGOutputVisitor(out)); - + String sql = out.toString(); return sql; } - + + public static String formatPGSql(String sql) { + PGSQLStatementParser parser = new PGSQLStatementParser(sql); + List statementList = parser.parseStatementList(); + + StringBuilder out = new StringBuilder(); + PGOutputVisitor visitor = new PGOutputVisitor(out); + + for (SQLStatement stmt : statementList) { + stmt.accept(visitor); + } + + return out.toString(); + } }