This is an automated email from the ASF dual-hosted git repository. shaofengshi pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/master by this push: new 959ba2d KYLIN-3025 959ba2d is described below commit 959ba2d53ab1922615dc75df325475d51b410f80 Author: Chao Long <wayn...@qq.com> AuthorDate: Mon Jun 25 14:34:56 2018 +0800 KYLIN-3025 KYLIN-3025 fix error: {fn CONVERT} for bigint type in tableau 10.4 minor, add UT --- .../kylin/query/util/DefaultQueryTransformer.java | 2 +- .../query/util/DefaultQueryTransformerTest.java | 20 ++++++++++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/query/src/main/java/org/apache/kylin/query/util/DefaultQueryTransformer.java b/query/src/main/java/org/apache/kylin/query/util/DefaultQueryTransformer.java index f8ab8f2..f32e562 100644 --- a/query/src/main/java/org/apache/kylin/query/util/DefaultQueryTransformer.java +++ b/query/src/main/java/org/apache/kylin/query/util/DefaultQueryTransformer.java @@ -49,7 +49,7 @@ public class DefaultQueryTransformer implements IQueryTransformer { + S0 + "([^\\s,]+)" + S0 + "AS" + SM + "DOUBLE" + S0 + "\\)" + S0 + "\\)", Pattern.CASE_INSENSITIVE); private static final Pattern PIN_SUM_OF_FN_CONVERT = Pattern .compile(S0 + "SUM" + S0 + "\\(" + S0 + "\\{\\s*fn" + SM + "convert" + S0 + "\\(" + S0 + "([^\\s,]+)" + S0 - + "," + S0 + "SQL_DOUBLE" + S0 + "\\)" + S0 + "\\}" + S0 + "\\)", Pattern.CASE_INSENSITIVE); + + "," + S0 + "(SQL_DOUBLE|SQL_BIGINT)" + S0 + "\\)" + S0 + "\\}" + S0 + "\\)", Pattern.CASE_INSENSITIVE); @Override public String transform(String sql, String project, String defaultSchema) { diff --git a/query/src/test/java/org/apache/kylin/query/util/DefaultQueryTransformerTest.java b/query/src/test/java/org/apache/kylin/query/util/DefaultQueryTransformerTest.java index b6265b3..a38b887 100644 --- a/query/src/test/java/org/apache/kylin/query/util/DefaultQueryTransformerTest.java +++ b/query/src/test/java/org/apache/kylin/query/util/DefaultQueryTransformerTest.java @@ -27,39 +27,43 @@ public class DefaultQueryTransformerTest { @Test public void SumOfFnConvertTransform() throws Exception { + SumOfFnConvertTransform("SQL_DOUBLE"); + SumOfFnConvertTransform("SQL_BIGINT"); + } + + private void SumOfFnConvertTransform(String dataType) throws Exception { DefaultQueryTransformer transformer = new DefaultQueryTransformer(); - String fnConvertSumSql = "select sum({fn convert(\"LSTG_SITE_ID\", SQL_DOUBLE)}) from KYLIN_SALES group by LSTG_SITE_ID"; + String fnConvertSumSql = "select sum({fn convert(\"LSTG_SITE_ID\", " + dataType + ")}) from KYLIN_SALES group by LSTG_SITE_ID"; String correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select sum(\"LSTG_SITE_ID\") from KYLIN_SALES group by LSTG_SITE_ID".equalsIgnoreCase(correctSql)); //test SQL contains blank //Case one blank interval - fnConvertSumSql = "select sum ( { fn convert( \"LSTG_SITE_ID\" , SQL_DOUBLE) } ) from KYLIN_SALES group by LSTG_SITE_ID"; + fnConvertSumSql = "select sum ( { fn convert( \"LSTG_SITE_ID\" , " + dataType + ") } ) from KYLIN_SALES group by LSTG_SITE_ID"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select sum(\"LSTG_SITE_ID\") from KYLIN_SALES group by LSTG_SITE_ID".equalsIgnoreCase(correctSql)); //Case multi blank interval - fnConvertSumSql = "select SUM ( { fn convert( \"LSTG_SITE_ID\" , SQL_DOUBLE ) } ) from KYLIN_SALES group by LSTG_SITE_ID"; + fnConvertSumSql = "select SUM ( { fn convert( \"LSTG_SITE_ID\" , " + dataType + " ) } ) from KYLIN_SALES group by LSTG_SITE_ID"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select sum(\"LSTG_SITE_ID\") from KYLIN_SALES group by LSTG_SITE_ID".equalsIgnoreCase(correctSql)); //Case one or multi blank interval - fnConvertSumSql = "select SUM( { fn convert( \"LSTG_SITE_ID\" , SQL_DOUBLE ) } ) from KYLIN_SALES group by LSTG_SITE_ID"; + fnConvertSumSql = "select SUM( { fn convert( \"LSTG_SITE_ID\" , " + dataType + " ) } ) from KYLIN_SALES group by LSTG_SITE_ID"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select sum(\"LSTG_SITE_ID\") from KYLIN_SALES group by LSTG_SITE_ID".equalsIgnoreCase(correctSql)); //test exception case of "... fnconvert ..." - fnConvertSumSql = "select SUM ({fnconvert(\"LSTG_SITE_ID\", SQL_DOUBLE)}) from KYLIN_SALES group by LSTG_SITE_ID"; + fnConvertSumSql = "select SUM ({fnconvert(\"LSTG_SITE_ID\", " + dataType + ")}) from KYLIN_SALES group by LSTG_SITE_ID"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertFalse("select sum(\"LSTG_SITE_ID\") from KYLIN_SALES group by LSTG_SITE_ID".equalsIgnoreCase(correctSql)); //test SQL contains multi sum - fnConvertSumSql = "select SUM({fn convert(\"LSTG_SITE_ID\", SQL_DOUBLE)}), SUM({fn convert(\"price\", SQL_DOUBLE)}) from KYLIN_SALES group by LSTG_SITE_ID"; + fnConvertSumSql = "select SUM({fn convert(\"LSTG_SITE_ID\", " + dataType + ")}), SUM({fn convert(\"price\", " + dataType + ")}) from KYLIN_SALES group by LSTG_SITE_ID"; correctSql = transformer.transform(fnConvertSumSql, "", ""); assertTrue("select sum(\"LSTG_SITE_ID\"), sum(\"price\") from KYLIN_SALES group by LSTG_SITE_ID" .equalsIgnoreCase(correctSql)); - } @Test @@ -92,7 +96,7 @@ public class DefaultQueryTransformerTest { assertTrue("select sum(LSTG_SITE_ID), sum(price) from KYLIN_SALES group by LSTG_SITE_ID" .equalsIgnoreCase(correctSql)); } - + @Test public void functionEscapeTransform() throws Exception { DefaultQueryTransformer transformer = new DefaultQueryTransformer();