You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/06/20 02:57:01 UTC

[kylin] 01/02: KYLIN-3347 : calcite function QueryService Exception

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

commit fbd36de020d87f0ff54d66a4951612dcf42440dd
Author: imsong <hk...@gmail.com>
AuthorDate: Wed Apr 25 17:49:12 2018 +0900

    KYLIN-3347 : calcite function QueryService Exception
---
 .../java/org/apache/kylin/query/util/DefaultQueryTransformer.java | 8 ++++++++
 .../org/apache/kylin/query/util/DefaultQueryTransformerTest.java  | 5 +++++
 2 files changed, 13 insertions(+)

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 671d9db..2fcb74e 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
@@ -50,6 +50,8 @@ public class DefaultQueryTransformer implements IQueryTransformer {
     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);
+    private static final Pattern PTN_HAVING_FUNCTION = Pattern.compile("\\{fn" + "(.*?)" + "\\}",
+            Pattern.CASE_INSENSITIVE);
 
     @Override
     public String transform(String sql, String project, String defaultSchema) {
@@ -138,6 +140,12 @@ public class DefaultQueryTransformer implements IQueryTransformer {
             sql = sql.substring(0, m.start(1)) + "'" + value + "'" + sql.substring(m.end(3));
         }
 
+        while (true) {
+            m = PTN_HAVING_FUNCTION.matcher(sql);
+            if (!m.find())
+                break;
+            sql = sql.substring(0, m.start()) + m.group(1) + sql.substring(m.end());
+        }
         
         return sql;
     }
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 8ce1017..e95db85 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
@@ -100,5 +100,10 @@ public class DefaultQueryTransformerTest {
         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));
+
+        fnConvertSumSql = "SELECT {fn CURRENT_TIMESTAMP(0)}";
+        correctSql = transformer.transform(fnConvertSumSql, "", "");
+        assertTrue("SELECT CURRENT_TIMESTAMP".equalsIgnoreCase(correctSql));
+
     }
 }
\ No newline at end of file