improved odps sql parser. support change column. issue #1455

This commit is contained in:
wenshao
2016-10-24 01:23:56 +08:00
parent 5892051cf8
commit 0caef08940
3 changed files with 28 additions and 3 deletions
@@ -881,6 +881,22 @@ public class SQLStatementParser extends SQLParser {
} else {
throw new ParserException("TODO " + lexer.token() + " " + lexer.stringVal());
}
} else if (identifierEquals("CHANGE")) {
lexer.nextToken();
accept(Token.COLUMN);
SQLName columnName = this.exprParser.name();
accept(Token.COMMENT);
SQLExpr comment = this.exprParser.primary();
SQLColumnDefinition columnDefinition = new SQLColumnDefinition();
columnDefinition.setName(columnName);
columnDefinition.setComment(comment);
SQLAlterTableAlterColumn changeColumn = new SQLAlterTableAlterColumn();
changeColumn.setColumn(columnDefinition);
stmt.addItem(changeColumn);
} else if (lexer.token() == Token.WITH) {
lexer.nextToken();
acceptIdentifier("NOCHECK");
@@ -1637,9 +1637,13 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
return false;
}
protected boolean isOdps() {
return JdbcConstants.ODPS.equals(dbType);
}
@Override
public boolean visit(SQLAlterTableAddColumn x) {
boolean odps = JdbcConstants.ODPS.equals(dbType);
boolean odps = isOdps();
if (odps) {
print0(ucase ? "ADD COLUMNS (" : "add columns (");
} else {
@@ -1962,7 +1966,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet
@Override
public boolean visit(SQLAlterTableAlterColumn x) {
print0(ucase ? "ALTER COLUMN " : "alter column ");
boolean odps = isOdps();
if (odps) {
print0(ucase ? "CHANGE COLUMN " : "change column ");
} else {
print0(ucase ? "ALTER COLUMN " : "alter column ");
}
x.getColumn().accept(this);
if (x.isSetNotNull()) { // postgresql
@@ -24,7 +24,7 @@ import org.junit.Assert;
import java.util.List;
public class OdpsSelectTest19 extends TestCase {
public class OdpsAlterTableAddColumnsTest extends TestCase {
public void test_select() throws Exception {
String sql = "alter table adl_smeta_column_indi_rule_relation_sdt add columns (rule_level string);";//