From 459901e8d96958c251579e34994bf454a7f23f06 Mon Sep 17 00:00:00 2001 From: wenshao Date: Sat, 3 Aug 2013 23:00:31 +0800 Subject: [PATCH] improve sql parser --- .../statement/SQLDropSequenceStatement.java} | 88 +++++----- .../ast/statement/SQLDropTableStatement.java | 48 +++++ .../statement/SQLDropTriggerStatement.java} | 25 +-- .../statement/SQLDropUserStatement.java} | 9 +- .../ast/statement/SQLDropViewStatement.java | 29 +++ .../ast/statement/SQLTruncateStatement.java | 40 ++++- .../statement/MySqlDropTableStatement.java | 70 -------- .../ast/statement/MySqlDropViewStatement.java | 60 ------- .../mysql/parser/MySqlStatementParser.java | 108 +----------- .../mysql/visitor/MySqlASTVisitor.java | 15 -- .../mysql/visitor/MySqlASTVisitorAdapter.java | 33 ---- .../mysql/visitor/MySqlOutputVisitor.java | 62 +------ .../mysql/visitor/MySqlSchemaStatVisitor.java | 35 ---- ...nt.java => OracleDropDbLinkStatement.java} | 8 +- .../oracle/parser/OracleExprParser.java | 1 + .../dialect/oracle/parser/OracleLexer.java | 1 + .../oracle/parser/OracleStatementParser.java | 66 +++---- .../oracle/visitor/OracleASTVisitor.java | 24 +-- .../visitor/OracleASTVisitorAdapter.java | 40 +---- .../oracle/visitor/OracleOutputVisitor.java | 57 +++--- .../visitor/OracleSchemaStatVisitor.java | 41 +---- .../ast/stmt/PGTruncateStatement.java | 57 ------ .../parser/PGSQLStatementParser.java | 54 +----- .../postgresql/visitor/PGASTVisitor.java | 5 - .../visitor/PGASTVisitorAdapter.java | 13 -- .../postgresql/visitor/PGOutputVisitor.java | 9 +- .../visitor/PGSchemaStatVisitor.java | 23 +-- .../alibaba/druid/sql/parser/Keywords.java | 3 + .../sql/parser/SQLCreateTableParser.java | 2 - .../druid/sql/parser/SQLExprParser.java | 2 + .../alibaba/druid/sql/parser/SQLParser.java | 3 + .../druid/sql/parser/SQLStatementParser.java | 165 +++++++++++++++++- .../com/alibaba/druid/sql/parser/Token.java | 4 + .../sql/visitor/SQLASTOutputVisitor.java | 71 +++++++- .../druid/sql/visitor/SQLASTVisitor.java | 31 +++- .../sql/visitor/SQLASTVisitorAdapter.java | 59 +++++-- .../druid/sql/visitor/SchemaStatVisitor.java | 38 +++- .../druid/wall/spi/MySqlWallVisitor.java | 7 - .../sql/mysql/MySqlASTVisitorAdapterTest.java | 6 - .../bvt/sql/mysql/MySqlDropTriggerTest.java | 55 ++++++ .../bvt/sql/mysql/MySqlDropViewTest.java | 5 +- .../bvt/sql/oracle/OracleDropTableTest.java | 51 ++++++ .../bvt/sql/oracle/OracleDropTableTest2.java | 51 ++++++ .../bvt/sql/oracle/OracleDropTriggerTest.java | 51 ++++++ .../bvt/sql/oracle/OracleDropUserTest.java | 51 ++++++ .../bvt/sql/oracle/OracleDropViewTest.java | 50 ++++++ .../visitor/OracleASTVisitorAdapterTest.java | 8 +- .../postgresql/PGASTVisitorAdapterTest.java | 16 +- 48 files changed, 937 insertions(+), 813 deletions(-) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleTruncateStatement.java => ast/statement/SQLDropSequenceStatement.java} (53%) rename src/main/java/com/alibaba/druid/sql/{dialect/oracle/ast/stmt/OracleDropSequenceStatement.java => ast/statement/SQLDropTriggerStatement.java} (76%) rename src/main/java/com/alibaba/druid/sql/{dialect/mysql/ast/statement/MySqlDropUser.java => ast/statement/SQLDropUserStatement.java} (76%) delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropViewStatement.java rename src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/{OracleDropDatabaseLinkStatement.java => OracleDropDbLinkStatement.java} (88%) delete mode 100644 src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropTriggerTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest2.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTriggerTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropUserTest.java create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropViewTest.java diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java similarity index 53% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java index b3592bffc8..ce15eb7ece 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropSequenceStatement.java @@ -1,46 +1,42 @@ -/* - * 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.stmt; - -import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class OracleTruncateStatement extends SQLTruncateStatement implements OracleStatement { - - private boolean purgeSnapshotLog = false; - - @Override - protected void accept0(SQLASTVisitor visitor) { - this.accept0((OracleASTVisitor) visitor); - } - - public void accept0(OracleASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, tableSources); - } - visitor.endVisit(this); - } - - public boolean isPurgeSnapshotLog() { - return purgeSnapshotLog; - } - - public void setPurgeSnapshotLog(boolean purgeSnapshotLog) { - this.purgeSnapshotLog = purgeSnapshotLog; - } - -} +/* + * 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.ast.statement; + +import com.alibaba.druid.sql.ast.SQLName; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; + +public class SQLDropSequenceStatement extends SQLStatementImpl implements SQLDDLStatement { + + private SQLName name; + + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + + public SQLName getName() { + return name; + } + + public void setName(SQLName name) { + this.name = name; + } + +} diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java index fc20cfce7f..62f83a6f70 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTableStatement.java @@ -26,6 +26,13 @@ public class SQLDropTableStatement extends SQLStatementImpl implements SQLDDLSta protected List tableSources = new ArrayList(); + private boolean purge; + + protected boolean cascade = false; + protected boolean restrict = false; + protected boolean ifExists = false; + private boolean temporary = false; + public SQLDropTableStatement(){ } @@ -65,4 +72,45 @@ public class SQLDropTableStatement extends SQLStatementImpl implements SQLDDLSta } visitor.endVisit(this); } + + public boolean isPurge() { + return purge; + } + + public void setPurge(boolean purge) { + this.purge = purge; + } + + public boolean isIfExists() { + return ifExists; + } + + public void setIfExists(boolean ifExists) { + this.ifExists = ifExists; + } + + public boolean isCascade() { + return cascade; + } + + public void setCascade(boolean cascade) { + this.cascade = cascade; + } + + public boolean isRestrict() { + return restrict; + } + + public void setRestrict(boolean restrict) { + this.restrict = restrict; + } + + public boolean isTemporary() { + return temporary; + } + + public void setTemporary(boolean temporary) { + this.temporary = temporary; + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropSequenceStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java similarity index 76% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropSequenceStatement.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java index d43487c7f4..f9bbf36aa4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropSequenceStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropTriggerStatement.java @@ -1,3 +1,5 @@ +package com.alibaba.druid.sql.ast.statement; + /* * Copyright 1999-2011 Alibaba Group Holding Ltd. * @@ -13,23 +15,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.oracle.ast.stmt; - import com.alibaba.druid.sql.ast.SQLName; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class OracleDropSequenceStatement extends OracleStatementImpl implements OracleDDLStatement { +public class SQLDropTriggerStatement extends SQLStatementImpl implements SQLDDLStatement { private SQLName name; - @Override - public void accept0(OracleASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, name); - } - visitor.endVisit(this); - } - public SQLName getName() { return name; } @@ -38,4 +31,12 @@ public class OracleDropSequenceStatement extends OracleStatementImpl implements this.name = name; } + @Override + protected void accept0(SQLASTVisitor visitor) { + if (visitor.visit(this)) { + acceptChild(visitor, name); + } + visitor.endVisit(this); + } + } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java similarity index 76% rename from src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java rename to src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java index 389472b8ed..da76f1fbde 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropUser.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropUserStatement.java @@ -13,15 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.alibaba.druid.sql.dialect.mysql.ast.statement; +package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; +import com.alibaba.druid.sql.ast.SQLStatementImpl; +import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class MySqlDropUser extends MySqlStatementImpl { +public class SQLDropUserStatement extends SQLStatementImpl implements SQLDDLStatement { private List users = new ArrayList(2); @@ -33,7 +34,7 @@ public class MySqlDropUser extends MySqlStatementImpl { this.users = users; } - public void accept0(MySqlASTVisitor visitor) { + protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { acceptChild(visitor, users); } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java index eeb2247eed..a2f9d7d545 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLDropViewStatement.java @@ -26,6 +26,10 @@ public class SQLDropViewStatement extends SQLStatementImpl implements SQLDDLStat protected List tableSources = new ArrayList(); + protected boolean cascade = false; + protected boolean restrict = false; + protected boolean ifExists = false; + public SQLDropViewStatement(){ } @@ -58,6 +62,14 @@ public class SQLDropViewStatement extends SQLStatementImpl implements SQLDDLStat tableSources.add(tableSource); } + public boolean isCascade() { + return cascade; + } + + public void setCascade(boolean cascade) { + this.cascade = cascade; + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { @@ -65,4 +77,21 @@ public class SQLDropViewStatement extends SQLStatementImpl implements SQLDDLStat } visitor.endVisit(this); } + + public boolean isRestrict() { + return restrict; + } + + public void setRestrict(boolean restrict) { + this.restrict = restrict; + } + + public boolean isIfExists() { + return ifExists; + } + + public void setIfExists(boolean ifExists) { + this.ifExists = ifExists; + } + } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java index 727dc89a42..294da66db6 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLTruncateStatement.java @@ -24,7 +24,13 @@ import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLTruncateStatement extends SQLStatementImpl { - protected List tableSources = new ArrayList(2); + protected List tableSources = new ArrayList(2); + + private boolean purgeSnapshotLog = false; + + private boolean only; + private Boolean restartIdentity; + private Boolean cascade; public List getTableSources() { return tableSources; @@ -47,4 +53,36 @@ public class SQLTruncateStatement extends SQLStatementImpl { } visitor.endVisit(this); } + + public boolean isPurgeSnapshotLog() { + return purgeSnapshotLog; + } + + public void setPurgeSnapshotLog(boolean purgeSnapshotLog) { + this.purgeSnapshotLog = purgeSnapshotLog; + } + + public boolean isOnly() { + return only; + } + + public void setOnly(boolean only) { + this.only = only; + } + + public Boolean getRestartIdentity() { + return restartIdentity; + } + + public void setRestartIdentity(Boolean restartIdentity) { + this.restartIdentity = restartIdentity; + } + + public Boolean getCascade() { + return cascade; + } + + public void setCascade(Boolean cascade) { + this.cascade = cascade; + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java deleted file mode 100644 index 0a45820eda..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropTableStatement.java +++ /dev/null @@ -1,70 +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.mysql.ast.statement; - -import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class MySqlDropTableStatement extends SQLDropTableStatement implements MySqlStatement { - - private boolean temporary = false; - - private boolean ifExists = false; - - private String option; - - @Override - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof MySqlASTVisitor) { - accept0((MySqlASTVisitor) visitor); - } else { - throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName()); - } - } - - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - this.acceptChild(visitor, tableSources); - } - visitor.endVisit(this); - } - - public boolean isIfExists() { - return ifExists; - } - - public void setIfExists(boolean ifExists) { - this.ifExists = ifExists; - } - - public boolean isTemporary() { - return temporary; - } - - public void setTemporary(boolean temporary) { - this.temporary = temporary; - } - - public String getOption() { - return option; - } - - public void setOption(String option) { - this.option = option; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropViewStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropViewStatement.java deleted file mode 100644 index 4f93eb538e..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlDropViewStatement.java +++ /dev/null @@ -1,60 +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.mysql.ast.statement; - -import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class MySqlDropViewStatement extends SQLDropViewStatement implements MySqlStatement { - - private boolean ifExists = false; - - private String option; - - @Override - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof MySqlASTVisitor) { - accept0((MySqlASTVisitor) visitor); - } else { - throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName()); - } - } - - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - this.acceptChild(visitor, tableSources); - } - visitor.endVisit(this); - } - - public boolean isIfExists() { - return ifExists; - } - - public void setIfExists(boolean ifExists) { - this.ifExists = ifExists; - } - - public String getOption() { - return option; - } - - public void setOption(String option) { - this.option = option; - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java index ef8ff3fff7..5a21f41cc4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlStatementParser.java @@ -45,8 +45,6 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyConstraint; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; @@ -76,9 +74,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStateme import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -152,8 +147,6 @@ public class MySqlStatementParser extends SQLStatementParser { private static final String AUTO_INCREMENT = "AUTO_INCREMENT"; private static final String COLLATE2 = "COLLATE"; - private static final String CASCADE = "CASCADE"; - private static final String RESTRICT = "RESTRICT"; private static final String CHAIN = "CHAIN"; private static final String ENGINES = "ENGINES"; private static final String ENGINE = "ENGINE"; @@ -173,7 +166,6 @@ public class MySqlStatementParser extends SQLStatementParser { private static final String LOCAL = "LOCAL"; private static final String TABLES = "TABLES"; private static final String TEMPORARY = "TEMPORARY"; - private static final String USER = "USER"; private static final String SPATIAL = "SPATIAL"; private static final String FULLTEXT = "FULLTEXT"; private static final String DELAYED = "DELAYED"; @@ -339,7 +331,7 @@ public class MySqlStatementParser extends SQLStatementParser { return parseCreateIndex(false); } - if (identifierEquals(USER)) { + if (lexer.token() == Token.USER) { if (replace) { lexer.reset(markBp, markChar, Token.CREATE); } @@ -425,7 +417,7 @@ public class MySqlStatementParser extends SQLStatementParser { lexer.nextToken(); } - acceptIdentifier(USER); + accept(Token.USER); MySqlCreateUserStatement stmt = new MySqlCreateUserStatement(); @@ -928,7 +920,7 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - if (identifierEquals("TRIGGER")) { + if (lexer.token() == Token.TRIGGER) { lexer.nextToken(); MySqlShowCreateTriggerStatement stmt = new MySqlShowCreateTriggerStatement(); @@ -1953,100 +1945,6 @@ public class MySqlStatementParser extends SQLStatementParser { } } - public SQLStatement parseDropUser() { - acceptIdentifier(USER); - - MySqlDropUser stmt = new MySqlDropUser(); - for (;;) { - SQLExpr expr = this.exprParser.expr(); - stmt.getUsers().add(expr); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - break; - } - - return stmt; - } - - protected SQLDropTableStatement parseDropTable(boolean acceptDrop) { - if (acceptDrop) { - accept(Token.DROP); - } - - MySqlDropTableStatement stmt = new MySqlDropTableStatement(); - - if (identifierEquals(TEMPORARY)) { - lexer.nextToken(); - stmt.setTemporary(true); - } - - accept(Token.TABLE); - - if (lexer.token() == Token.IF) { - lexer.nextToken(); - accept(Token.EXISTS); - stmt.setIfExists(true); - } - - for (;;) { - SQLName name = this.exprParser.name(); - stmt.addTableSource(name); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - break; - } - - if (identifierEquals(RESTRICT)) { - stmt.setOption(RESTRICT); - lexer.nextToken(); - } else if (identifierEquals(CASCADE)) { - stmt.setOption(CASCADE); - lexer.nextToken(); - } - - return stmt; - } - - protected SQLDropViewStatement parseDropView(boolean acceptDrop) { - if (acceptDrop) { - accept(Token.DROP); - } - - MySqlDropViewStatement stmt = new MySqlDropViewStatement(); - - accept(Token.VIEW); - - if (lexer.token() == Token.IF) { - lexer.nextToken(); - accept(Token.EXISTS); - stmt.setIfExists(true); - } - - for (;;) { - SQLName name = this.exprParser.name(); - stmt.addTableSource(name); - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - break; - } - - if (identifierEquals(RESTRICT)) { - stmt.setOption(RESTRICT); - lexer.nextToken(); - } else if (identifierEquals(CASCADE)) { - stmt.setOption(CASCADE); - lexer.nextToken(); - } - - return stmt; - } - public SQLSelectParser createSQLSelectParser() { return new MySqlSelectParser(this.exprParser); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java index 51fe80ec33..5625529e04 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitor.java @@ -47,9 +47,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStateme import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -248,10 +245,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlResetStatement x); - void endVisit(MySqlDropUser x); - - boolean visit(MySqlDropUser x); - void endVisit(MySqlCreateUserStatement x); boolean visit(MySqlCreateUserStatement x); @@ -260,10 +253,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlCreateUserStatement.UserSpecification x); - void endVisit(MySqlDropTableStatement x); - - boolean visit(MySqlDropTableStatement x); - void endVisit(MySqlPartitionByKey x); boolean visit(MySqlPartitionByKey x); @@ -468,10 +457,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlRenameTableStatement x); - boolean visit(MySqlDropViewStatement x); - - void endVisit(MySqlDropViewStatement x); - boolean visit(MySqlUnionQuery x); void endVisit(MySqlUnionQuery x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java index 5222491a3a..b518532e8a 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlASTVisitorAdapter.java @@ -49,9 +49,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -460,26 +457,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq return true; } - @Override - public void endVisit(MySqlDropUser x) { - - } - - @Override - public boolean visit(MySqlDropUser x) { - return true; - } - - @Override - public void endVisit(MySqlDropTableStatement x) { - - } - - @Override - public boolean visit(MySqlDropTableStatement x) { - return true; - } - @Override public void endVisit(MySqlPartitionByKey x) { @@ -999,16 +976,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } - @Override - public boolean visit(MySqlDropViewStatement x) { - return true; - } - - @Override - public void endVisit(MySqlDropViewStatement x) { - - } - @Override public boolean visit(MySqlUnionQuery x) { return true; 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 8eeef86700..f466e9dad9 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 @@ -35,6 +35,7 @@ import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType; import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; @@ -71,9 +72,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -1466,43 +1464,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlDropUser x) { - - } - - @Override - public boolean visit(MySqlDropUser x) { - print("DROP USER "); - printAndAccept(x.getUsers(), ", "); - return false; - } - - @Override - public void endVisit(MySqlDropTableStatement x) { - - } - - @Override - public boolean visit(MySqlDropTableStatement x) { - if (x.isTemporary()) { - print("DROP TEMPORARY TABLE "); - } else { - print("DROP TABLE "); - } - if (x.isIfExists()) { - print("IF EXISTS "); - } - - printAndAccept(x.getTableSources(), ", "); - - if (x.getOption() != null) { - print(' '); - print(x.getOption()); - } - return false; - } - @Override public void endVisit(MySqlPartitionByKey x) { @@ -2561,27 +2522,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } - @Override - public boolean visit(MySqlDropViewStatement x) { - print("DROP VIEW "); - if (x.isIfExists()) { - print("IF EXISTS "); - } - - printAndAccept(x.getTableSources(), ", "); - - if (x.getOption() != null) { - print(' '); - print(x.getOption()); - } - return false; - } - - @Override - public void endVisit(MySqlDropViewStatement x) { - - } - @Override public boolean visit(MySqlUnionQuery x) { { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java index b8ed4ff952..70f970f95d 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/visitor/MySqlSchemaStatVisitor.java @@ -23,7 +23,6 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; @@ -63,9 +62,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatemen import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -531,26 +527,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS return true; } - @Override - public void endVisit(MySqlDropUser x) { - - } - - @Override - public boolean visit(MySqlDropUser x) { - return true; - } - - @Override - public void endVisit(MySqlDropTableStatement x) { - - } - - @Override - public boolean visit(MySqlDropTableStatement x) { - return visit((SQLDropTableStatement) x); - } - @Override public void endVisit(MySqlPartitionByKey x) { @@ -1073,17 +1049,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } - @Override - public boolean visit(MySqlDropViewStatement x) { - setMode(x, Mode.Drop); - return true; - } - - @Override - public void endVisit(MySqlDropViewStatement x) { - - } - @Override public boolean visit(MySqlUnionQuery x) { return visit((SQLUnionQuery) x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDatabaseLinkStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDbLinkStatement.java similarity index 88% rename from src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDatabaseLinkStatement.java rename to src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDbLinkStatement.java index 88e1192e5a..7e8d8022f4 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDatabaseLinkStatement.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/stmt/OracleDropDbLinkStatement.java @@ -18,18 +18,18 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; -public class OracleDropDatabaseLinkStatement extends OracleStatementImpl { +public class OracleDropDbLinkStatement extends OracleStatementImpl { - private boolean _public; + private boolean isPublic; private SQLName name; public boolean isPublic() { - return _public; + return isPublic; } public void setPublic(boolean value) { - this._public = value; + this.isPublic = value; } public SQLName getName() { 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 da227ef71b..e01b028379 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 @@ -459,6 +459,7 @@ public class OracleExprParser extends SQLExprParser { case NOCOMPRESS: case KEEP_DUPLICATES: case EXCEPTIONS: + case PURGE: sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); lexer.nextToken(); return primaryRest(sqlExpr); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java index 2b8dc098a3..c8a017a357 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleLexer.java @@ -108,6 +108,7 @@ public class OracleLexer extends Lexer { map.put("NOCOMPRESS", Token.NOCOMPRESS); map.put("KEEP_DUPLICATES", Token.KEEP_DUPLICATES); map.put("EXCEPTIONS", Token.EXCEPTIONS); + map.put("PURGE", Token.PURGE); map.put("INITIALLY", Token.INITIALLY); DEFAULT_ORACLE_KEYWORDS = new Keywords(map); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java index be4626fef5..730575e789 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/oracle/parser/OracleStatementParser.java @@ -37,7 +37,10 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLAlterTableRenameColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; @@ -54,6 +57,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSessionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterSynonymStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableDropPartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableModify; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableMoveTablespace; @@ -62,7 +66,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartit import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.NestedTablePartitionSpec; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.TableSpaceItem; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableSplitPartition.UpdateIndexesClause; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableAddConstaint; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTableTruncatePartition; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleAlterTablespaceAddDataFile; @@ -77,8 +80,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateIndexStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -100,7 +102,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OraclePLSQLCommitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSavePointStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.SQLStatementParser; @@ -440,7 +441,7 @@ public class OracleStatementParser extends SQLStatementParser { if (identifierEquals("LINK")) { lexer.nextToken(); - OracleDropDatabaseLinkStatement stmt = new OracleDropDatabaseLinkStatement(); + OracleDropDbLinkStatement stmt = new OracleDropDbLinkStatement(); if (isPublic) { stmt.setPublic(isPublic); } @@ -451,21 +452,33 @@ public class OracleStatementParser extends SQLStatementParser { continue; } } - + if (lexer.token() == Token.INDEX) { SQLStatement stmt = parseDropIndex(); statementList.add(stmt); continue; } - if (identifierEquals("SEQUENCE")) { - lexer.nextToken(); + if (lexer.token() == Token.VIEW) { + SQLStatement stmt = parseDropView(false); + statementList.add(stmt); + continue; + } - SQLName name = this.exprParser.name(); - - OracleDropSequenceStatement stmt = new OracleDropSequenceStatement(); - stmt.setName(name); + if (lexer.token() == Token.SEQUENCE) { + SQLDropSequenceStatement stmt = parseDropSequece(false); + statementList.add(stmt); + continue; + } + + if (lexer.token() == Token.TRIGGER) { + SQLDropTriggerStatement stmt = parseDropTrigger(false); + statementList.add(stmt); + continue; + } + if (lexer.token() == Token.USER) { + SQLDropUserStatement stmt = parseDropUser(); statementList.add(stmt); continue; } @@ -620,29 +633,6 @@ public class OracleStatementParser extends SQLStatementParser { return stmt; } - public OracleTruncateStatement parseTruncate() { - accept(Token.TRUNCATE); - accept(Token.TABLE); - OracleTruncateStatement stmt = new OracleTruncateStatement(); - - SQLName name = this.exprParser.name(); - stmt.addTableSource(name); - - if (identifierEquals("PURGE")) { - lexer.nextToken(); - - if (identifierEquals("SNAPSHOT")) { - lexer.nextToken(); - acceptIdentifier("LOG"); - stmt.setPurgeSnapshotLog(true); - } else { - throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); - } - } - - return stmt; - } - public OracleStatement parserAlter() { accept(Token.ALTER); if (lexer.token() == Token.SESSION) { @@ -705,7 +695,7 @@ public class OracleStatementParser extends SQLStatementParser { } return stmt; - } else if (identifierEquals("TRIGGER")) { + } else if (lexer.token() == Token.TRIGGER) { lexer.nextToken(); OracleAlterTriggerStatement stmt = new OracleAlterTriggerStatement(); stmt.setName(this.exprParser.name()); @@ -1655,7 +1645,7 @@ public class OracleStatementParser extends SQLStatementParser { lexer.nextToken(); acceptIdentifier("STATISTICS"); stmt.setComputeStatistics(true); - continue; + continue; } else if (lexer.token() == Token.ENABLE) { lexer.nextToken(); stmt.setEnable(true); @@ -1694,7 +1684,7 @@ public class OracleStatementParser extends SQLStatementParser { accept(Token.CREATE); } - acceptIdentifier("SEQUENCE"); + accept(Token.SEQUENCE); OracleCreateSequenceStatement stmt = new OracleCreateSequenceStatement(); stmt.setName(this.exprParser.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 40c5f3fa4c..0c3942a5a5 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 @@ -79,8 +79,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatem import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -118,7 +117,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectSubqueryTableSo import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUnique; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUsingIndexClause; @@ -542,10 +540,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleAlterTablespaceStatement x); - boolean visit(OracleTruncateStatement x); - - void endVisit(OracleTruncateStatement x); - boolean visit(OracleCreateSequenceStatement x); void endVisit(OracleCreateSequenceStatement x); @@ -582,9 +576,9 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleCreateDatabaseDbLinkStatement x); - boolean visit(OracleDropDatabaseLinkStatement x); + boolean visit(OracleDropDbLinkStatement x); - void endVisit(OracleDropDatabaseLinkStatement x); + void endVisit(OracleDropDbLinkStatement x); boolean visit(OracleDataTypeTimestamp x); @@ -598,10 +592,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleDataTypeIntervalDay x); - boolean visit(OracleDropSequenceStatement x); - - void endVisit(OracleDropSequenceStatement x); - boolean visit(OracleUsingIndexClause x); void endVisit(OracleUsingIndexClause x); @@ -613,12 +603,12 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleUnique x); void endVisit(OracleUnique x); - + boolean visit(OracleForeignKey x); - + void endVisit(OracleForeignKey x); - + boolean visit(OracleCheck x); - + void endVisit(OracleCheck 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 9466fd3407..1aa9c00565 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 @@ -87,8 +87,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatem import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -130,7 +129,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectSubqueryTableSo import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUnique; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUsingIndexClause; @@ -1208,16 +1206,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleTruncateStatement x) { - return true; - } - - @Override - public void endVisit(OracleTruncateStatement x) { - - } - @Override public boolean visit(OracleCreateSequenceStatement x) { return true; @@ -1309,12 +1297,12 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } @Override - public boolean visit(OracleDropDatabaseLinkStatement x) { + public boolean visit(OracleDropDbLinkStatement x) { return true; } @Override - public void endVisit(OracleDropDatabaseLinkStatement x) { + public void endVisit(OracleDropDbLinkStatement x) { } @@ -1348,16 +1336,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public boolean visit(OracleDropSequenceStatement x) { - return true; - } - - @Override - public void endVisit(OracleDropSequenceStatement x) { - - } - @Override public boolean visit(OracleUsingIndexClause x) { return true; @@ -1387,25 +1365,25 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora public void endVisit(OracleUnique x) { } - + @Override public boolean visit(OracleForeignKey x) { return true; } - + @Override public void endVisit(OracleForeignKey x) { - + } - + @Override public boolean visit(OracleCheck x) { return true; } - + @Override public void endVisit(OracleCheck 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 2f4bffcc6b..3da0da89d9 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 @@ -38,6 +38,7 @@ import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType; import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; +import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; import com.alibaba.druid.sql.ast.statement.SQLUnique; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; @@ -119,8 +120,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatem import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -163,7 +163,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectSubqueryTableSo import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUnique; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUsingIndexClause; @@ -2360,20 +2359,20 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } if (x.getEnable() != null) { - if(x.getEnable().booleanValue()) { + if (x.getEnable().booleanValue()) { print(" ENABLE"); } else { print(" DIABLE"); } } - + if (x.getInitially() != null) { print(" INITIALLY "); print(x.getInitially().name()); } - + if (x.getDeferrable() != null) { - if(x.getDeferrable().booleanValue()) { + if (x.getDeferrable().booleanValue()) { print(" DEFERRABLE"); } else { print(" NOT DEFERRABLE"); @@ -2833,7 +2832,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleTruncateStatement x) { + public boolean visit(SQLTruncateStatement x) { print("TRUNCATE TABLE "); printAndAccept(x.getTableSources(), ", "); @@ -2843,11 +2842,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - @Override - public void endVisit(OracleTruncateStatement x) { - - } - @Override public boolean visit(OracleCreateSequenceStatement x) { print("CREATE SEQUENCE "); @@ -3109,7 +3103,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public boolean visit(OracleDropDatabaseLinkStatement x) { + public boolean visit(OracleDropDbLinkStatement x) { print("DROP "); if (x.isPublic()) { print("PUBLIC "); @@ -3121,7 +3115,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } @Override - public void endVisit(OracleDropDatabaseLinkStatement x) { + public void endVisit(OracleDropDbLinkStatement x) { } @@ -3206,18 +3200,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public boolean visit(OracleDropSequenceStatement x) { - print("DROP SEQUENCE "); - x.getName().accept(this); - return false; - } - - @Override - public void endVisit(OracleDropSequenceStatement x) { - - } - @Override public boolean visit(OracleUsingIndexClause x) { print("USING INDEX"); @@ -3377,30 +3359,35 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS public void endVisit(OracleUnique x) { } - + @Override public boolean visit(OracleForeignKey x) { visit((SQLForeignKeyImpl) x); - + printConstraintState(x); return false; } - + @Override public void endVisit(OracleForeignKey x) { - + } - + @Override public boolean visit(OracleCheck x) { visit((SQLCheck) x); - + printConstraintState(x); return false; } - + @Override public void endVisit(OracleCheck x) { - + + } + + @Override + protected void printCascade() { + print(" CASCADE CONSTRAINTS"); } } 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 ab82b718f0..42051a63ca 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 @@ -38,7 +38,6 @@ import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; 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.ast.statement.SQLUnique; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; @@ -112,8 +111,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatem import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -155,7 +153,6 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectSubqueryTableSo import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectTableReference; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectUnPivot; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSetTransactionStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleTruncateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUnique; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUpdateStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleUsingIndexClause; @@ -1628,16 +1625,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleTruncateStatement x) { - return visit((SQLTruncateStatement) x); - } - - @Override - public void endVisit(OracleTruncateStatement x) { - - } - @Override public boolean visit(OracleCreateSequenceStatement x) { return false; @@ -1732,12 +1719,12 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } @Override - public boolean visit(OracleDropDatabaseLinkStatement x) { + public boolean visit(OracleDropDbLinkStatement x) { return false; } @Override - public void endVisit(OracleDropDatabaseLinkStatement x) { + public void endVisit(OracleDropDbLinkStatement x) { } @@ -1771,16 +1758,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public boolean visit(OracleDropSequenceStatement x) { - return false; - } - - @Override - public void endVisit(OracleDropSequenceStatement x) { - - } - @Override public boolean visit(OracleUsingIndexClause x) { return false; @@ -1810,24 +1787,24 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle public void endVisit(OracleUnique x) { } - + @Override public boolean visit(OracleForeignKey x) { return visit((SQLForeignKeyImpl) x); } - + @Override public void endVisit(OracleForeignKey x) { - + } - + @Override public boolean visit(OracleCheck x) { return visit((SQLCheck) x); } - + @Override public void endVisit(OracleCheck x) { - + } } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java deleted file mode 100644 index 1e60784078..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/stmt/PGTruncateStatement.java +++ /dev/null @@ -1,57 +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.postgresql.ast.stmt; - -import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; -import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; - -public class PGTruncateStatement extends SQLTruncateStatement implements PGSQLStatement { - - private boolean only; - private Boolean restartIdentity; - private Boolean cascade; - - public boolean isOnly() { - return only; - } - - public void setOnly(boolean only) { - this.only = only; - } - - public Boolean getRestartIdentity() { - return restartIdentity; - } - - public void setRestartIdentity(Boolean restartIdentity) { - this.restartIdentity = restartIdentity; - } - - public Boolean getCascade() { - return cascade; - } - - public void setCascade(Boolean cascade) { - this.cascade = cascade; - } - - public void accept0(PGASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, tableSources); - } - visitor.endVisit(this); - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java index 30750644ab..124df2bdf8 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGSQLStatementParser.java @@ -30,7 +30,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGDeleteStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.parser.Lexer; import com.alibaba.druid.sql.parser.ParserException; @@ -39,8 +38,8 @@ import com.alibaba.druid.sql.parser.Token; public class PGSQLStatementParser extends SQLStatementParser { - public PGSQLStatementParser(String sql) { - super (new PGExprParser(sql)); + public PGSQLStatementParser(String sql){ + super(new PGExprParser(sql)); } public PGSQLStatementParser(Lexer lexer){ @@ -113,7 +112,7 @@ public class PGSQLStatementParser extends SQLStatementParser { SQLInsertStatement.ValuesClause valuesCaluse = new SQLInsertStatement.ValuesClause(); this.exprParser.exprList(valuesCaluse.getValues()); stmt.addValueCause(valuesCaluse); - + accept(Token.RPAREN); if (lexer.token() == Token.COMMA) { lexer.nextToken(); @@ -187,53 +186,6 @@ public class PGSQLStatementParser extends SQLStatementParser { return deleteStatement; } - public SQLStatement parseTruncate() { - accept(Token.TRUNCATE); - - PGTruncateStatement stmt = new PGTruncateStatement(); - - if (lexer.token() == Token.TABLE) { - lexer.nextToken(); - } - - if (lexer.token() == Token.ONLY) { - lexer.nextToken(); - stmt.setOnly(true); - } - - for (;;) { - SQLName name = this.exprParser.name(); - stmt.addTableSource(name); - - if (lexer.token() == Token.COMMA) { - lexer.nextToken(); - continue; - } - - break; - } - - if (lexer.token() == Token.RESTART) { - lexer.nextToken(); - accept(Token.IDENTITY); - stmt.setRestartIdentity(Boolean.TRUE); - } else if (lexer.token() == Token.SHARE) { - lexer.nextToken(); - accept(Token.IDENTITY); - stmt.setRestartIdentity(Boolean.FALSE); - } - - if (lexer.token() == Token.CASCADE) { - lexer.nextToken(); - stmt.setCascade(Boolean.TRUE); - } else if (lexer.token() == Token.RESTRICT) { - lexer.nextToken(); - stmt.setCascade(Boolean.FALSE); - } - - return stmt; - } - public boolean parseStatementListDialect(List statementList) { if (lexer.token() == Token.WITH) { SQLStatement stmt = parseWith(); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java index 3137e0c8de..ddb49757d9 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitor.java @@ -23,7 +23,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGInsertStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.visitor.SQLASTVisitor; @@ -53,10 +52,6 @@ public interface PGASTVisitor extends SQLASTVisitor { boolean visit(PGWithClause x); - void endVisit(PGTruncateStatement x); - - boolean visit(PGTruncateStatement x); - void endVisit(PGDeleteStatement x); boolean visit(PGDeleteStatement x); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java index 349c380584..045375e505 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGASTVisitorAdapter.java @@ -26,7 +26,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.visitor.SQLASTVisitorAdapter; @@ -83,18 +82,6 @@ public class PGASTVisitorAdapter extends SQLASTVisitorAdapter implements PGASTVi @Override public boolean visit(PGWithClause x) { - - return true; - } - - @Override - public void endVisit(PGTruncateStatement x) { - - } - - @Override - public boolean visit(PGTruncateStatement x) { - return true; } 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 6da0e8fba9..2bb1b00c3d 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 @@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.postgresql.visitor; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; @@ -28,7 +29,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; @@ -236,12 +236,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor } @Override - public void endVisit(PGTruncateStatement x) { - - } - - @Override - public boolean visit(PGTruncateStatement x) { + public boolean visit(SQLTruncateStatement x) { print("TRUNCATE TABLE "); if (x.isOnly()) { print("ONLY "); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java index a898bf1968..7c77d54179 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/visitor/PGSchemaStatVisitor.java @@ -21,7 +21,6 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; -import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithClause; import com.alibaba.druid.sql.dialect.postgresql.ast.PGWithQuery; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGParameter; @@ -33,7 +32,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.Fetc import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectStatement; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGUpdateStatement; import com.alibaba.druid.sql.visitor.SchemaStatVisitor; import com.alibaba.druid.stat.TableStat; @@ -46,7 +44,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit public String getDbType() { return JdbcUtils.POSTGRESQL; } - + @Override public void endVisit(WindowClause x) { @@ -111,17 +109,6 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit return true; } - @Override - public void endVisit(PGTruncateStatement x) { - - } - - @Override - public boolean visit(PGTruncateStatement x) { - this.visit((SQLTruncateStatement) x); - return false; - } - @Override public void endVisit(PGDeleteStatement x) { @@ -206,7 +193,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit public void endVisit(PGSelectStatement x) { } - + @Override public boolean visit(PGSelectStatement x) { if (x.getWith() != null) { @@ -250,7 +237,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit @Override public void endVisit(PGSelectQueryBlock x) { - + } @Override @@ -260,7 +247,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit @Override public void endVisit(PGParameter x) { - + } @Override @@ -270,7 +257,7 @@ public class PGSchemaStatVisitor extends SchemaStatVisitor implements PGASTVisit @Override public void endVisit(PGFunctionTableSource x) { - + } @Override diff --git a/src/main/java/com/alibaba/druid/sql/parser/Keywords.java b/src/main/java/com/alibaba/druid/sql/parser/Keywords.java index b73a529d5a..d1458b5836 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Keywords.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Keywords.java @@ -111,6 +111,9 @@ public class Keywords { map.put("UPDATE", Token.UPDATE); map.put("VALUES", Token.VALUES); map.put("VIEW", Token.VIEW); + map.put("SEQUENCE", Token.SEQUENCE); + map.put("TRIGGER", Token.TRIGGER); + map.put("USER", Token.USER); map.put("WHEN", Token.WHEN); map.put("WHERE", Token.WHERE); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java index eb7347c771..a5ae3a15aa 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLCreateTableParser.java @@ -17,8 +17,6 @@ package com.alibaba.druid.sql.parser; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; -import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; -import com.alibaba.druid.sql.ast.statement.SQLUnique; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint; import com.alibaba.druid.sql.dialect.oracle.parser.OracleExprParser; 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 e7c89b6a13..27c18935a1 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -243,6 +243,8 @@ public class SQLExprParser extends SQLParser { case ENABLE: case DISABLE: case INITIALLY: + case SEQUENCE: + case USER: sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); lexer.nextToken(); break; diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java index 91a45c9708..8cecf0b8ac 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLParser.java @@ -93,11 +93,14 @@ public class SQLParser { case NOCOMPRESS: case KEEP_DUPLICATES: case EXCEPTIONS: + case PURGE: case INITIALLY: case END: case COMMENT: case ENABLE: case DISABLE: + case SEQUENCE: + case USER: alias = lexer.stringVal(); lexer.nextToken(); return alias; diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 0248d9f2f5..7df58bed06 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -43,7 +43,10 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLInsertInto; @@ -142,7 +145,7 @@ public class SQLStatementParser extends SQLParser { statementList.add(stmt); continue; - } else if (identifierEquals("USER")) { + } else if (lexer.token() == Token.USER) { SQLStatement stmt = parseDropUser(); statementList.add(stmt); continue; @@ -154,6 +157,10 @@ public class SQLStatementParser extends SQLParser { SQLStatement stmt = parseDropView(false); statementList.add(stmt); continue; + } else if (lexer.token() == Token.TRIGGER) { + SQLStatement stmt = parseDropTrigger(false); + statementList.add(stmt); + continue; } else { throw new ParserException("TODO " + lexer.token()); } @@ -396,10 +403,22 @@ public class SQLStatementParser extends SQLParser { if (acceptDrop) { accept(Token.DROP); } - accept(Token.TABLE); SQLDropTableStatement stmt = new SQLDropTableStatement(); + if (identifierEquals("TEMPORARY")) { + lexer.nextToken(); + stmt.setTemporary(true); + } + + accept(Token.TABLE); + + if (lexer.token() == Token.IF) { + lexer.nextToken(); + accept(Token.EXISTS); + stmt.setIfExists(true); + } + for (;;) { SQLName name = this.exprParser.name(); stmt.getTableSources().add(new SQLExprTableSource(name)); @@ -409,6 +428,62 @@ public class SQLStatementParser extends SQLParser { } break; } + + for (;;) { + if (identifierEquals("RESTRICT")) { + lexer.nextToken(); + stmt.setRestrict(true); + continue; + } + + if (identifierEquals("CASCADE")) { + lexer.nextToken(); + stmt.setCascade(true); + + if (identifierEquals("CONSTRAINTS")) { // for oracle + lexer.nextToken(); + } + + continue; + } + + if (lexer.token() == Token.PURGE) { + lexer.nextToken(); + stmt.setPurge(true); + continue; + } + + break; + } + + return stmt; + } + + protected SQLDropSequenceStatement parseDropSequece(boolean acceptDrop) { + if (acceptDrop) { + accept(Token.DROP); + } + + lexer.nextToken(); + + SQLName name = this.exprParser.name(); + + SQLDropSequenceStatement stmt = new SQLDropSequenceStatement(); + stmt.setName(name); + return stmt; + } + + protected SQLDropTriggerStatement parseDropTrigger(boolean acceptDrop) { + if (acceptDrop) { + accept(Token.DROP); + } + + lexer.nextToken(); + + SQLName name = this.exprParser.name(); + + SQLDropTriggerStatement stmt = new SQLDropTriggerStatement(); + stmt.setName(name); return stmt; } @@ -416,10 +491,17 @@ public class SQLStatementParser extends SQLParser { if (acceptDrop) { accept(Token.DROP); } - accept(Token.VIEW); SQLDropViewStatement stmt = new SQLDropViewStatement(); + accept(Token.VIEW); + + if (lexer.token() == Token.IF) { + lexer.nextToken(); + accept(Token.EXISTS); + stmt.setIfExists(true); + } + for (;;) { SQLName name = this.exprParser.name(); stmt.getTableSources().add(new SQLExprTableSource(name)); @@ -429,6 +511,20 @@ public class SQLStatementParser extends SQLParser { } break; } + + if (identifierEquals("RESTRICT")) { + lexer.nextToken(); + stmt.setRestrict(true); + } else if (identifierEquals("CASCADE")) { + lexer.nextToken(); + + if (identifierEquals("CONSTRAINTS")) { // for oracle + lexer.nextToken(); + } + + stmt.setCascade(true); + } + return stmt; } @@ -439,6 +535,11 @@ public class SQLStatementParser extends SQLParser { } SQLTruncateStatement stmt = new SQLTruncateStatement(); + if (lexer.token() == Token.ONLY) { + lexer.nextToken(); + stmt.setOnly(true); + } + for (;;) { SQLName name = this.exprParser.name(); stmt.addTableSource(name); @@ -451,6 +552,45 @@ public class SQLStatementParser extends SQLParser { break; } + for (;;) { + if (lexer.token() == Token.PURGE) { + lexer.nextToken(); + + if (identifierEquals("SNAPSHOT")) { + lexer.nextToken(); + acceptIdentifier("LOG"); + stmt.setPurgeSnapshotLog(true); + } else { + throw new ParserException("TODO : " + lexer.token() + " " + lexer.stringVal()); + } + continue; + } + + if (lexer.token() == Token.RESTART) { + lexer.nextToken(); + accept(Token.IDENTITY); + stmt.setRestartIdentity(Boolean.TRUE); + continue; + } else if (lexer.token() == Token.SHARE) { + lexer.nextToken(); + accept(Token.IDENTITY); + stmt.setRestartIdentity(Boolean.FALSE); + continue; + } + + if (lexer.token() == Token.CASCADE) { + lexer.nextToken(); + stmt.setCascade(Boolean.TRUE); + continue; + } else if (lexer.token() == Token.RESTRICT) { + lexer.nextToken(); + stmt.setCascade(Boolean.FALSE); + continue; + } + + break; + } + return stmt; } @@ -515,8 +655,21 @@ public class SQLStatementParser extends SQLParser { return false; } - public SQLStatement parseDropUser() { - throw new ParserException("TODO " + lexer.token()); + public SQLDropUserStatement parseDropUser() { + accept(Token.USER); + + SQLDropUserStatement stmt = new SQLDropUserStatement(); + for (;;) { + SQLExpr expr = this.exprParser.expr(); + stmt.getUsers().add(expr); + if (lexer.token() == Token.COMMA) { + lexer.nextToken(); + continue; + } + break; + } + + return stmt; } public SQLStatement parseDropIndex() { @@ -593,7 +746,7 @@ public class SQLStatementParser extends SQLParser { return createTableParser.parseCrateTable(false); } else if (token == Token.INDEX || token == Token.UNIQUE) { return parseCreateIndex(false); - } else if (identifierEquals("SEQUENCE")) { + } else if (lexer.token() == Token.SEQUENCE) { return parseCreateSequence(false); } else if (token == Token.OR) { lexer.nextToken(); diff --git a/src/main/java/com/alibaba/druid/sql/parser/Token.java b/src/main/java/com/alibaba/druid/sql/parser/Token.java index f907019680..d68349ec39 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Token.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Token.java @@ -31,6 +31,9 @@ public enum Token { CONSTRAINT("CONSTRAINT"), CHECK("CHECK"), VIEW("VIEW"), + SEQUENCE("SEQUENCE"), + TRIGGER("TRIGGER"), + USER("USER"), CREATE("CREATE"), ALTER("ALTER"), DROP("DROP"), @@ -196,6 +199,7 @@ public enum Token { NOCOMPRESS("NOCOMPRESS"), KEEP_DUPLICATES("KEEP_DUPLICATES"), EXCEPTIONS("EXCEPTIONS"), + PURGE("PURGE"), COMPUTE("COMPUTE"), 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 5f127f707c..0c3744e251 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -96,7 +96,10 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -786,14 +789,49 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab } public boolean visit(SQLDropTableStatement x) { - print("DROP TABLE "); + if (x.isTemporary()) { + print("DROP TEMPORARY TABLE "); + } else { + print("DROP TABLE "); + } + + if (x.isIfExists()) { + print("IF EXISTS "); + } + printAndAccept(x.getTableSources(), ", "); + + if (x.isCascade()) { + printCascade(); + } + + if (x.isRestrict()) { + print(" RESTRICT"); + } + + if (x.isPurge()) { + print(" PURGE"); + } + return false; } + protected void printCascade() { + print(" CASCADE"); + } + public boolean visit(SQLDropViewStatement x) { print("DROP VIEW "); + + if (x.isIfExists()) { + print("IF EXISTS "); + } + printAndAccept(x.getTableSources(), ", "); + + if (x.isCascade()) { + printCascade(); + } return false; } @@ -1636,4 +1674,35 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print(")"); return false; } + + @Override + public boolean visit(SQLDropSequenceStatement x) { + print("DROP SEQUENCE "); + x.getName().accept(this); + return false; + } + + @Override + public void endVisit(SQLDropSequenceStatement x) { + + } + + @Override + public boolean visit(SQLDropTriggerStatement x) { + print("DROP TRIGGER "); + x.getName().accept(this); + return false; + } + + @Override + public void endVisit(SQLDropUserStatement x) { + + } + + @Override + public boolean visit(SQLDropUserStatement x) { + print("DROP USER "); + printAndAccept(x.getUsers(), ", "); + 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 13d0bd37c4..50048c293b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitor.java @@ -80,7 +80,10 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -396,9 +399,9 @@ public interface SQLASTVisitor { void endVisit(SQLColumnPrimaryKey x); boolean visit(SQLColumnPrimaryKey x); - + boolean visit(SQLColumnUniqueKey x); - + void endVisit(SQLColumnUniqueKey x); void endVisit(SQLWithSubqueryClause x); @@ -472,16 +475,28 @@ public interface SQLASTVisitor { boolean visit(SQLCreateIndexStatement x); void endVisit(SQLCreateIndexStatement x); - + boolean visit(SQLAlterTableRenameColumn x); - + void endVisit(SQLAlterTableRenameColumn x); - + boolean visit(SQLColumnReference x); - + void endVisit(SQLColumnReference x); - + boolean visit(SQLForeignKeyImpl x); - + void endVisit(SQLForeignKeyImpl x); + + boolean visit(SQLDropSequenceStatement x); + + void endVisit(SQLDropSequenceStatement x); + + boolean visit(SQLDropTriggerStatement x); + + void endVisit(SQLDropTriggerStatement x); + + void endVisit(SQLDropUserStatement x); + + boolean visit(SQLDropUserStatement 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 74a5bc26b4..193baf73aa 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTVisitorAdapter.java @@ -81,7 +81,10 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprHint; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -700,12 +703,12 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { public boolean visit(SQLColumnPrimaryKey x) { return true; } - + @Override public void endVisit(SQLColumnUniqueKey x) { - + } - + @Override public boolean visit(SQLColumnUniqueKey x) { return true; @@ -879,7 +882,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLUnique x) { - + } @Override @@ -889,7 +892,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLCreateIndexStatement x) { - + } @Override @@ -899,7 +902,7 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLPrimaryKeyImpl x) { - + } @Override @@ -909,26 +912,56 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor { @Override public void endVisit(SQLAlterTableRenameColumn x) { - + } - + @Override public boolean visit(SQLColumnReference x) { return true; } - + @Override public void endVisit(SQLColumnReference x) { - + } - + @Override public boolean visit(SQLForeignKeyImpl x) { return true; } - + @Override public void endVisit(SQLForeignKeyImpl x) { - + + } + + @Override + public boolean visit(SQLDropSequenceStatement x) { + return true; + } + + @Override + public void endVisit(SQLDropSequenceStatement x) { + + } + + @Override + public boolean visit(SQLDropTriggerStatement x) { + return true; + } + + @Override + public void endVisit(SQLDropTriggerStatement x) { + + } + + @Override + public void endVisit(SQLDropUserStatement x) { + + } + + @Override + public boolean visit(SQLDropUserStatement x) { + return true; } } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java index 85d4b5abe4..6a9107128b 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -53,7 +53,11 @@ import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateViewStatement; import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement; import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropTriggerStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropUserStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; @@ -516,6 +520,12 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } + @Override + public boolean visit(SQLDropViewStatement x) { + setMode(x, Mode.Drop); + return true; + } + @Override public boolean visit(SQLDropTableStatement x) { setMode(x, Mode.Insert); @@ -1213,14 +1223,14 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { return false; } - + @Override public boolean visit(SQLForeignKeyImpl x) { - + for (SQLName column : x.getReferencedColumns()) { column.accept(this); } - + String table = x.getReferencedTableName().getSimleName(); setCurrentTable(table); @@ -1230,7 +1240,27 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { String columnName = column.getSimleName(); addColumn(table, columnName); } - + return false; } + + @Override + public boolean visit(SQLDropSequenceStatement x) { + return false; + } + + @Override + public boolean visit(SQLDropTriggerStatement x) { + return false; + } + + @Override + public void endVisit(SQLDropUserStatement x) { + + } + + @Override + public boolean visit(SQLDropUserStatement x) { + return true; + } } diff --git a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java index cfde1ac9d0..5a63b775d3 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java +++ b/src/main/java/com/alibaba/druid/wall/spi/MySqlWallVisitor.java @@ -46,7 +46,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlReplaceStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectGroupBy; @@ -412,12 +411,6 @@ public class MySqlWallVisitor extends MySqlASTVisitorAdapter implements WallVisi return true; } - @Override - public boolean visit(MySqlDropTableStatement x) { - WallVisitorUtils.check(this, x); - return true; - } - @Override public boolean visit(SQLSetStatement x) { return false; diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java index 75b39bf9d3..7cfc556845 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlASTVisitorAdapterTest.java @@ -30,9 +30,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStateme import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement.UserSpecification; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropTableStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropUser; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlExecuteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHelpStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement; @@ -135,8 +132,6 @@ public class MySqlASTVisitorAdapterTest extends TestCase { new MySqlResetStatement().accept(adapter); new MySqlCreateUserStatement().accept(adapter); new UserSpecification().accept(adapter); - new MySqlDropUser().accept(adapter); - new MySqlDropTableStatement().accept(adapter); new MySqlPartitionByKey().accept(adapter); new MySqlOutFileExpr().accept(adapter); new MySqlUpdateStatement().accept(adapter); @@ -182,7 +177,6 @@ public class MySqlASTVisitorAdapterTest extends TestCase { new MySqlShowTriggersStatement().accept(adapter); new MySqlAlterTableStatement().accept(adapter); new MySqlRenameTableStatement().accept(adapter); - new MySqlDropViewStatement().accept(adapter); new MySqlUnionQuery().accept(adapter); new MySqlUseIndexHint().accept(adapter); new MySqlIgnoreIndexHint().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropTriggerTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropTriggerTest.java new file mode 100644 index 0000000000..ff2e3c6dd2 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropTriggerTest.java @@ -0,0 +1,55 @@ +/* + * 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.bvt.sql.mysql; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; +import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; +import com.alibaba.druid.stat.TableStat; + +public class MySqlDropTriggerTest extends MysqlTest { + + public void test_0() throws Exception { + String sql = "DROP TRIGGER hr.salary_check; "; + + MySqlStatementParser parser = new MySqlStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement statemen = statementList.get(0); + print(statementList); + + Assert.assertEquals(1, statementList.size()); + + MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); + statemen.accept(visitor); + + System.out.println("Tables : " + visitor.getTables()); + System.out.println("fields : " + visitor.getColumns()); + System.out.println("coditions : " + visitor.getConditions()); + System.out.println("orderBy : " + visitor.getOrderByColumns()); + + Assert.assertEquals(0, visitor.getTables().size()); + Assert.assertEquals(0, visitor.getColumns().size()); + Assert.assertEquals(0, visitor.getConditions().size()); + + +// Assert.assertTrue(visitor.getColumns().contains(new Column("mytable", "last_name"))); + } +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropViewTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropViewTest.java index dd9baf42ce..b0baa201b1 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropViewTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlDropViewTest.java @@ -21,11 +21,10 @@ import org.junit.Assert; import com.alibaba.druid.sql.MysqlTest; import com.alibaba.druid.sql.ast.SQLStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDropViewStatement; +import com.alibaba.druid.sql.ast.statement.SQLDropViewStatement; import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor; import com.alibaba.druid.stat.TableStat; -import com.alibaba.druid.stat.TableStat.Column; public class MySqlDropViewTest extends MysqlTest { @@ -34,7 +33,7 @@ public class MySqlDropViewTest extends MysqlTest { MySqlStatementParser parser = new MySqlStatementParser(sql); List statementList = parser.parseStatementList(); - MySqlDropViewStatement stmt = (MySqlDropViewStatement) statementList.get(0); + SQLDropViewStatement stmt = (SQLDropViewStatement) statementList.get(0); print(statementList); Assert.assertEquals(1, statementList.size()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest.java new file mode 100644 index 0000000000..22008a8af7 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest.java @@ -0,0 +1,51 @@ +/* + * 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.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleDropTableTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP TABLE list_customers PURGE"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("DROP TABLE list_customers PURGE", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest2.java new file mode 100644 index 0000000000..9237b49c32 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTableTest2.java @@ -0,0 +1,51 @@ +/* + * 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.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleDropTableTest2 extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP TABLE list_customers CASCADE CONSTRAINTS"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("DROP TABLE list_customers CASCADE CONSTRAINTS", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTriggerTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTriggerTest.java new file mode 100644 index 0000000000..27c5c781b3 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropTriggerTest.java @@ -0,0 +1,51 @@ +/* + * 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.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleDropTriggerTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP TRIGGER hr.salary_check; "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("DROP TRIGGER hr.salary_check", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(0, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropUserTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropUserTest.java new file mode 100644 index 0000000000..607a84b446 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropUserTest.java @@ -0,0 +1,51 @@ +/* + * 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.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleDropUserTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP USER sidney; "; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + Assert.assertEquals(1, statementList.size()); + + Assert.assertEquals("DROP USER sidney", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(0, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropViewTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropViewTest.java new file mode 100644 index 0000000000..e70dddde18 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/OracleDropViewTest.java @@ -0,0 +1,50 @@ +/* + * 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.bvt.sql.oracle; + +import java.util.List; + +import org.junit.Assert; + +import com.alibaba.druid.sql.OracleTest; +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser; +import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor; +import com.alibaba.druid.util.JdbcConstants; + +public class OracleDropViewTest extends OracleTest { + + public void test_0() throws Exception { + String sql = // + "DROP view list_customers CASCADE CONSTRAINTS"; + + OracleStatementParser parser = new OracleStatementParser(sql); + List statementList = parser.parseStatementList(); + SQLStatement stmt = statementList.get(0); + print(statementList); + + Assert.assertEquals("DROP VIEW list_customers CASCADE CONSTRAINTS", + SQLUtils.toSQLString(stmt, JdbcConstants.ORACLE)); + + OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); + stmt.accept(visitor); + + Assert.assertEquals(1, visitor.getTables().size()); + } + + +} diff --git a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java index b0555a9d34..866163171a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/oracle/visitor/OracleASTVisitorAdapterTest.java @@ -2,6 +2,7 @@ package com.alibaba.druid.bvt.sql.oracle.visitor; import junit.framework.TestCase; +import com.alibaba.druid.sql.ast.statement.SQLDropSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalDay; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeIntervalYear; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp; @@ -68,8 +69,7 @@ import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateProcedureStatem import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateSequenceStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleCreateTableStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDeleteStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDatabaseLinkStatement; -import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropSequenceStatement; +import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleDropDbLinkStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExceptionStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExitStatement; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleExplainStatement; @@ -181,11 +181,11 @@ public class OracleASTVisitorAdapterTest extends TestCase { new OracleArgumentExpr().accept(adapter); new OracleSetTransactionStatement().accept(adapter); new OracleGrantStatement().accept(adapter); - new OracleDropSequenceStatement().accept(adapter); + new SQLDropSequenceStatement().accept(adapter); new OracleDataTypeIntervalDay().accept(adapter); new OracleDataTypeIntervalYear().accept(adapter); new OracleDataTypeTimestamp().accept(adapter); - new OracleDropDatabaseLinkStatement().accept(adapter); + new OracleDropDbLinkStatement().accept(adapter); new OracleCreateDatabaseDbLinkStatement().accept(adapter); new OracleCreateProcedureStatement().accept(adapter); new OracleSavePointStatement().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGASTVisitorAdapterTest.java b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGASTVisitorAdapterTest.java index bca4b285e1..4f6dbc8962 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGASTVisitorAdapterTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/postgresql/PGASTVisitorAdapterTest.java @@ -10,7 +10,6 @@ import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGFunctionTableSource; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.FetchClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.ForClause; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.WindowClause; -import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGTruncateStatement; import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitorAdapter; public class PGASTVisitorAdapterTest extends TestCase { @@ -19,13 +18,12 @@ public class PGASTVisitorAdapterTest extends TestCase { PGASTVisitorAdapter adapter = new PGASTVisitorAdapter(); new WindowClause().accept(adapter); - new FetchClause ().accept(adapter); - new ForClause ().accept(adapter); - new PGWithQuery ().accept(adapter); - new PGWithClause ().accept(adapter); - new PGTruncateStatement ().accept(adapter); - new PGDeleteStatement ().accept(adapter); - new PGParameter ().accept(adapter); - new PGFunctionTableSource ().accept(adapter); + new FetchClause().accept(adapter); + new ForClause().accept(adapter); + new PGWithQuery().accept(adapter); + new PGWithClause().accept(adapter); + new PGDeleteStatement().accept(adapter); + new PGParameter().accept(adapter); + new PGFunctionTableSource().accept(adapter); } }