From 9e245f477373524267c662d85845aca6012cd811 Mon Sep 17 00:00:00 2001 From: wenshao Date: Wed, 22 Jun 2011 11:18:26 +0000 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0SQL=E7=BB=9F=E8=AE=A1?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=BB=9F=E8=AE=A1SQL=E4=B8=AD?= =?UTF-8?q?=E6=89=80=E4=BD=BF=E7=94=A8=E7=9A=84=E8=A1=A8=E5=92=8C=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: http://code.alibabatech.com/svn/druid/trunk@279 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../ast/visitor/OracleASTVIsitorAdapter.java | 8 ++++++++ .../oracle/ast/visitor/OracleASTVisitor.java | 5 +++++ .../ast/visitor/OracleOutputVisitor.java | 5 +++++ .../ast/visitor/OracleSchemaStatVisitor.java | 20 +++++++++++++++++++ .../bvt/visitor/OracleResourceTest.java | 2 +- 5 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVIsitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVIsitorAdapter.java index f87bc1e6ea..11e46a5e67 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVIsitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVIsitorAdapter.java @@ -54,6 +54,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRefDataType; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleReferencesConstaint; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectJoin; @@ -76,6 +77,13 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter; public class OracleASTVIsitorAdapter extends SQLASTVisitorAdapter implements OracleASTVisitor { + public boolean visit(OracleSelect x) { + return true; + } + + public void endVisit(OracleSelect x) { + } + @Override public void endVisit(OracleAggregateExpr astNode) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVisitor.java index 921bc1572f..501cf14b43 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleASTVisitor.java @@ -55,6 +55,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePrimaryKey; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleRefDataType; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleReferencesConstaint; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectForUpdate; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectHierachicalQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectJoin; @@ -362,4 +363,8 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleBinaryDoubleExpr x); void endVisit(OracleBinaryDoubleExpr x); + + boolean visit(OracleSelect x); + + void endVisit(OracleSelect x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleOutputVisitor.java index c2e9bb6c9d..c82b276c7b 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleOutputVisitor.java @@ -1673,4 +1673,9 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } + @Override + public void endVisit(OracleSelect x) { + + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleSchemaStatVisitor.java index 2489c56fad..2655fd37ee 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/visitor/OracleSchemaStatVisitor.java @@ -24,6 +24,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; @@ -160,6 +161,25 @@ public class OracleSchemaStatVisitor extends OracleASTVIsitorAdapter { return false; } + public void endVisit(OracleSelect x) { + } + + public boolean visit(OracleSelect x) { + accept(x.getFactoring()); + accept(x.getQuery()); + + String originalTable = currentTableLocal.get(); + + currentTableLocal.set((String) x.getQuery().getAttribute("table")); + x.putAttribute("_old_local_", originalTable); + + accept(x.getOrderBy()); + + currentTableLocal.set(originalTable); + + return false; + } + public void endVisit(SQLSelect x) { } diff --git a/src/test/java/com/alibaba/druid/sql/oracle/bvt/visitor/OracleResourceTest.java b/src/test/java/com/alibaba/druid/sql/oracle/bvt/visitor/OracleResourceTest.java index 7e6bc29a7c..476d7587b8 100644 --- a/src/test/java/com/alibaba/druid/sql/oracle/bvt/visitor/OracleResourceTest.java +++ b/src/test/java/com/alibaba/druid/sql/oracle/bvt/visitor/OracleResourceTest.java @@ -20,7 +20,7 @@ public class OracleResourceTest extends TestCase { public void test_0() throws Exception { // 13 - exec_test("bvt/parser/oracle-28.txt"); + exec_test("bvt/parser/oracle-29.txt"); // for (int i = 0; i <= 53; ++i) { // exec_test("bvt/parser/oracle-" + i + ".txt"); // }