diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleHint.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleHint.java index 99b96bf490..442b8864e4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleHint.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleHint.java @@ -16,9 +16,10 @@ package com.alibaba.druid.sql.dialect.oracle.ast; import com.alibaba.druid.sql.ast.SQLHint; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLObjectImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleHint extends OracleSQLObjectImpl implements SQLHint { +public class OracleHint extends SQLObjectImpl implements SQLHint { private static final long serialVersionUID = 1L; @@ -41,7 +42,7 @@ public class OracleHint extends OracleSQLObjectImpl implements SQLHint { this.text = text; } - public void accept0(OracleASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { visitor.visit(this); visitor.endVisit(this); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java index b251b960ca..8211622551 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleExprParser.java @@ -16,12 +16,10 @@ package com.alibaba.druid.sql.dialect.oracle.parser; import java.math.BigInteger; -import java.util.List; import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLDataTypeImpl; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLOrderingSpecification; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; @@ -37,7 +35,6 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAggregateExpr; import com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleAnalytic; @@ -748,12 +745,6 @@ public class OracleExprParser extends SQLExprParser { return super.relationalRest(expr); } - public void parseHints(List hints) { - if (lexer.token() == Token.HINT) { - hints.add(new OracleHint(lexer.stringVal())); - lexer.nextToken(); - } - } public SQLName name() throws ParserException { SQLName name = super.name(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java index 0b870e1b14..0b4b9cbc86 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitor.java @@ -141,8 +141,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleExtractExpr x); - void endVisit(OracleHint x); - void endVisit(OracleIntervalExpr x); void endVisit(SQLObjectCreateExpr x); @@ -203,8 +201,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleExtractExpr x); - boolean visit(OracleHint x); - boolean visit(OracleIntervalExpr x); boolean visit(SQLObjectCreateExpr x); @@ -522,92 +518,92 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleStorageClause x); void endVisit(OracleStorageClause x); - + boolean visit(OracleGotoStatement x); - + void endVisit(OracleGotoStatement x); - + boolean visit(OracleLabelStatement x); - + void endVisit(OracleLabelStatement x); - + boolean visit(OracleParameter x); - + void endVisit(OracleParameter x); - + boolean visit(OracleCommitStatement x); - + void endVisit(OracleCommitStatement x); - + boolean visit(OracleAlterTriggerStatement x); - + void endVisit(OracleAlterTriggerStatement x); - + boolean visit(OracleAlterSynonymStatement x); - + void endVisit(OracleAlterSynonymStatement x); - + boolean visit(OracleAlterViewStatement x); - + void endVisit(OracleAlterViewStatement x); - + boolean visit(AsOfSnapshotClause x); - + void endVisit(AsOfSnapshotClause x); - + boolean visit(OracleAlterTableMoveTablespace x); - + void endVisit(OracleAlterTableMoveTablespace x); - + boolean visit(OracleSizeExpr x); - + void endVisit(OracleSizeExpr x); - + boolean visit(OracleFileSpecification x); - + void endVisit(OracleFileSpecification x); - + boolean visit(OracleAlterTablespaceAddDataFile x); - + void endVisit(OracleAlterTablespaceAddDataFile x); - + boolean visit(OracleAlterTablespaceStatement x); - + void endVisit(OracleAlterTablespaceStatement x); - + boolean visit(OracleTruncateStatement x); - + void endVisit(OracleTruncateStatement x); - + boolean visit(OracleCreateSequenceStatement x); - + void endVisit(OracleCreateSequenceStatement x); - + boolean visit(OracleRangeValuesClause x); - + void endVisit(OracleRangeValuesClause x); - + boolean visit(OraclePartitionByRangeClause x); - + void endVisit(OraclePartitionByRangeClause x); - + boolean visit(OracleLoopStatement x); - + void endVisit(OracleLoopStatement x); - + boolean visit(OracleExitStatement x); - + void endVisit(OracleExitStatement x); - + boolean visit(OracleFetchStatement x); - + void endVisit(OracleFetchStatement x); - + boolean visit(OracleSavePointStatement x); - + void endVisit(OracleSavePointStatement x); - + boolean visit(OracleCreateProcedureStatement x); - + void endVisit(OracleCreateProcedureStatement x); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java index 8eb1ce6d4a..6d783b80c9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleASTVisitorAdapter.java @@ -1,7 +1,6 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; @@ -173,11 +172,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public void endVisit(OracleHint x) { - - } - @Override public void endVisit(OracleIntervalExpr x) { @@ -337,12 +331,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora return true; } - @Override - public boolean visit(OracleHint x) { - - return true; - } - @Override public boolean visit(OracleIntervalExpr x) { 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 7f692a2e53..b3f57149d8 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 @@ -320,11 +320,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - public boolean visit(OracleHint x) { - print(x.getText()); - return false; - } - public boolean visit(OracleIntervalExpr x) { if (x.getValue() instanceof SQLLiteralExpr) { print("INTERVAL "); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java index 5f2ac6c9ab..3c10f441d8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/visitor/OracleSchemaStatVisitor.java @@ -20,7 +20,6 @@ import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; @@ -412,11 +411,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public void endVisit(OracleHint x) { - - } - @Override public void endVisit(OracleIntervalExpr x) { @@ -559,12 +553,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle return true; } - @Override - public boolean visit(OracleHint x) { - - return true; - } - @Override public boolean visit(OracleIntervalExpr x) { diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 9aae4dbd64..6c1605953f 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -17,10 +17,12 @@ package com.alibaba.druid.sql.parser; import java.math.BigInteger; import java.util.Collection; +import java.util.List; import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLDataTypeImpl; import com.alibaba.druid.sql.ast.SQLExpr; +import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.SQLOrderingSpecification; @@ -61,6 +63,7 @@ import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; public class SQLExprParser extends SQLParser { @@ -1195,4 +1198,11 @@ public class SQLExprParser extends SQLParser { return item; } + + public void parseHints(List hints) { + if (lexer.token() == Token.HINT) { + hints.add(new OracleHint(lexer.stringVal())); + lexer.nextToken(); + } + } } 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 62b145ce54..56d0078022 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -90,6 +90,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { @@ -1089,4 +1090,9 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter { } return false; } + + public boolean visit(OracleHint x) { + print(x.getText()); + return false; + } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java index 664c14ead3..211a656be5 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -84,6 +84,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; public interface SQLASTVisitor { @@ -370,4 +371,8 @@ public interface SQLASTVisitor { boolean visit(SQLReleaseSavePointStatement x); void endVisit(SQLReleaseSavePointStatement x); + + void endVisit(OracleHint x); + + boolean visit(OracleHint x); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java index 7494e81abf..2525d8832c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -85,6 +85,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint; public class SQLASTVisitorAdapter implements SQLASTVisitor { @@ -609,7 +610,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLAlterTableDropColumnItem x) { - + } @Override @@ -619,7 +620,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLDropIndexStatement x) { - + } @Override @@ -629,7 +630,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLDropViewStatement x) { - + } @Override @@ -639,9 +640,9 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLSavePointStatement x) { - + } - + @Override public boolean visit(SQLRollbackStatement x) { return true; @@ -660,4 +661,14 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLReleaseSavePointStatement x) { } + + @Override + public boolean visit(OracleHint x) { + return true; + } + + @Override + public void endVisit(OracleHint x) { + + } }