mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved mysql sql parser. support alter table rename index.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright 1999-2017 Alibaba Group Holding Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.alibaba.druid.sql.ast.statement;
|
||||
|
||||
import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.SQLObjectImpl;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
|
||||
public class SQLAlterTableRenameIndex extends SQLObjectImpl implements SQLAlterTableItem {
|
||||
|
||||
private SQLName name;
|
||||
private SQLName to;
|
||||
|
||||
public SQLAlterTableRenameIndex(SQLName name, SQLName to){
|
||||
this.setName(name);
|
||||
this.setTo(to);
|
||||
}
|
||||
|
||||
public SQLAlterTableRenameIndex(){
|
||||
}
|
||||
|
||||
|
||||
public void accept0(SQLASTVisitor visitor) {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, name);
|
||||
acceptChild(visitor, to);
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
|
||||
public SQLName getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(SQLName x) {
|
||||
if (x != null) {
|
||||
x.setParent(this);
|
||||
}
|
||||
this.name = x;
|
||||
}
|
||||
|
||||
public SQLName getTo() {
|
||||
return to;
|
||||
}
|
||||
|
||||
public void setTo(SQLName x) {
|
||||
if (x != null) {
|
||||
x.setParent(this);
|
||||
}
|
||||
this.to = x;
|
||||
}
|
||||
}
|
||||
@@ -3651,6 +3651,17 @@ public class MySqlStatementParser extends SQLStatementParser {
|
||||
}
|
||||
} else if (lexer.identifierEquals("RENAME")) {
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.INDEX) {
|
||||
lexer.nextToken();
|
||||
SQLName name = this.exprParser.name();
|
||||
accept(Token.TO);
|
||||
SQLName to = this.exprParser.name();
|
||||
SQLAlterTableRenameIndex item = new SQLAlterTableRenameIndex(name, to);
|
||||
stmt.addItem(item);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (lexer.token() == Token.TO || lexer.token() == Token.AS) {
|
||||
lexer.nextToken();
|
||||
}
|
||||
|
||||
@@ -6130,4 +6130,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
|
||||
print('>');
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean visit(SQLAlterTableRenameIndex x) {
|
||||
print0(ucase ? "RENAME INDEX " : "rename index ");
|
||||
x.getName().accept(this);
|
||||
print0(ucase ? " TO " : " to ");
|
||||
x.getTo().accept(this);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -817,4 +817,7 @@ public interface SQLASTVisitor {
|
||||
|
||||
boolean visit(SQLDropMaterializedViewStatement x);
|
||||
void endVisit(SQLDropMaterializedViewStatement x);
|
||||
|
||||
boolean visit(SQLAlterTableRenameIndex x);
|
||||
void endVisit(SQLAlterTableRenameIndex x);
|
||||
}
|
||||
|
||||
@@ -1924,6 +1924,16 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLAlterTableRenameIndex x) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endVisit(SQLAlterTableRenameIndex x) {
|
||||
|
||||
}
|
||||
|
||||
public final boolean isEnabled(VisitorFeature feature) {
|
||||
return VisitorFeature.isEnabled(this.features, feature);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user