From 3de275fa8cc6781196b91f07bf83a201a0dd7433 Mon Sep 17 00:00:00 2001 From: "shaojin.wensj" Date: Tue, 28 Jul 2015 23:19:17 +0800 Subject: [PATCH] improved odps sql formmatter --- .../odps/visitor/OdpsOutputVisitor.java | 14 ++++++++++++-- .../bvt/sql/odps/OdpsCreateTableTest.java | 2 +- .../bvt/sql/odps/OdpsCreateTableTest2.java | 2 +- .../bvt/sql/odps/OdpsCreateTableTest_1.java | 2 +- .../bvt/sql/odps/OdpsFormatCommentTest15.java | 8 ++++---- .../bvt/sql/odps/OdpsFormatCommentTest16.java | 14 ++++++-------- .../bvt/sql/odps/OdpsFormatCommentTest18.java | 8 ++++---- .../bvt/sql/odps/OdpsFormatCommentTest21.java | 18 ++++++++++++++++++ 8 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest21.java 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 00cc464ec2..f8053931b7 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 @@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.odps.visitor; import java.util.List; +import com.alibaba.druid.sql.ast.SQLDataType; import com.alibaba.druid.sql.ast.SQLHint; import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.SQLSetQuantifier; @@ -62,8 +63,6 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis x.getName().accept(this); - x.getName().accept(this); - if (x.getLike() != null) { print(" LIKE "); x.getLike().accept(this); @@ -702,4 +701,15 @@ public class OdpsOutputVisitor extends SQLASTOutputVisitor implements OdpsASTVis print(JoinType.toString(joinType)); } } + + public boolean visit(SQLDataType x) { + print(x.getName().toUpperCase()); + if (x.getArguments().size() > 0) { + print("("); + printAndAccept(x.getArguments(), ", "); + print(")"); + } + + return false; + } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java index 96905760d2..7fb7630ebf 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest.java @@ -25,7 +25,7 @@ public class OdpsCreateTableTest extends TestCase { SQLStatement stmt = parser.parseStatementList().get(0); parser.match(Token.EOF); String output = SQLUtils.toOdpsString(stmt); - Assert.assertEquals("CREATE TABLE IF NOT EXISTS sale_detailsale_detail ("// + Assert.assertEquals("CREATE TABLE IF NOT EXISTS sale_detail ("// + "\n\tshop_name STRING,"// + "\n\tcustomer_id STRING,"// + "\n\ttotal_price DOUBLE"// diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest2.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest2.java index b33be6d2a8..8a71f46d3a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest2.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest2.java @@ -17,7 +17,7 @@ public class OdpsCreateTableTest2 extends TestCase { SQLStatement stmt = parser.parseStatementList().get(0); parser.match(Token.EOF); String output = SQLUtils.toOdpsString(stmt); - Assert.assertEquals("CREATE TABLE sale_detailsale_detail" + Assert.assertEquals("CREATE TABLE sale_detail" + "\nSELECT *" // + "\nFROM dual", output); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java index 037c51c10b..ee70e3c024 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsCreateTableTest_1.java @@ -17,6 +17,6 @@ public class OdpsCreateTableTest_1 extends TestCase { SQLStatement stmt = parser.parseStatementList().get(0); parser.match(Token.EOF); String output = SQLUtils.toOdpsString(stmt); - Assert.assertEquals("CREATE TABLE sale_detail_likesale_detail_like LIKE sale_detail", output); + Assert.assertEquals("CREATE TABLE sale_detail_like LIKE sale_detail", output); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest15.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest15.java index 3d20d95d2c..8e6de173e0 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest15.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest15.java @@ -9,12 +9,12 @@ 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" + Assert.assertEquals("CREATE TABLE t1 (" + + "\n\tf0 BIGINT" + "\n)" + "\nPARTITIONED BY (" - + "\n\tds string," - + "\n\thh string" + + "\n\tds STRING," + + "\n\thh STRING" + "\n);", SQLUtils.formatOdps(sql)); } 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 e0f2779055..959c070598 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 @@ -1,7 +1,5 @@ package com.alibaba.druid.bvt.sql.odps; -import java.net.URLDecoder; - import org.junit.Assert; import com.alibaba.druid.sql.SQLUtils; @@ -18,14 +16,14 @@ public class OdpsFormatCommentTest16 extends TestCase { + "ds string, -- c_1" + "\nhh string -- c_2" + "\n);"; - Assert.assertEquals("CREATE TABLE t1t1 (" - + "\n\tf0 bigint, -- fc_0" - + "\n\tf1 string, -- fc_1" - + "\n\tf2 string -- fc_2" + Assert.assertEquals("CREATE TABLE t1 (" + + "\n\tf0 BIGINT, -- fc_0" + + "\n\tf1 STRING, -- fc_1" + + "\n\tf2 STRING -- fc_2" + "\n)" + "\nPARTITIONED BY (" - + "\n\tds string, -- c_1" - + "\n\thh string -- c_2" + + "\n\tds STRING, -- c_1" + + "\n\thh STRING -- c_2" + "\n);", SQLUtils.formatOdps(sql)); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest18.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest18.java index d4e2a44f02..866cf394ca 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest18.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest18.java @@ -9,16 +9,16 @@ import junit.framework.TestCase; public class OdpsFormatCommentTest18 extends TestCase { public void test_column_comment() throws Exception { String sql = "create table t (f1 string comment \"xxx\")"; - Assert.assertEquals("CREATE TABLE tt (" - + "\n\tf1 string COMMENT 'xxx'" + Assert.assertEquals("CREATE TABLE t (" + + "\n\tf1 STRING COMMENT 'xxx'" + "\n)", SQLUtils.formatOdps(sql)); } public void test_column_comment_2() throws Exception { String sql = "create table t (f1 string comment \"xxx's\")"; - Assert.assertEquals("CREATE TABLE tt (" - + "\n\tf1 string COMMENT 'xxx''s'" + Assert.assertEquals("CREATE TABLE t (" + + "\n\tf1 STRING COMMENT 'xxx''s'" + "\n)", SQLUtils.formatOdps(sql)); } } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest21.java b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest21.java new file mode 100644 index 0000000000..2532a71680 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/sql/odps/OdpsFormatCommentTest21.java @@ -0,0 +1,18 @@ +package com.alibaba.druid.bvt.sql.odps; + +import org.junit.Assert; + +import com.alibaba.druid.sql.SQLUtils; + +import junit.framework.TestCase; + +public class OdpsFormatCommentTest21 extends TestCase { + public void test_column_comment() throws Exception { + String sql = "create table sales (f1 bigint)"; + Assert.assertEquals("CREATE TABLE sales (" + + "\n\tf1 BIGINT" + + "\n)", SQLUtils.formatOdps(sql)); + } + + +}