From 8f747240344bdb98e5093603f414efaf64192651 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 21 May 2011 10:19:38 +0000 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= 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@179 b9813039-fb51-4c41-a8b9-e21c2acb5095 --- .../ast/expr/OraclePriorIdentifierExpr.java | 64 ------------------- .../oracle/ast/visitor/OracleASTVisitor.java | 25 +++----- .../ast/visitor/OracleOutputVisitor.java | 18 +----- .../bvt/OracleSQLParserResourceTest.java | 2 +- src/test/resources/bvt/parser/oracle-53.txt | 15 +++++ 5 files changed, 29 insertions(+), 95 deletions(-) delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OraclePriorIdentifierExpr.java create mode 100644 src/test/resources/bvt/parser/oracle-53.txt diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OraclePriorIdentifierExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OraclePriorIdentifierExpr.java deleted file mode 100644 index 7073f7efa8..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/expr/OraclePriorIdentifierExpr.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 1999-2011 Alibaba Group Holding Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.alibaba.druid.sql.dialect.oracle.ast.expr; - -import java.io.Serializable; - -import com.alibaba.druid.sql.ast.SQLExprImpl; -import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.visitor.OracleASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class OraclePriorIdentifierExpr extends SQLExprImpl implements Serializable { - - private static final long serialVersionUID = 1L; - public SQLIdentifierExpr value; - - public OraclePriorIdentifierExpr(){ - - } - - public OraclePriorIdentifierExpr(SQLIdentifierExpr value){ - - this.value = value; - } - - public SQLIdentifierExpr getValue() { - return value; - } - - public void setValue(SQLIdentifierExpr value) { - this.value = value; - } - - public void output(StringBuffer buf) { - buf.append("PRIOR "); - buf.append(this.value); - } - - @Override - protected void accept0(SQLASTVisitor visitor) { - this.accept0((OracleASTVisitor) visitor); - } - - protected void accept0(OracleASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, value); - } - - visitor.endVisit(this); - } -} 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 cfd3832448..921bc1572f 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 @@ -41,7 +41,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupingSetsExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OraclePriorExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OraclePriorIdentifierExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTableCollectionExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; @@ -154,8 +153,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleOuterExpr x); - void endVisit(OraclePriorIdentifierExpr x); - void endVisit(OracleSelectForUpdate x); void endVisit(OracleSelectHierachicalQueryClause x); @@ -274,8 +271,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleOuterExpr x); - boolean visit(OraclePriorIdentifierExpr x); - boolean visit(OracleSelectForUpdate x); boolean visit(OracleSelectHierachicalQueryClause x); @@ -347,24 +342,24 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(SubqueryFactoringClause x); void endVisit(SubqueryFactoringClause x); - + boolean visit(SubqueryFactoringClause.Entry x); - + void endVisit(SubqueryFactoringClause.Entry x); - + boolean visit(SearchClause x); - + void endVisit(SearchClause x); - + boolean visit(CycleClause x); - + void endVisit(CycleClause x); - + boolean visit(OracleBinaryFloatExpr x); - + void endVisit(OracleBinaryFloatExpr x); - + boolean visit(OracleBinaryDoubleExpr x); - + void endVisit(OracleBinaryDoubleExpr 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 ddf4eba5d7..c2e9bb6c9d 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 @@ -54,7 +54,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleGroupingSetsExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleIntervalExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleOuterExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OraclePriorExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.expr.OraclePriorIdentifierExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTableCollectionExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleTimestampExpr; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; @@ -440,12 +439,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - public boolean visit(OraclePriorIdentifierExpr x) { - print("PRIOR "); - x.getValue().accept(this); - return false; - } - public boolean visit(OracleRefDataType x) { print("REF "); x.getRefObject().accept(this); @@ -1355,11 +1348,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public void endVisit(OraclePriorIdentifierExpr x) { - - } - @Override public void endVisit(OracleSelectForUpdate x) { @@ -1672,17 +1660,17 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public void endVisit(OracleBinaryFloatExpr x) { } - + @Override public boolean visit(OracleBinaryDoubleExpr x) { print(x.getValue().toString()); print('D'); return false; } - + @Override public void endVisit(OracleBinaryDoubleExpr x) { - + } } diff --git a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java index 0ef16e2cb1..8435cb1fc4 100644 --- a/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java +++ b/src/test/java/com/alibaba/druid/sql/oracle/bvt/OracleSQLParserResourceTest.java @@ -16,7 +16,7 @@ import com.alibaba.druid.util.JdbcUtils; public class OracleSQLParserResourceTest extends TestCase { public void test_0() throws Exception { - for (int i = 0; i <= 52; ++i) { + for (int i = 0; i <= 53; ++i) { String resource = "bvt/parser/oracle-" + i + ".txt"; exec_test(resource); } diff --git a/src/test/resources/bvt/parser/oracle-53.txt b/src/test/resources/bvt/parser/oracle-53.txt new file mode 100644 index 0000000000..367d46b23e --- /dev/null +++ b/src/test/resources/bvt/parser/oracle-53.txt @@ -0,0 +1,15 @@ +SELECT e1.last_name FROM employees e1 + WHERE f( + CURSOR(SELECT e2.hire_date FROM employees e2 + WHERE e1.employee_id = e2.manager_id), + e1.hire_date) = 1 + ORDER BY last_name; +--------------------------- +SELECT e1.last_name +FROM employees e1 +WHERE f(CURSOR(( + SELECT e2.hire_date + FROM employees e2 + WHERE e1.employee_id = e2.manager_id + )), e1.hire_date) = 1 +ORDER BY last_name;