improve ddl parser

This commit is contained in:
wenshao
2013-03-22 01:30:27 +08:00
parent dd266f70cf
commit cc2e9793fa
15 changed files with 306 additions and 4 deletions
@@ -40,7 +40,7 @@ public class MySqlAlterTableChangeColumn extends MySqlObjectImpl implements SQLA
if (visitor.visit(this)) {
acceptChild(visitor, columnName);
acceptChild(visitor, newColumnDefinition);
acceptChild(visitor, firstColumn);
acceptChild(visitor, afterColumn);
}
@@ -16,6 +16,7 @@
package com.alibaba.druid.sql.dialect.mysql.parser;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.statement.SQLCheck;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
@@ -135,6 +136,13 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
accept(Token.RPAREN);
stmt.getTableElementList().add(fk);
} else if (lexer.token() == Token.CHECK) {
lexer.nextToken();
SQLCheck check = new SQLCheck();
accept(Token.LPAREN);
check.setExpr(this.exprParser.expr());
accept(Token.RPAREN);
stmt.getTableElementList().add(check);
}
if (!(lexer.token() == (Token.COMMA))) {
@@ -307,6 +307,10 @@ public class MySqlStatementParser extends SQLStatementParser {
if (identifierEquals(USER)) {
return parseCreateUser();
}
if (lexer.token() == Token.VIEW) {
return parseCreateView();
}
throw new ParserException("TODO " + lexer.token());
}
@@ -21,6 +21,8 @@ import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableItem;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
@@ -1146,6 +1148,11 @@ public class MySqlSchemaStatVisitor extends SchemaStatVisitor implements MySqlAS
@Override
public boolean visit(MySqlAlterTableChangeColumn x) {
SQLAlterTableStatement stmt = (SQLAlterTableStatement) x.getParent();
String table = stmt.getName().toString();
String columnName = x.getColumnName().toString();
addColumn(table, columnName);
return false;
}