improved mysql sql parser. support alter table rename index.

This commit is contained in:
wenshao
2018-01-12 19:32:37 +08:00
parent 17f4731b1c
commit c39f787c10
6 changed files with 134 additions and 0 deletions
@@ -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);
}