refactor sql parser

This commit is contained in:
高铁
2016-01-10 16:59:11 +08:00
parent fa265636f0
commit d4066b101c
30 changed files with 174 additions and 594 deletions
@@ -24,6 +24,9 @@ import java.util.List;
public class SQLOrderBy extends SQLObjectImpl {
protected final List<SQLSelectOrderByItem> items = new ArrayList<SQLSelectOrderByItem>();
// for postgres
private boolean sibings;
public SQLOrderBy(){
@@ -44,6 +47,14 @@ public class SQLOrderBy extends SQLObjectImpl {
public List<SQLSelectOrderByItem> 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) {
@@ -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<SQLColumnDefinition> columns = new ArrayList<SQLColumnDefinition>();
// 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;
}
}
@@ -31,6 +31,9 @@ public class SQLCreateIndexStatement extends SQLStatementImpl implements SQLDDLS
private List<SQLSelectOrderByItem> items = new ArrayList<SQLSelectOrderByItem>();
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) {
@@ -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)) {
@@ -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();
}
@@ -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;
}
@@ -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);
}
}
@@ -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);
}
}
@@ -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());
}
}
}
@@ -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());
@@ -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();
@@ -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
@@ -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) {
}
@@ -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) {
}
@@ -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) {
}
@@ -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();
}
}
@@ -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();
@@ -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);
@@ -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) {
@@ -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) {
@@ -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) {
@@ -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);
}
}
@@ -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();
@@ -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);
@@ -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<SQLSelectItem> selectList = queryBlock.getSelectList();
for (;;) {
@@ -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;
}
@@ -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;
}
}
@@ -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;
}