diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 8a004ae46a..d8247a032e 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -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"); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 29545e8c56..ae75bcb884 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -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 diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelectTest19.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableAddColumnsTest.java similarity index 97% rename from src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelectTest19.java rename to src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableAddColumnsTest.java index 6c3b3aa7ac..95e4ebca6d 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsSelectTest19.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsAlterTableAddColumnsTest.java @@ -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);";//