bug fixed for odps sql formatter

This commit is contained in:
shaojin.wensj
2015-07-20 14:19:55 +08:00
parent eb24ee61fc
commit cb85169adf
6 changed files with 80 additions and 6 deletions
@@ -108,10 +108,17 @@ public class OdpsCreateTableParser extends SQLCreateTableParser {
SQLColumnDefinition column = this.exprParser.parseColumn();
stmt.getPartitionColumns().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());
}
}
}
@@ -24,6 +24,7 @@ import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLCaseExpr;
import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType;
@@ -93,13 +94,27 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis
int partitionSize = x.getPartitionColumns().size();
if (partitionSize > 0) {
println();
print("PARTITIONED (");
print("PARTITIONED BY (");
incrementIndent();
println();
for (int i = 0; i < partitionSize; ++i) {
if (i != 0) {
print(", ");
SQLColumnDefinition column = x.getPartitionColumns().get(i);
column.accept(this);
if (i != partitionSize - 1) {
print(',');
}
if (this.isPrettyFormat() && column.hasAfterComment()) {
print(' ');
printComment(column.getAfterCommentsDirect(), "\n");
}
if (i != partitionSize - 1) {
println();
}
x.getPartitionColumns().get(i).accept(this);
}
decrementIndent();
println();
print(")");
}
@@ -989,7 +989,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print(" COMMENT ");
x.getComment().accept(this);
}
return false;
}
@@ -31,7 +31,10 @@ public class OdpsCreateTableTest extends TestCase {
+ "\n\ttotal_price DOUBLE"//
+ "\n)"//
+ "\nCOMMENT 'xxxx'"//
+ "\nPARTITIONED (sale_date STRING, region STRING)"//
+ "\nPARTITIONED BY ("
+ "\n\tsale_date STRING,"
+ "\n\tregion STRING"
+ "\n)"//
+ "\nLIFECYCLE 5", output);
}
}
@@ -0,0 +1,23 @@
package com.alibaba.druid.bvt.sql.odps;
import org.junit.Assert;
import com.alibaba.druid.sql.SQLUtils;
import junit.framework.TestCase;
public class OdpsFormatCommentTest15 extends TestCase {
public void test_column_comment() throws Exception {
String sql = "create table t1 (f0 bigint) partitioned by (ds string, hh string);";
Assert.assertEquals("CREATE TABLE t1t1 ("
+ "\n\tf0 bigint"
+ "\n)"
+ "\nPARTITIONED BY ("
+ "\n\tds string,"
+ "\n\thh string"
+ "\n)"
+ "\n;", SQLUtils.formatOdps(sql));
}
}
@@ -0,0 +1,26 @@
package com.alibaba.druid.bvt.sql.odps;
import org.junit.Assert;
import com.alibaba.druid.sql.SQLUtils;
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 ("
+ "ds string, -- c_1"
+ "\nhh string -- c_2"
+ "\n);";
Assert.assertEquals("CREATE TABLE t1t1 ("
+ "\n\tf0 bigint"
+ "\n)"
+ "\nPARTITIONED BY ("
+ "\n\tds string, -- c_1"
+ "\n\thh string -- c_2"
+ "\n)"
+ "\n;", SQLUtils.formatOdps(sql));
}
}