From 78dc22fbfde6b1db074c3e5092e5dd9da6cd363c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=93=81?= Date: Sat, 26 Dec 2020 06:54:58 +0800 Subject: [PATCH] bug fixed for hive sql format, fix #4092 --- .../druid/sql/visitor/SQLASTOutputVisitor.java | 14 +++++++------- .../bvt/sql/hive/HiveCreateTableTest_36_dla.java | 4 ++-- .../bvt/sql/hive/HiveCreateTableTest_46_dla.java | 4 ++-- .../druid/bvt/sql/hive/HiveResourceTest.java | 4 ++++ src/test/resources/bvt/parser/hive-1.txt | 4 ++-- 5 files changed, 17 insertions(+), 13 deletions(-) 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 20ee6a1960..f15a41f71a 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -10398,6 +10398,13 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet print0(ucase ? " BUCKETS" : " buckets"); } + SQLExprTableSource like = x.getLike(); + if (like != null) { + println(); + print0(ucase ? "LIKE " : "like "); + like.accept(this); + } + SQLExpr storedAs = x.getStoredAs(); if (storedAs != null) { println(); @@ -10441,13 +10448,6 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet println(); visit(select); } - - SQLExprTableSource like = x.getLike(); - if (like != null) { - println(); - print0(ucase ? "LIKE " : "like "); - like.accept(this); - } } protected void printSerdeProperties(Map serdeProperties) { diff --git a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_36_dla.java b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_36_dla.java index 96f4acf500..bf597d1b41 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_36_dla.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_36_dla.java @@ -46,10 +46,10 @@ public class HiveCreateTableTest_36_dla extends OracleTest { String text = SQLUtils.toSQLString(stmt, JdbcConstants.HIVE); assertEquals("CREATE TABLE dla_table1\n" + + "LIKE dla_table2\n" + "TBLPROPERTIES (\n" + "\t'column_mapping' = 'hello,world;james,bond;'\n" + - ")\n" + - "LIKE dla_table2;", text); + ");", text); } System.out.println("Tables : " + visitor.getTables()); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_46_dla.java b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_46_dla.java index 2bf67629f7..8e38c1665a 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_46_dla.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveCreateTableTest_46_dla.java @@ -29,10 +29,10 @@ public class HiveCreateTableTest_46_dla extends OracleTest { SQLStatement stmt = SQLUtils.parseSingleStatement(sql, DbType.hive, SQLParserFeature.KeepComments); assertEquals("CREATE EXTERNAL TABLE parquet_tbl\n" + + "LIKE MAPPING('oss://user/etl/destination/datafile1.dat')\n" + "TBLPROPERTIES (\n" + "\t'target.table.location' = 'oss://user/etl/destination/'\n" + - ")\n" + - "LIKE MAPPING('oss://user/etl/destination/datafile1.dat')", stmt.toString()); + ")", stmt.toString()); assertEquals(stmt.toString(), SQLUtils.parseSingleStatement(stmt.toString(), DbType.hive, SQLParserFeature.KeepComments).toString()); } diff --git a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveResourceTest.java b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveResourceTest.java index 10097ce334..cb99554109 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveResourceTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/hive/HiveResourceTest.java @@ -44,6 +44,10 @@ public class HiveResourceTest extends TestCase { exec_test("bvt/parser/hive-2.txt"); } + public void test_3() throws Exception { + exec_test("bvt/parser/hive-3.txt"); + } + public void exec_test(String resource) throws Exception { // System.out.println(resource); InputStream is = null; diff --git a/src/test/resources/bvt/parser/hive-1.txt b/src/test/resources/bvt/parser/hive-1.txt index 3287a082a4..8555de2afa 100644 --- a/src/test/resources/bvt/parser/hive-1.txt +++ b/src/test/resources/bvt/parser/hive-1.txt @@ -3,5 +3,5 @@ like ads_data.sale_detail_one1 STORED AS parquet --------------------------- CREATE TABLE ads_data.sale_detail_one23 -STORED AS parquet -LIKE ads_data.sale_detail_one1 \ No newline at end of file +LIKE ads_data.sale_detail_one1 +STORED AS parquet \ No newline at end of file