diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java index 7d70490ddf..6e6e55bdaf 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/parser/OdpsCreateTableParser.java @@ -81,10 +81,18 @@ public class OdpsCreateTableParser extends SQLCreateTableParser { SQLColumnDefinition column = this.exprParser.parseColumn(); stmt.getTableElementList().add(column); + if (lexer.isKeepComments() && lexer.hasComment()) { + column.addAfterComment(lexer.readAndResetComments()); + } + if (!(lexer.token() == (Token.COMMA))) { break; } else { lexer.nextToken(); + + if (lexer.isKeepComments() && lexer.hasComment()) { + column.addAfterComment(lexer.readAndResetComments()); + } } } accept(Token.RPAREN); diff --git a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java index ce5cefcabf..f37403865c 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/odps/visitor/OdpsOutputVisitor.java @@ -31,6 +31,7 @@ import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType; import com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLSubqueryTableSource; +import com.alibaba.druid.sql.ast.statement.SQLTableElement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsAddStatisticStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsAnalyzeTableStatement; import com.alibaba.druid.sql.dialect.odps.ast.OdpsCreateTableStatement; @@ -74,11 +75,20 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis incrementIndent(); println(); for (int i = 0; i < size; ++i) { - if (i != 0) { - print(", "); + SQLTableElement element = x.getTableElementList().get(i); + element.accept(this); + + if (i != size - 1) { + print(','); + } + if (this.isPrettyFormat() && element.hasAfterComment()) { + print(' '); + printComment(element.getAfterCommentsDirect(), "\n"); + } + + if (i != size - 1) { println(); } - x.getTableElementList().get(i).accept(this); } decrementIndent(); println(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest16.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest16.java index d2e1b94397..0a7ecb51c8 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest16.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest16.java @@ -8,12 +8,18 @@ import junit.framework.TestCase; public class OdpsFormatCommentTest16 extends TestCase { public void test_column_comment() throws Exception { - String sql = "create table t1 (f0 bigint) partitioned by (" + String sql = "create table t1 (" + + "\nf0 bigint, -- fc_0" + + "\nf1 string, -- fc_1" + + "\nf2 string -- fc_2" + + "\n) partitioned by (" + "ds string, -- c_1" + "\nhh string -- c_2" + "\n);"; Assert.assertEquals("CREATE TABLE t1t1 (" - + "\n\tf0 bigint" + + "\n\tf0 bigint, -- fc_0" + + "\n\tf1 string, -- fc_1" + + "\n\tf2 string -- fc_2" + "\n)" + "\nPARTITIONED BY (" + "\n\tds string, -- c_1"