mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improve sql parer ddl support
This commit is contained in:
+1
-12
@@ -1019,18 +1019,7 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
|
||||
|
||||
@Override
|
||||
public boolean visit(MySqlAlterTableStatement x) {
|
||||
String tableName = x.getName().toString();
|
||||
TableStat stat = getTableStat(tableName);
|
||||
stat.incrementAlterCount();
|
||||
|
||||
setCurrentTable(x, tableName);
|
||||
|
||||
for (SQLAlterTableItem item : x.getItems()) {
|
||||
item.setParent(x);
|
||||
item.accept(this);
|
||||
}
|
||||
|
||||
return false;
|
||||
return visit((SQLAlterTableStatement) x);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -23,6 +23,11 @@ import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.SQLStatement;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLListExpr;
|
||||
import com.alibaba.druid.sql.ast.expr.SQLQueryExpr;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableKeys;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCommentStatement;
|
||||
@@ -280,6 +285,50 @@ public class SQLStatementParser extends SQLParser {
|
||||
|
||||
public SQLStatement parseAlter() {
|
||||
accept(Token.ALTER);
|
||||
|
||||
if (lexer.token() == Token.TABLE) {
|
||||
lexer.nextToken();
|
||||
|
||||
SQLAlterTableStatement stmt = new SQLAlterTableStatement();
|
||||
stmt.setName(this.exprParser.name());
|
||||
|
||||
for (;;) {
|
||||
if (identifierEquals("ADD")) {
|
||||
lexer.nextToken();
|
||||
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
} else if (identifierEquals("DISABLE")) {
|
||||
lexer.nextToken();
|
||||
|
||||
if (lexer.token() == Token.CONSTRAINT) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableDisableConstraint item = new SQLAlterTableDisableConstraint();
|
||||
item.setConstraintName(this.exprParser.name());
|
||||
stmt.getItems().add(item);
|
||||
} else {
|
||||
acceptIdentifier("KEYS");
|
||||
SQLAlterTableDisableKeys item = new SQLAlterTableDisableKeys();
|
||||
stmt.getItems().add(item);
|
||||
}
|
||||
} else if (identifierEquals("ENABLE")) {
|
||||
lexer.nextToken();
|
||||
if (lexer.token() == Token.CONSTRAINT) {
|
||||
lexer.nextToken();
|
||||
SQLAlterTableEnableConstraint item = new SQLAlterTableEnableConstraint();
|
||||
item.setConstraintName(this.exprParser.name());
|
||||
stmt.getItems().add(item);
|
||||
} else {
|
||||
acceptIdentifier("KEYS");
|
||||
SQLAlterTableEnableKeys item = new SQLAlterTableEnableKeys();
|
||||
stmt.getItems().add(item);
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return stmt;
|
||||
}
|
||||
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
|
||||
}
|
||||
|
||||
|
||||
@@ -77,6 +77,8 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropPrimaryKey;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableKeys;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType;
|
||||
@@ -1437,4 +1439,21 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
|
||||
x.getConstraintName().accept(this);
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLAlterTableStatement x) {
|
||||
print("ALTER TABLE ");
|
||||
x.getName().accept(this);
|
||||
incrementIndent();
|
||||
for (int i = 0; i < x.getItems().size(); ++i) {
|
||||
SQLAlterTableItem item = x.getItems().get(i);
|
||||
if (i != 0) {
|
||||
print(',');
|
||||
}
|
||||
println();
|
||||
item.accept(this);
|
||||
}
|
||||
decrementIndent();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDisableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropForeinKey;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableEnableConstraint;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
|
||||
@@ -1058,4 +1059,20 @@ public class SchemaStatVisitor extends SQLASTVisitorAdapter {
|
||||
public boolean visit(SQLAlterTableEnableConstraint x) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean visit(SQLAlterTableStatement x) {
|
||||
String tableName = x.getName().toString();
|
||||
TableStat stat = getTableStat(tableName);
|
||||
stat.incrementAlterCount();
|
||||
|
||||
setCurrentTable(x, tableName);
|
||||
|
||||
for (SQLAlterTableItem item : x.getItems()) {
|
||||
item.setParent(x);
|
||||
item.accept(this);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user