diff --git a/src/main/java/com/alibaba/druid/sql/ast/SQLOrderBy.java b/src/main/java/com/alibaba/druid/sql/ast/SQLOrderBy.java index 69449080d5..52ecf34c61 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/SQLOrderBy.java +++ b/src/main/java/com/alibaba/druid/sql/ast/SQLOrderBy.java @@ -24,6 +24,9 @@ import java.util.List; public class SQLOrderBy extends SQLObjectImpl { protected final List items = new ArrayList(); + + // for postgres + private boolean sibings; public SQLOrderBy(){ @@ -44,6 +47,14 @@ public class SQLOrderBy extends SQLObjectImpl { public List getItems() { return this.items; } + + public boolean isSibings() { + return this.sibings; + } + + public void setSibings(boolean sibings) { + this.sibings = sibings; + } protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { @@ -57,7 +68,8 @@ public class SQLOrderBy extends SQLObjectImpl { public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + items.hashCode(); + result = prime * result + ((items == null) ? 0 : items.hashCode()); + result = prime * result + (sibings ? 1231 : 1237); return result; } @@ -67,7 +79,11 @@ public class SQLOrderBy extends SQLObjectImpl { if (obj == null) return false; if (getClass() != obj.getClass()) return false; SQLOrderBy other = (SQLOrderBy) obj; - return items.equals(other.items); + if (items == null) { + if (other.items != null) return false; + } else if (!items.equals(other.items)) return false; + if (sibings != other.sibings) return false; + return true; } public void addItem(SQLExpr expr, SQLOrderingSpecification type) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java index 6bcff9c4aa..64a39b66fd 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLAlterTableAddColumn.java @@ -18,12 +18,20 @@ package com.alibaba.druid.sql.ast.statement; import java.util.ArrayList; import java.util.List; +import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObjectImpl; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLAlterTableAddColumn extends SQLObjectImpl implements SQLAlterTableItem { private final List columns = new ArrayList(); + + + // for mysql + private SQLName firstColumn; + private SQLName afterColumn; + + private boolean first; @Override protected void accept0(SQLASTVisitor visitor) { @@ -37,4 +45,27 @@ public class SQLAlterTableAddColumn extends SQLObjectImpl implements SQLAlterTab return columns; } + public SQLName getFirstColumn() { + return firstColumn; + } + + public void setFirstColumn(SQLName first) { + this.firstColumn = first; + } + + public boolean isFirst() { + return first; + } + + public void setFirst(boolean first) { + this.first = first; + } + + public SQLName getAfterColumn() { + return afterColumn; + } + + public void setAfterColumn(SQLName after) { + this.afterColumn = after; + } } diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java index 1baf5d94e8..304fb66f0e 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLCreateIndexStatement.java @@ -31,6 +31,9 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLDDLS private List items = new ArrayList(); private String type; + + // for mysql + private String using; public SQLCreateIndexStatement(){ @@ -75,6 +78,14 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLDDLS public void setType(String type) { this.type = type; } + + public String getUsing() { + return using; + } + + public void setUsing(String using) { + this.using = using; + } @Override protected void accept0(SQLASTVisitor visitor) { diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowTablesStatement.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowTablesStatement.java index e04abe527e..c031f1550d 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowTablesStatement.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLShowTablesStatement.java @@ -24,6 +24,10 @@ public class SQLShowTablesStatement extends SQLStatementImpl { protected SQLName database; protected SQLExpr like; + + // for mysql + protected boolean full; + protected SQLExpr where; public SQLName getDatabase() { return database; @@ -49,6 +53,22 @@ public class SQLShowTablesStatement extends SQLStatementImpl { this.like = like; } + public boolean isFull() { + return full; + } + + public void setFull(boolean full) { + this.full = full; + } + + public SQLExpr getWhere() { + return where; + } + + public void setWhere(SQLExpr where) { + this.where = where; + } + @Override protected void accept0(SQLASTVisitor visitor) { if (visitor.visit(this)) { diff --git a/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java b/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java index d5496f1656..ebff90c92b 100644 --- a/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java +++ b/src/main/java/com/alibaba/druid/sql/builder/impl/SQLSelectBuilderImpl.java @@ -37,10 +37,8 @@ import com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit; import com.alibaba.druid.sql.dialect.odps.ast.OdpsSelectQueryBlock; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelect; import com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock; -import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock; import com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock.PGLimit; import com.alibaba.druid.sql.dialect.sqlserver.ast.SQLServerSelect; @@ -357,14 +355,6 @@ public class SQLSelectBuilderImpl implements SQLSelectBuilder { } protected SQLOrderBy createOrderBy() { - if (JdbcConstants.POSTGRESQL.equals(dbType)) { - return new PGOrderBy(); - } - - if (JdbcConstants.ORACLE.equals(dbType)) { - return new OracleOrderBy(); - } - return new SQLOrderBy(); } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlSelectGroupByExpr.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlGroupByItemExpr.java similarity index 87% rename from src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlSelectGroupByExpr.java rename to src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlGroupByItemExpr.java index 0ea6804fc6..eba479ce35 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlSelectGroupByExpr.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/expr/MySqlGroupByItemExpr.java @@ -21,10 +21,20 @@ import com.alibaba.druid.sql.ast.SQLOrderingSpecification; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; import com.alibaba.druid.sql.visitor.SQLASTVisitor; -public class MySqlSelectGroupByExpr extends SQLExprImpl implements MySqlExpr { +public class MySqlGroupByItemExpr extends SQLExprImpl implements MySqlExpr { protected SQLExpr expr; protected SQLOrderingSpecification type; + + public MySqlGroupByItemExpr() { + + } + + public MySqlGroupByItemExpr(SQLExpr expr, SQLOrderingSpecification type){ + super(); + this.expr = expr; + this.type = type; + } @Override protected void accept0(SQLASTVisitor visitor) { @@ -64,7 +74,7 @@ public class MySqlSelectGroupByExpr extends SQLExprImpl implements MySqlExpr { if (getClass() != obj.getClass()) { return false; } - MySqlSelectGroupByExpr other = (MySqlSelectGroupByExpr) obj; + MySqlGroupByItemExpr other = (MySqlGroupByItemExpr) obj; if (expr != other.expr) { return false; } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableAddColumn.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableAddColumn.java deleted file mode 100644 index 841c67cac0..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlAlterTableAddColumn.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 1999-2101 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.SQLName; -import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; -import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObject; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class MySqlAlterTableAddColumn extends SQLAlterTableAddColumn implements MySqlObject { - - private SQLName firstColumn; - private SQLName afterColumn; - - private boolean first; - - public SQLName getFirstColumn() { - return firstColumn; - } - - public void setFirstColumn(SQLName first) { - this.firstColumn = first; - } - - public boolean isFirst() { - return first; - } - - public void setFirst(boolean first) { - this.first = first; - } - - public SQLName getAfterColumn() { - return afterColumn; - } - - public void setAfterColumn(SQLName after) { - this.afterColumn = after; - } - - @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)) { - acceptChild(visitor, getColumns()); - - acceptChild(visitor, firstColumn); - acceptChild(visitor, afterColumn); - } - visitor.endVisit(this); - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java deleted file mode 100644 index ad0d496aa9..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlCreateIndexStatement.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 1999-2101 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.SQLCreateIndexStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; -import com.alibaba.druid.util.JdbcConstants; - -public class MySqlCreateIndexStatement extends SQLCreateIndexStatement implements MySqlStatement { - - private String using; - - public MySqlCreateIndexStatement() { - super (JdbcConstants.MYSQL); - } - - public String getUsing() { - return using; - } - - public void setUsing(String using) { - this.using = using; - } - - protected void accept0(SQLASTVisitor visitor) { - accept0((MySqlASTVisitor) visitor); - } - - @Override - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, getName()); - acceptChild(visitor, getTable()); - acceptChild(visitor, getItems()); - } - visitor.endVisit(this); - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java deleted file mode 100644 index 825f246148..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/ast/statement/MySqlShowTablesStatement.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1999-2101 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.SQLExpr; -import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement; -import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class MySqlShowTablesStatement extends SQLShowTablesStatement implements MySqlShowStatement { - - private boolean full; - - private SQLExpr where; - - public boolean isFull() { - return full; - } - - public void setFull(boolean full) { - this.full = full; - } - - public SQLExpr getWhere() { - return where; - } - - public void setWhere(SQLExpr where) { - this.where = where; - } - - public void accept0(MySqlASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, database); - acceptChild(visitor, like); - acceptChild(visitor, where); - } - visitor.endVisit(this); - } - - @Override - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof MySqlASTVisitor) { - accept0((MySqlASTVisitor) visitor); - } else { - throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName()); - } - } -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index cbfc135ca0..bbcffcb6cd 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -45,7 +45,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalUnit; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr.SearchModifier; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; @@ -859,8 +859,8 @@ public class MySqlExprParser extends SQLExprParser { return aggregateExpr; } - public MySqlSelectGroupByExpr parseSelectGroupByItem() { - MySqlSelectGroupByExpr item = new MySqlSelectGroupByExpr(); + public MySqlGroupByItemExpr parseSelectGroupByItem() { + MySqlGroupByItemExpr item = new MySqlGroupByItemExpr(); item.setExpr(expr()); 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 8344596dae..7e9eadffd0 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 @@ -35,6 +35,7 @@ import com.alibaba.druid.sql.ast.expr.SQLLiteralExpr; import com.alibaba.druid.sql.ast.expr.SQLNCharExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddConstraint; import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddIndex; import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint; @@ -50,6 +51,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement; import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition; import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement; +import com.alibaba.druid.sql.ast.statement.SQLCreateIndexStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateProcedureStatement; import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -62,6 +64,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLSetStatement; +import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement; import com.alibaba.druid.sql.ast.statement.SQLTableSource; import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; @@ -76,7 +79,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlRepeatStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAddColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; @@ -89,7 +91,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; @@ -153,7 +154,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -392,7 +392,7 @@ public class MySqlStatementParser extends SQLStatementParser { accept(Token.CREATE); } - MySqlCreateIndexStatement stmt = new MySqlCreateIndexStatement(); + SQLCreateIndexStatement stmt = new SQLCreateIndexStatement(); if (lexer.token() == Token.UNIQUE) { stmt.setType("UNIQUE"); @@ -434,7 +434,7 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - private void parseCreateIndexUsing(MySqlCreateIndexStatement stmt) { + private void parseCreateIndexUsing(SQLCreateIndexStatement stmt) { if (identifierEquals("USING")) { lexer.nextToken(); @@ -779,7 +779,7 @@ public class MySqlStatementParser extends SQLStatementParser { if (identifierEquals(TABLES)) { lexer.nextToken(); - MySqlShowTablesStatement stmt = parseShowTabless(); + SQLShowTablesStatement stmt = parseShowTabless(); stmt.setFull(full); return stmt; @@ -1474,8 +1474,8 @@ public class MySqlStatementParser extends SQLStatementParser { return stmt; } - private MySqlShowTablesStatement parseShowTabless() { - MySqlShowTablesStatement stmt = new MySqlShowTablesStatement(); + private SQLShowTablesStatement parseShowTabless() { + SQLShowTablesStatement stmt = new SQLShowTablesStatement(); if (lexer.token() == Token.FROM) { lexer.nextToken(); @@ -2555,7 +2555,7 @@ public class MySqlStatementParser extends SQLStatementParser { parenFlag = true; } - MySqlAlterTableAddColumn item = new MySqlAlterTableAddColumn(); + SQLAlterTableAddColumn item = new SQLAlterTableAddColumn(); for (;;) { SQLColumnDefinition columnDef = this.exprParser.parseColumn(); 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 26fdcf9cdc..3d7b3beef3 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 @@ -33,13 +33,12 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAddColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; @@ -52,7 +51,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; @@ -120,7 +118,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -213,10 +210,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { boolean visit(MySqlShowColumnsStatement x); - void endVisit(MySqlShowTablesStatement x); - - boolean visit(MySqlShowTablesStatement x); - void endVisit(MySqlShowDatabasesStatement x); boolean visit(MySqlShowDatabasesStatement x); @@ -445,14 +438,6 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlAlterTableStatement x); - boolean visit(MySqlAlterTableAddColumn x); - - void endVisit(MySqlAlterTableAddColumn x); - - boolean visit(MySqlCreateIndexStatement x); - - void endVisit(MySqlCreateIndexStatement x); - boolean visit(MySqlRenameTableStatement.Item x); void endVisit(MySqlRenameTableStatement.Item x); @@ -569,9 +554,9 @@ public interface MySqlASTVisitor extends SQLASTVisitor { void endVisit(MySqlHintStatement x); - boolean visit(MySqlSelectGroupByExpr x); + boolean visit(MySqlGroupByItemExpr x); - void endVisit(MySqlSelectGroupByExpr x); + void endVisit(MySqlGroupByItemExpr x); /** * support procedure 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 328671300e..5999b4ddd2 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 @@ -33,13 +33,12 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAddColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; @@ -52,7 +51,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; @@ -125,7 +123,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -333,17 +330,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq return true; } - @Override - public void endVisit(MySqlShowTablesStatement x) { - - } - - @Override - public boolean visit(MySqlShowTablesStatement x) { - - return true; - } - @Override public void endVisit(MySqlShowDatabasesStatement x) { @@ -916,26 +902,6 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } - @Override - public boolean visit(MySqlAlterTableAddColumn x) { - return true; - } - - @Override - public void endVisit(MySqlAlterTableAddColumn x) { - - } - - @Override - public boolean visit(MySqlCreateIndexStatement x) { - return true; - } - - @Override - public void endVisit(MySqlCreateIndexStatement x) { - - } - @Override public boolean visit(MySqlRenameTableStatement.Item x) { return true; @@ -1247,12 +1213,12 @@ public class MySqlASTVisitorAdapter extends SQLASTVisitorAdapter implements MySq } @Override - public boolean visit(MySqlSelectGroupByExpr x) { + public boolean visit(MySqlGroupByItemExpr x) { return true; } @Override - public void endVisit(MySqlSelectGroupByExpr x) { + public void endVisit(MySqlGroupByItemExpr x) { } 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 39a0fd3dd2..78f3b55336 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 @@ -32,6 +32,7 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLNullExpr; import com.alibaba.druid.sql.ast.expr.SQLQueryExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; +import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn; import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem; import com.alibaba.druid.sql.ast.statement.SQLAssignItem; import com.alibaba.druid.sql.ast.statement.SQLBlockStatement; @@ -45,6 +46,7 @@ import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; +import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlForceIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlIgnoreIndexHint; import com.alibaba.druid.sql.dialect.mysql.ast.MySqlKey; @@ -63,13 +65,12 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAddColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; @@ -82,7 +83,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; @@ -156,7 +156,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -1255,12 +1254,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public void endVisit(MySqlShowTablesStatement x) { - - } - - @Override - public boolean visit(MySqlShowTablesStatement x) { + public boolean visit(SQLShowTablesStatement x) { if (x.isFull()) { print0(ucase ? "SHOW FULL TABLES" : "show full tables"); } else { @@ -2512,7 +2506,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public boolean visit(MySqlAlterTableAddColumn x) { + public boolean visit(SQLAlterTableAddColumn x) { print0(ucase ? "ADD COLUMN " : "add column "); if (x.getColumns().size() > 1) { @@ -2535,40 +2529,6 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV return false; } - @Override - public void endVisit(MySqlAlterTableAddColumn x) { - - } - - @Override - public boolean visit(MySqlCreateIndexStatement x) { - print0(ucase ? "CREATE " : "create "); - if (x.getType() != null) { - print0(x.getType()); - print(' '); - } - - print0(ucase ? "INDEX " : "index "); - - x.getName().accept(this); - print0(ucase ? " ON " : " on "); - x.getTable().accept(this); - print0(" ("); - printAndAccept(x.getItems(), ", "); - print(')'); - - if (x.getUsing() != null) { - print0(ucase ? " USING " : " using ");; - print0(x.getUsing()); - } - return false; - } - - @Override - public void endVisit(MySqlCreateIndexStatement x) { - - } - @Override public boolean visit(MySqlRenameTableStatement.Item x) { x.getName().accept(this); @@ -3163,7 +3123,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public boolean visit(MySqlSelectGroupByExpr x) { + public boolean visit(MySqlGroupByItemExpr x) { x.getExpr().accept(this); if (x.getType() != null) { print(' '); @@ -3174,7 +3134,7 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV } @Override - public void endVisit(MySqlSelectGroupByExpr x) { + public void endVisit(MySqlGroupByItemExpr 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 8d3dd2ec63..5381ab39e5 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 @@ -22,9 +22,7 @@ import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; -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.SQLExprTableSource; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; @@ -50,13 +48,12 @@ import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlSelectIntoStatement; import com.alibaba.druid.sql.dialect.mysql.ast.clause.MySqlWhileStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlCharExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlExtractExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlIntervalExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlMatchAgainstExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName; import com.alibaba.druid.sql.dialect.mysql.ast.statement.CobarShowStatus; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAddColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableAlterColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableChangeColumn; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableCharacter; @@ -69,7 +66,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterUserStatement import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAnalyzeStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement.TableSpaceOption; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement; @@ -142,7 +138,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowVariantsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; @@ -413,16 +408,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS return false; } - @Override - public void endVisit(MySqlShowTablesStatement x) { - - } - - @Override - public boolean visit(MySqlShowTablesStatement x) { - return false; - } - @Override public void endVisit(MySqlShowDatabasesStatement x) { @@ -999,26 +984,6 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } - @Override - public boolean visit(MySqlAlterTableAddColumn x) { - return visit((SQLAlterTableAddColumn) x); - } - - @Override - public void endVisit(MySqlAlterTableAddColumn x) { - - } - - @Override - public boolean visit(MySqlCreateIndexStatement x) { - return visit((SQLCreateIndexStatement) x); - } - - @Override - public void endVisit(MySqlCreateIndexStatement x) { - - } - @Override public boolean visit(MySqlRenameTableStatement.Item x) { return false; @@ -1348,12 +1313,12 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS } @Override - public boolean visit(MySqlSelectGroupByExpr x) { + public boolean visit(MySqlGroupByItemExpr x) { return true; } @Override - public void endVisit(MySqlSelectGroupByExpr x) { + public void endVisit(MySqlGroupByItemExpr x) { } diff --git a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleOrderBy.java b/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleOrderBy.java deleted file mode 100644 index a897a74136..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/oracle/ast/OracleOrderBy.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 1999-2101 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; - -import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; -import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class OracleOrderBy extends SQLOrderBy { - - private boolean sibings; - - public OracleOrderBy(){ - - } - - public boolean isSibings() { - return this.sibings; - } - - public void setSibings(boolean sibings) { - this.sibings = sibings; - } - - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof OracleASTVisitor) { - accept0((OracleASTVisitor) visitor); - } else { - super.accept0(visitor); - } - } - - protected void accept0(OracleASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, this.items); - } - - visitor.endVisit(this); - } - - public void output(StringBuffer buf) { - buf.append("ORDER "); - if (this.sibings) { - buf.append("SIBLINGS "); - } - buf.append("BY "); - - int i = 0; - for (int size = this.items.size(); i < size; ++i) { - if (i != 0) { - buf.append(", "); - } - ((SQLSelectOrderByItem) this.items.get(i)).output(buf); - } - } - - protected SQLSelectOrderByItem createItem() { - return new SQLSelectOrderByItem(); - } -} 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 5d0d09a28f..03f8e92460 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 @@ -47,7 +47,6 @@ 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; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleLobStorageClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.OracleStorageClause.FlashCacheType; @@ -723,33 +722,6 @@ public class OracleExprParser extends SQLExprParser { return super.dotRest(expr); } - @Override - public OracleOrderBy parseOrderBy() { - if (lexer.token() == (Token.ORDER)) { - OracleOrderBy orderBy = new OracleOrderBy(); - - lexer.nextToken(); - - if (identifierEquals("SIBLINGS")) { - lexer.nextToken(); - orderBy.setSibings(true); - } - - accept(Token.BY); - - orderBy.addItem(parseSelectOrderByItem()); - - while (lexer.token() == (Token.COMMA)) { - lexer.nextToken(); - orderBy.addItem(parseSelectOrderByItem()); - } - - return orderBy; - } - - return null; - } - protected SQLAggregateExpr parseAggregateExpr(String methodName) { methodName = methodName.toUpperCase(); 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 5ebedba7a9..e05e6464c4 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 @@ -18,7 +18,6 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; 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; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; @@ -125,8 +124,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { void endVisit(OracleIntervalExpr x); - void endVisit(OracleOrderBy x); - void endVisit(OracleOuterExpr x); void endVisit(OracleSelectForUpdate x); @@ -165,8 +162,6 @@ public interface OracleASTVisitor extends SQLASTVisitor { boolean visit(OracleIntervalExpr x); - boolean visit(OracleOrderBy x); - boolean visit(OracleOuterExpr x); boolean visit(OracleSelectForUpdate 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 aa56338a5a..f1d97ea33a 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 @@ -18,7 +18,6 @@ package com.alibaba.druid.sql.dialect.oracle.visitor; 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; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; @@ -168,11 +167,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora } - @Override - public void endVisit(OracleOrderBy x) { - - } - @Override public void endVisit(OracleOuterExpr x) { @@ -276,12 +270,6 @@ public class OracleASTVisitorAdapter extends SQLASTVisitorAdapter implements Ora return true; } - @Override - public boolean visit(OracleOrderBy x) { - - return true; - } - @Override public boolean visit(OracleOuterExpr 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 f80c0ad260..c85e0bc89f 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 @@ -49,7 +49,6 @@ 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; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; @@ -350,19 +349,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS return false; } - public boolean visit(OracleOrderBy x) { - if (x.getItems().size() > 0) { - print0(ucase ? "ORDER " : "order "); - if (x.isSibings()) { - print0(ucase ? "SIBLINGS " : "siblings "); - } - print0(ucase ? "BY " : "by "); - - printAndAccept(x.getItems(), ", "); - } - return false; - } - public boolean visit(OracleOuterExpr x) { x.getExpr().accept(this); print0("(+)"); @@ -828,11 +814,6 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS } - @Override - public void endVisit(OracleOrderBy x) { - - } - @Override public void endVisit(OracleOuterExpr x) { 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 252962f9ee..c531e8fc23 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 @@ -22,7 +22,6 @@ import java.util.Map; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLName; import com.alibaba.druid.sql.ast.SQLObject; -import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.ast.expr.SQLPropertyExpr; @@ -41,7 +40,6 @@ 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; import com.alibaba.druid.sql.dialect.oracle.ast.OracleDataTypeTimestamp; -import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy; import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause; import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfSnapshotClause; @@ -396,11 +394,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle } - @Override - public void endVisit(OracleOrderBy x) { - - } - @Override public void endVisit(OracleOuterExpr x) { @@ -493,11 +486,6 @@ public class OracleSchemaStatVisitor extends SchemaStatVisitor implements Oracle return true; } - @Override - public boolean visit(OracleOrderBy x) { - return this.visit((SQLOrderBy) x); - } - @Override public boolean visit(OracleOuterExpr x) { diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGOrderBy.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGOrderBy.java deleted file mode 100644 index 543bb4bd70..0000000000 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/ast/PGOrderBy.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 1999-2101 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; - -import com.alibaba.druid.sql.ast.SQLOrderBy; -import com.alibaba.druid.sql.dialect.postgresql.visitor.PGASTVisitor; -import com.alibaba.druid.sql.visitor.SQLASTVisitor; - -public class PGOrderBy extends SQLOrderBy { - - private boolean sibings; - - public boolean isSibings() { - return this.sibings; - } - - public void setSibings(boolean sibings) { - this.sibings = sibings; - } - - protected void accept0(SQLASTVisitor visitor) { - if (visitor instanceof PGASTVisitor) { - accept0((PGASTVisitor) visitor); - } else { - super.accept0(visitor); - } - } - - protected void accept0(PGASTVisitor visitor) { - if (visitor.visit(this)) { - acceptChild(visitor, this.items); - } - - visitor.endVisit(this); - } - -} diff --git a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java index 62d6996a49..069e7d7c68 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/postgresql/parser/PGExprParser.java @@ -25,7 +25,6 @@ import com.alibaba.druid.sql.ast.expr.SQLTimestampExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr; import com.alibaba.druid.sql.ast.expr.SQLUnaryOperator; import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr; -import com.alibaba.druid.sql.dialect.postgresql.ast.PGOrderBy; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGBoxExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCidrExpr; import com.alibaba.druid.sql.dialect.postgresql.ast.expr.PGCircleExpr; @@ -67,32 +66,6 @@ public class PGExprParser extends SQLExprParser { return super.parseDataType(); } - @Override - public PGOrderBy parseOrderBy() { - if (lexer.token() == (Token.ORDER)) { - PGOrderBy orderBy = new PGOrderBy(); - lexer.nextToken(); - - if (identifierEquals("SIBLINGS")) { - lexer.nextToken(); - orderBy.setSibings(true); - } - - accept(Token.BY); - - orderBy.addItem(parseSelectOrderByItem()); - - while (lexer.token() == (Token.COMMA)) { - lexer.nextToken(); - orderBy.addItem(parseSelectOrderByItem()); - } - - return orderBy; - } - - return null; - } - public SQLExpr primary() { if (lexer.token() == Token.ARRAY) { SQLArrayExpr array = new SQLArrayExpr(); 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 00abe07fda..df65e578f9 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -1043,6 +1043,11 @@ public class SQLExprParser extends SQLParser { SQLOrderBy orderBy = new SQLOrderBy(); lexer.nextToken(); + + if (identifierEquals("SIBLINGS")) { + lexer.nextToken(); + orderBy.setSibings(true); + } accept(Token.BY); diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java index 3d43fdc4a9..5f05dbaa9e 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLSelectParser.java @@ -19,6 +19,7 @@ import java.util.List; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLOrderBy; +import com.alibaba.druid.sql.ast.SQLOrderingSpecification; import com.alibaba.druid.sql.ast.SQLSetQuantifier; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; import com.alibaba.druid.sql.ast.statement.SQLExprTableSource; @@ -34,6 +35,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUnionOperator; import com.alibaba.druid.sql.ast.statement.SQLUnionQuery; import com.alibaba.druid.sql.ast.statement.SQLUnionQueryTableSource; import com.alibaba.druid.sql.ast.statement.SQLWithSubqueryClause; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.util.JdbcConstants; public class SQLSelectParser extends SQLParser { @@ -265,7 +267,7 @@ public class SQLSelectParser extends SQLParser { SQLSelectGroupByClause groupBy = new SQLSelectGroupByClause(); for (;;) { - SQLExpr item = this.exprParser.expr(); + SQLExpr item = parseGroupByItem(); item.setParent(groupBy); groupBy.addItem(item); @@ -291,10 +293,6 @@ public class SQLSelectParser extends SQLParser { groupBy.setWithRollUp(true); } - if(JdbcConstants.MYSQL.equals(getDbType()) && lexer.token() == Token.DESC) { - lexer.nextToken(); // skip - } - queryBlock.setGroupBy(groupBy); } else if (lexer.token() == (Token.HAVING)) { lexer.nextToken(); @@ -307,7 +305,7 @@ public class SQLSelectParser extends SQLParser { accept(Token.BY); for (;;) { - SQLExpr item = this.exprParser.expr(); + SQLExpr item = parseGroupByItem(); item.setParent(groupBy); groupBy.addItem(item); @@ -335,6 +333,21 @@ public class SQLSelectParser extends SQLParser { } } + protected SQLExpr parseGroupByItem() { + SQLExpr item = this.exprParser.expr(); + + if(JdbcConstants.MYSQL.equals(getDbType())) { + if (lexer.token() == Token.DESC) { + lexer.nextToken(); // skip + item =new MySqlGroupByItemExpr(item, SQLOrderingSpecification.DESC); + } else if (lexer.token() == Token.ASC) { + lexer.nextToken(); // skip + item =new MySqlGroupByItemExpr(item, SQLOrderingSpecification.ASC); + } + } + return item; + } + protected void parseSelectList(SQLSelectQueryBlock queryBlock) { final List selectList = queryBlock.getSelectList(); for (;;) { 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 62a7405e4e..876dc2c77c 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -136,8 +136,8 @@ import com.alibaba.druid.sql.ast.statement.SQLIfStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement; import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource; -import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType; +import com.alibaba.druid.sql.ast.statement.SQLLoopStatement; import com.alibaba.druid.sql.ast.statement.SQLOpenStatement; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey; import com.alibaba.druid.sql.ast.statement.SQLPrimaryKeyImpl; @@ -854,7 +854,11 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab public boolean visit(SQLOrderBy x) { if (x.getItems().size() > 0) { - print0(ucase ? "ORDER BY " : "order by "); + if (x.isSibings()) { + print0(ucase ? "ORDER SIBLINGS BY " : "order siblings by "); + } else { + print0(ucase ? "ORDER BY " : "order by "); + } printAndAccept(x.getItems(), ", "); } @@ -1876,6 +1880,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab print0(" ("); printAndAccept(x.getItems(), ", "); print(')'); + + // for mysql + if (x.getUsing() != null) { + print0(ucase ? " USING " : " using ");; + print0(x.getUsing()); + } return false; } 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 444a0f420b..6d79f59543 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SchemaStatVisitor.java @@ -88,6 +88,7 @@ import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem; import com.alibaba.druid.sql.ast.statement.SQLSelectQuery; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; +import com.alibaba.druid.sql.ast.statement.SQLShowTablesStatement; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; import com.alibaba.druid.sql.ast.statement.SQLTableElement; import com.alibaba.druid.sql.ast.statement.SQLTruncateStatement; @@ -1439,4 +1440,9 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter { } return true; } + + @Override + public boolean visit(SQLShowTablesStatement x) { + return false; + } } diff --git a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java index 874c7ab817..a7ba139492 100644 --- a/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/wall/spi/WallVisitorUtils.java @@ -95,7 +95,7 @@ import com.alibaba.druid.sql.ast.statement.SQLUpdateSetItem; import com.alibaba.druid.sql.ast.statement.SQLUpdateStatement; import com.alibaba.druid.sql.ast.statement.SQLUseStatement; import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlOutFileExpr; -import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlSelectGroupByExpr; +import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlGroupByItemExpr; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement; @@ -1206,7 +1206,7 @@ public class WallVisitorUtils { return true; } else if (parent instanceof Limit) { return true; - } else if (parent instanceof MySqlSelectGroupByExpr) { + } else if (parent instanceof MySqlGroupByItemExpr) { return true; } 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 b117a30bca..e864c0af36 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 @@ -84,7 +84,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveHostsStat import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowSlaveStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowStatusStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTableStatusStatement; -import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTablesStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowTriggersStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlShowWarningsStatement; import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlStartTransactionStatement; @@ -116,7 +115,6 @@ public class MySqlASTVisitorAdapterTest extends TestCase { new MySqlStartTransactionStatement().accept(adapter); new MySqlRollbackStatement().accept(adapter); new MySqlShowColumnsStatement().accept(adapter); - new MySqlShowTablesStatement().accept(adapter); new MySqlShowDatabasesStatement().accept(adapter); new MySqlShowWarningsStatement().accept(adapter); new MySqlShowStatusStatement().accept(adapter); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_20.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_20.java index d205d9ebf4..34e6d4e287 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_20.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/MySqlSelectTest_20.java @@ -20,6 +20,7 @@ import java.util.List; import org.junit.Assert; import com.alibaba.druid.sql.MysqlTest; +import com.alibaba.druid.sql.SQLUtils; 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; @@ -32,13 +33,13 @@ public class MySqlSelectTest_20 extends MysqlTest { MySqlStatementParser parser = new MySqlStatementParser(sql); List statementList = parser.parseStatementList(); - SQLStatement statemen = statementList.get(0); + SQLStatement stmt = statementList.get(0); print(statementList); Assert.assertEquals(1, statementList.size()); MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); - statemen.accept(visitor); + stmt.accept(visitor); System.out.println("Tables : " + visitor.getTables()); System.out.println("fields : " + visitor.getColumns()); @@ -49,5 +50,12 @@ public class MySqlSelectTest_20 extends MysqlTest { Assert.assertEquals(4, visitor.getColumns().size()); Assert.assertEquals(1, visitor.getConditions().size()); Assert.assertEquals(0, visitor.getOrderByColumns().size()); + + String output = SQLUtils.toMySqlString(stmt); + + Assert.assertEquals("SELECT bsvariety, MAX(bsh) AS bsh, MIN(bsl) AS bsl" + + "\nFROM exchange_market_info" + + "\nWHERE bsdate > date_sub(now(), INTERVAL 1 DAY)" + + "\nGROUP BY bsvariety DESC", output); } }