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

Reply via email to