From db454fc1876fd69124c9f6f31100480252a12087 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=A9=E5=B0=91?= Date: Thu, 8 Mar 2012 14:20:31 +0800 Subject: [PATCH] refactor --- .../mysql/visitor/MySqlOutputVisitor.java | 102 ++++++++-------- .../oracle/visitor/OracleOutputVisitor.java | 112 ++++++++++-------- .../postgresql/visitor/PGOutputVisitor.java | 3 + .../visitor/SQLServerOutputVisitor.java | 27 +++-- .../sql/visitor/SQLASTOutputVisitor.java | 25 ++-- .../bvt/sql/oracle/OraclePivotClauseTest.java | 26 ++-- .../sql/oracle/OracleSampleClauseTest.java | 4 +- .../OracleOutputVisitorTest_selectJoin.java | 2 +- .../oracle/visitor/OracleResourceTest.java | 22 ++-- 9 files changed, 169 insertions(+), 154 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java index e16fea27c8..9da51a6d8c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlOutputVisitor.java @@ -90,137 +90,138 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - public boolean visit(MySqlSelectQueryBlock select) { - if (select.getOrderBy() != null) { - select.getOrderBy().setParent(select); + public boolean visit(MySqlSelectQueryBlock x) { + if (x.getOrderBy() != null) { + x.getOrderBy().setParent(x); } print("SELECT "); - if (SQLSetQuantifier.ALL == select.getDistionOption()) print("ALL "); - else if (SQLSetQuantifier.DISTINCT == select.getDistionOption()) print("DISTINCT "); - else if (SQLSetQuantifier.DISTINCTROW == select.getDistionOption()) { + if (SQLSetQuantifier.ALL == x.getDistionOption()) print("ALL "); + else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) print("DISTINCT "); + else if (SQLSetQuantifier.DISTINCTROW == x.getDistionOption()) { print("DISTINCTROW "); } - if (select.isHignPriority()) { + if (x.isHignPriority()) { print("HIGH_PRIORITY "); } - if (select.isSmallResult()) { + if (x.isSmallResult()) { print("SQL_SMALL_RESULT "); } - if (select.isBigResult()) { + if (x.isBigResult()) { print("SQL_BIG_RESULT "); } - if (select.isBufferResult()) { + if (x.isBufferResult()) { print("SQL_BUFFER_RESULT "); } - if (select.getCache() != null) { - if (select.getCache().booleanValue()) { + if (x.getCache() != null) { + if (x.getCache().booleanValue()) { print("SQL_CACHE "); } else { print("SQL_NO_CACHE "); } } - if (select.isCalcFoundRows()) { + if (x.isCalcFoundRows()) { print("SQL_CALC_FOUND_ROWS "); } - printSelectList(select.getSelectList()); + printSelectList(x.getSelectList()); - if (select.getOutFile() != null) { + if (x.getOutFile() != null) { println(); print("INTO OUTFILE "); - select.getOutFile().accept(this); - if (select.getOutFileCharset() != null) { + x.getOutFile().accept(this); + if (x.getOutFileCharset() != null) { print(" CHARACTER SET "); - print(select.getOutFileCharset()); + print(x.getOutFileCharset()); } - if (select.getOutFileColumnsTerminatedBy() != null || select.getOutFileColumnsEnclosedBy() != null - || select.getOutFileColumnsEscaped() != null) { + if (x.getOutFileColumnsTerminatedBy() != null || x.getOutFileColumnsEnclosedBy() != null + || x.getOutFileColumnsEscaped() != null) { print(" COLUMNS"); - if (select.getOutFileColumnsTerminatedBy() != null) { + if (x.getOutFileColumnsTerminatedBy() != null) { print(" TERMINATED BY "); - select.getOutFileColumnsTerminatedBy().accept(this); + x.getOutFileColumnsTerminatedBy().accept(this); } - if (select.getOutFileColumnsEnclosedBy() != null) { - if (select.isOutFileColumnsEnclosedOptionally()) { + if (x.getOutFileColumnsEnclosedBy() != null) { + if (x.isOutFileColumnsEnclosedOptionally()) { print(" OPTIONALLY"); } print(" ENCLOSED BY "); - select.getOutFileColumnsEnclosedBy().accept(this); + x.getOutFileColumnsEnclosedBy().accept(this); } - if (select.getOutFileColumnsEscaped() != null) { + if (x.getOutFileColumnsEscaped() != null) { print(" ESCAPED BY "); - select.getOutFileColumnsEscaped().accept(this); + x.getOutFileColumnsEscaped().accept(this); } } - if (select.getOutFileLinesStartingBy() != null || select.getOutFileLinesTerminatedBy() != null) { + if (x.getOutFileLinesStartingBy() != null || x.getOutFileLinesTerminatedBy() != null) { print(" LINES"); - if (select.getOutFileLinesStartingBy() != null) { + if (x.getOutFileLinesStartingBy() != null) { print(" STARTING BY "); - select.getOutFileLinesStartingBy().accept(this); + x.getOutFileLinesStartingBy().accept(this); } - if (select.getOutFileLinesTerminatedBy() != null) { + if (x.getOutFileLinesTerminatedBy() != null) { print(" TERMINATED BY "); - select.getOutFileLinesTerminatedBy().accept(this); + x.getOutFileLinesTerminatedBy().accept(this); } } } - if (select.getFrom() != null) { + if (x.getFrom() != null) { println(); print("FROM "); - select.getFrom().accept(this); + x.getFrom().accept(this); } - if (select.getWhere() != null) { + if (x.getWhere() != null) { println(); print("WHERE "); - select.getWhere().accept(this); + x.getWhere().setParent(x); + x.getWhere().accept(this); } - if (select.getGroupBy() != null) { + if (x.getGroupBy() != null) { println(); - select.getGroupBy().accept(this); + x.getGroupBy().accept(this); } - if (select.getOrderBy() != null) { + if (x.getOrderBy() != null) { println(); - select.getOrderBy().accept(this); + x.getOrderBy().accept(this); } - if (select.getLimit() != null) { + if (x.getLimit() != null) { println(); - select.getLimit().accept(this); + x.getLimit().accept(this); } - if (select.getProcedureName() != null) { + if (x.getProcedureName() != null) { print(" PROCEDURE "); - select.getProcedureName().accept(this); - if (select.getProcedureArgumentList().size() > 0) { + x.getProcedureName().accept(this); + if (x.getProcedureArgumentList().size() > 0) { print("("); - printAndAccept(select.getProcedureArgumentList(), ", "); + printAndAccept(x.getProcedureArgumentList(), ", "); print(")"); } } - if (select.isForUpdate()) { + if (x.isForUpdate()) { println(); print("FOR UPDATE"); } - if (select.isLockInShareMode()) { + if (x.isLockInShareMode()) { println(); print("LOCK IN SHARE MODE"); } @@ -675,6 +676,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -1036,6 +1038,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -1067,6 +1070,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -1089,6 +1093,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -1141,6 +1146,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java index c378b166ac..54db2df90d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleOutputVisitor.java @@ -274,6 +274,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -438,30 +439,40 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS x.getLeft().accept(this); if (x.getJoinType() == JoinType.COMMA) { - print(","); + print(", "); + x.getRight().accept(this); } else { - print(" "); - print(JoinType.toString(x.getJoinType())); - } - - print(" "); - x.getRight().accept(this); - - if (x.getCondition() != null) { - print(" ON "); - x.getCondition().accept(this); - print(" "); - } - - if (x.getUsing().size() > 0) { - print(" USING ("); - printAndAccept(x.getUsing(), ", "); - print(")"); - } - - if (x.getFlashback() != null) { + boolean isRoot = x.getParent() instanceof SQLSelectQueryBlock; + if (isRoot) { + incrementIndent(); + } + println(); - x.getFlashback().accept(this); + print(JoinType.toString(x.getJoinType())); + print(" "); + + x.getRight().accept(this); + + if (isRoot) { + decrementIndent(); + } + + if (x.getCondition() != null) { + print(" ON "); + x.getCondition().accept(this); + print(" "); + } + + if (x.getUsing().size() > 0) { + print(" USING ("); + printAndAccept(x.getUsing(), ", "); + print(")"); + } + + if (x.getFlashback() != null) { + println(); + x.getFlashback().accept(this); + } } return false; @@ -529,58 +540,60 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return super.visit(select); } - public boolean visit(OracleSelectQueryBlock select) { + public boolean visit(OracleSelectQueryBlock x) { print("SELECT "); - if (SQLSetQuantifier.ALL == select.getDistionOption()) { + if (SQLSetQuantifier.ALL == x.getDistionOption()) { print("ALL "); - } else if (SQLSetQuantifier.DISTINCT == select.getDistionOption()) { + } else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) { print("DISTINCT "); - } else if (SQLSetQuantifier.UNIQUE == select.getDistionOption()) { + } else if (SQLSetQuantifier.UNIQUE == x.getDistionOption()) { print("UNIQUE "); } - if (select.getHints().size() > 0) { + if (x.getHints().size() > 0) { print("/*+"); - printAndAccept(select.getHints(), ", "); + printAndAccept(x.getHints(), ", "); print("*/ "); } - printSelectList(select.getSelectList()); + printSelectList(x.getSelectList()); - if (select.getInto() != null) { + if (x.getInto() != null) { println(); print("INTO "); - select.getInto().accept(this); + x.getInto().accept(this); } println(); print("FROM "); - if (select.getFrom() == null) { + if (x.getFrom() == null) { print("DUAL"); } else { - select.getFrom().accept(this); + x.getFrom().setParent(x); + x.getFrom().accept(this); } - if (select.getWhere() != null) { + if (x.getWhere() != null) { println(); print("WHERE "); - select.getWhere().accept(this); + x.getWhere().setParent(x); + x.getWhere().accept(this); } - if (select.getHierachicalQueryClause() != null) { + if (x.getHierachicalQueryClause() != null) { println(); - select.getHierachicalQueryClause().accept(this); + x.getHierachicalQueryClause().accept(this); } - if (select.getGroupBy() != null) { + if (x.getGroupBy() != null) { println(); - select.getGroupBy().accept(this); + x.getGroupBy().accept(this); } - if (select.getModelClause() != null) { + if (x.getModelClause() != null) { println(); - select.getModelClause().accept(this); + x.getModelClause().accept(this); } return false; @@ -603,18 +616,15 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public boolean visit(OracleSelectSubqueryTableSource x) { print("("); incrementIndent(); - x.getSelect().accept(this); println(); + x.getSelect().accept(this); decrementIndent(); + println(); print(")"); if (x.getPivot() != null) { - incrementIndent(); - println(); x.getPivot().accept(this); - - decrementIndent(); } if (x.getFlashback() != null) { @@ -655,17 +665,13 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } if (x.getSampleClause() != null) { - println(); + print(" "); x.getSampleClause().accept(this); } if (x.getPivot() != null) { - incrementIndent(); - println(); x.getPivot().accept(this); - - decrementIndent(); } if (x.getFlashback() != null) { @@ -812,6 +818,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -1496,6 +1503,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS incrementIndent(); println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); decrementIndent(); } @@ -1504,6 +1512,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS incrementIndent(); println(); print("DELETE WHERE "); + x.getDeleteWhere().setParent(x); x.getDeleteWhere().accept(this); decrementIndent(); } @@ -1530,6 +1539,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS incrementIndent(); println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); decrementIndent(); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java index b95a30931a..4822b339ed 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGOutputVisitor.java @@ -179,6 +179,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -305,6 +306,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -435,6 +437,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor if (x.getWhere() != null) { println(); print("WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java index b40c74db77..5d38004f23 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/sqlserver/visitor/SQLServerOutputVisitor.java @@ -11,38 +11,39 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe super(appender); } - public boolean visit(SQLServerSelectQueryBlock select) { + public boolean visit(SQLServerSelectQueryBlock x) { print("SELECT "); - if (SQLSetQuantifier.ALL == select.getDistionOption()) { + if (SQLSetQuantifier.ALL == x.getDistionOption()) { print("ALL "); - } else if (SQLSetQuantifier.DISTINCT == select.getDistionOption()) { + } else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) { print("DISTINCT "); - } else if (SQLSetQuantifier.UNIQUE == select.getDistionOption()) { + } else if (SQLSetQuantifier.UNIQUE == x.getDistionOption()) { print("UNIQUE "); } - if (select.getTop() != null) { - select.getTop().accept(this); + if (x.getTop() != null) { + x.getTop().accept(this); } - printSelectList(select.getSelectList()); + printSelectList(x.getSelectList()); - if (select.getFrom() != null) { + if (x.getFrom() != null) { println(); print("FROM "); - select.getFrom().accept(this); + x.getFrom().accept(this); } - if (select.getWhere() != null) { + if (x.getWhere() != null) { println(); print("WHERE "); - select.getWhere().accept(this); + x.getWhere().setParent(x); + x.getWhere().accept(this); } - if (select.getGroupBy() != null) { + if (x.getGroupBy() != null) { print(" "); - select.getGroupBy().accept(this); + x.getGroupBy().accept(this); } return false; diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 1da14d4bda..3349635ed4 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -446,34 +446,35 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { return false; } - public boolean visit(SQLSelectQueryBlock select) { + public boolean visit(SQLSelectQueryBlock x) { print("SELECT "); - if (SQLSetQuantifier.ALL == select.getDistionOption()) { + if (SQLSetQuantifier.ALL == x.getDistionOption()) { print("ALL "); - } else if (SQLSetQuantifier.DISTINCT == select.getDistionOption()) { + } else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) { print("DISTINCT "); - } else if (SQLSetQuantifier.UNIQUE == select.getDistionOption()) { + } else if (SQLSetQuantifier.UNIQUE == x.getDistionOption()) { print("UNIQUE "); } - printSelectList(select.getSelectList()); + printSelectList(x.getSelectList()); - if (select.getFrom() != null) { + if (x.getFrom() != null) { println(); print("FROM "); - select.getFrom().accept(this); + x.getFrom().accept(this); } - if (select.getWhere() != null) { + if (x.getWhere() != null) { println(); print("WHERE "); - select.getWhere().accept(this); + x.getWhere().setParent(x); + x.getWhere().accept(this); } - if (select.getGroupBy() != null) { + if (x.getGroupBy() != null) { print(" "); - select.getGroupBy().accept(this); + x.getGroupBy().accept(this); } return false; @@ -589,6 +590,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } @@ -660,6 +662,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { if (x.getWhere() != null) { print(" WHERE "); + x.getWhere().setParent(x); x.getWhere().accept(this); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java index 231c7ca9c5..a4c95c23cd 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OraclePivotClauseTest.java @@ -15,7 +15,7 @@ public class OraclePivotClauseTest extends TestCase { + "ORDER BY year, order_mode;"; String expected = "SELECT *\n" + "FROM pivot_table\n" - + "\tUNPIVOT (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))\n" + + "UNPIVOT (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))\n" + "ORDER BY year, order_mode;\n"; OracleStatementParser parser = new OracleStatementParser(sql); @@ -34,9 +34,9 @@ public class OraclePivotClauseTest extends TestCase { + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; String expected = "SELECT *\n" - + "FROM (SELECT EXTRACT(YEAR FROM order_date) AS YEAR, order_mode, order_total\n" - + "\tFROM orders\n" + "\t)\n" - + "\tPIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; + + "FROM (\n\tSELECT EXTRACT(YEAR FROM order_date) AS YEAR, order_mode, order_total\n" + + "\tFROM orders\n" + ")\n" + + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); @@ -54,9 +54,9 @@ public class OraclePivotClauseTest extends TestCase { + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; String expected = "SELECT *\n" - + "FROM (SELECT EXTRACT(YEAR FROM order_date) AS YEAR, order_mode, order_total\n" - + "\tFROM orders\n" + "\t)\n" - + "\tPIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; + + "FROM (\n\tSELECT EXTRACT(YEAR FROM order_date) AS YEAR, order_mode, order_total\n" + + "\tFROM orders\n" + ")\n" + + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); @@ -73,9 +73,9 @@ public class OraclePivotClauseTest extends TestCase { + "FROM (SELECT EXTRACT(YEAR FROM order_date) as day, order_mode, order_total FROM orders)\n" + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; - String expected = "SELECT *\n" + "FROM (SELECT EXTRACT(YEAR FROM order_date) AS DAY, order_mode, order_total\n" - + "\tFROM orders\n" + "\t)\n" - + "\tPIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; + String expected = "SELECT *\n" + "FROM (\n\tSELECT EXTRACT(YEAR FROM order_date) AS DAY, order_mode, order_total\n" + + "\tFROM orders\n" + ")\n" + + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); @@ -93,9 +93,9 @@ public class OraclePivotClauseTest extends TestCase { + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; String expected = "SELECT *\n" - + "FROM (SELECT EXTRACT(YEAR FROM order_date) AS DAY, order_mode AS YEAR, order_total\n" - + "\tFROM orders\n" + "\t)\n" - + "\tPIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; + + "FROM (\n\tSELECT EXTRACT(YEAR FROM order_date) AS DAY, order_mode AS YEAR, order_total\n" + + "\tFROM orders\n" + ")\n" + + "PIVOT (SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSampleClauseTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSampleClauseTest.java index a0452132fd..b3f29cbae4 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSampleClauseTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleSampleClauseTest.java @@ -12,7 +12,7 @@ public class OracleSampleClauseTest extends TestCase { public void test_0() throws Exception { String sql = "SELECT COUNT(*) * 10 FROM orders SAMPLE (10);"; - String expected = "SELECT COUNT(*) * 10\n" + "FROM orders\n" + "SAMPLE (10);\n"; + String expected = "SELECT COUNT(*) * 10\n" + "FROM orders SAMPLE (10);\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); @@ -27,7 +27,7 @@ public class OracleSampleClauseTest extends TestCase { public void test_1() throws Exception { String sql = "SELECT COUNT(*) * 10 FROM orders SAMPLE (10) SEED (1);"; - String expected = "SELECT COUNT(*) * 10\n" + "FROM orders\n" + "SAMPLE (10) SEED (1);\n"; + String expected = "SELECT COUNT(*) * 10\n" + "FROM orders SAMPLE (10) SEED (1);\n"; OracleStatementParser parser = new OracleStatementParser(sql); SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatementList().get(0); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleOutputVisitorTest_selectJoin.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleOutputVisitorTest_selectJoin.java index fe27a34c44..ad03357da5 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleOutputVisitorTest_selectJoin.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleOutputVisitorTest_selectJoin.java @@ -37,7 +37,7 @@ public class OracleOutputVisitorTest_selectJoin extends TestCase { StringBuilder buf = new StringBuilder(); OracleOutputVisitor outputVisitor = new OracleOutputVisitor(buf); stmt.accept(outputVisitor); - Assert.assertEquals("SELECT e.salary\nFROM employee e JOIN department d\nWHERE e.depId = d.id;\n", + Assert.assertEquals("SELECT e.salary\nFROM employee e\n\tJOIN department d\nWHERE e.depId = d.id;\n", buf.toString()); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java index 9822b3d5ec..5da3e6e26f 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleResourceTest.java @@ -6,21 +6,20 @@ import java.io.Reader; import java.util.List; import junit.framework.Assert; -import junit.framework.TestCase; +import com.alibaba.druid.sql.OracleTest; 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.mysql.visitor.MySqlParameterizedOutputVisitor; import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; import com.alibaba.druid.util.JdbcUtils; -public class OracleResourceTest extends TestCase { +public class OracleResourceTest extends OracleTest { public void test_0() throws Exception { // 13 - exec_test("bvt/parser/oracle-53.txt"); + exec_test("bvt/parser/oracle-17.txt"); // for (int i = 0; i <= 53; ++i) { // exec_test("bvt/parser/oracle-" + i + ".txt"); // } @@ -43,11 +42,14 @@ public class OracleResourceTest extends TestCase { SQLStatement statemen = statementList.get(0); Assert.assertEquals(1, statementList.size()); + + System.out.println(sql); + + print(statementList); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); statemen.accept(visitor); - System.out.println(sql); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); @@ -72,14 +74,4 @@ public class OracleResourceTest extends TestCase { Assert.assertEquals(expect, out.toString()); } - private String output(List stmtList) { - StringBuilder out = new StringBuilder(); - MySqlOutputVisitor visitor = new MySqlOutputVisitor(out); - - for (SQLStatement stmt : stmtList) { - stmt.accept(visitor); - } - - return out.toString(); - } }