Repository: kylin Updated Branches: refs/heads/master 5f2eff68d -> 4d50b2697
Minor, adapt DefaultQueryTransformer's function scope to calcite supported Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/3ebd15d5 Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/3ebd15d5 Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/3ebd15d5 Branch: refs/heads/master Commit: 3ebd15d522ee12103badd0547d9316a2e3314137 Parents: d173c7e Author: Yifan Zhang <event.dim...@gmail.com> Authored: Fri Dec 8 17:47:02 2017 +0800 Committer: Yifan Zhang <event.dim...@gmail.com> Committed: Sun Dec 10 22:25:14 2017 +0800 ---------------------------------------------------------------------- .../org/apache/kylin/query/util/DefaultQueryTransformer.java | 6 ++++-- .../apache/kylin/query/util/DefaultQueryTransformerTest.java | 8 ++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/3ebd15d5/query/src/main/java/org/apache/kylin/query/util/DefaultQueryTransformer.java ---------------------------------------------------------------------- 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 b21f410..671d9db 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 @@ -43,7 +43,7 @@ public class DefaultQueryTransformer implements IQueryTransformer { private static final Pattern PTN_INTERVAL = Pattern.compile( "interval" + SM + "(floor\\()([\\d\\.]+)(\\))" + SM + "(second|minute|hour|day|month|year)", Pattern.CASE_INSENSITIVE); - private static final Pattern PTN_HAVING_ESCAPE_FUNCTION = Pattern.compile("\\{fn" + "(.*?)" + "\\}", + private static final Pattern PTN_HAVING_ESCAPE_FUNCTION = Pattern.compile("\\{fn" + SM + "(EXTRACT\\(.*?\\))" + "\\}", Pattern.CASE_INSENSITIVE); private static final Pattern PIN_SUM_OF_CAST = Pattern.compile(S0 + "SUM" + S0 + "\\(" + S0 + "CAST" + S0 + "\\(" + S0 + "([^\\s,]+)" + S0 + "AS" + SM + "DOUBLE" + S0 + "\\)" + S0 + "\\)", Pattern.CASE_INSENSITIVE); @@ -76,7 +76,9 @@ public class DefaultQueryTransformer implements IQueryTransformer { } // Case {fn EXTRACT(...) } - // Use non-greedy regrex matching to remove escape functions + // Use non-greedy regex matching to remove escape functions + // Notice: Only unsupported escape function need to be handled + // Reference: https://calcite.apache.org/docs/reference.html#jdbc-function-escape while (true) { m = PTN_HAVING_ESCAPE_FUNCTION.matcher(sql); if (!m.find()) http://git-wip-us.apache.org/repos/asf/kylin/blob/3ebd15d5/query/src/test/java/org/apache/kylin/query/util/DefaultQueryTransformerTest.java ---------------------------------------------------------------------- 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 5a15443..8ce1017 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 @@ -92,5 +92,13 @@ 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(); + String fnConvertSumSql = "select {fn EXTRACT(YEAR from PART_DT)} from KYLIN_SALES"; + String correctSql = transformer.transform(fnConvertSumSql, "", ""); + assertTrue("select EXTRACT(YEAR from PART_DT) from KYLIN_SALES".equalsIgnoreCase(correctSql)); + } } \ No newline at end of file