You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/06/29 05:48:40 UTC

[33/50] kylin git commit: minor, push down operator ||

minor, push down operator ||


Project: http://git-wip-us.apache.org/repos/asf/kylin/repo
Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/0eeceeff
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/0eeceeff
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/0eeceeff

Branch: refs/heads/master
Commit: 0eeceeff43ff64bcd4baa1bc214e1288d7716f9e
Parents: 401bb0a
Author: Cheng Wang <ch...@kyligence.io>
Authored: Thu Jun 22 20:30:09 2017 +0800
Committer: Hongbin Ma <ma...@kyligence.io>
Committed: Thu Jun 22 20:56:24 2017 +0800

----------------------------------------------------------------------
 .../filter/BuiltInFunctionTupleFilter.java      | 21 +++++++++++++++-----
 .../metadata/filter/function/BuiltInMethod.java | 11 +++++++++-
 2 files changed, 26 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/0eeceeff/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java
index 767d868..aa9cd3d 100755
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/BuiltInFunctionTupleFilter.java
@@ -24,6 +24,7 @@ import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.kylin.common.util.BytesUtil;
 import org.apache.kylin.metadata.filter.function.BuiltInMethod;
@@ -33,6 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
 import com.google.common.primitives.Primitives;
 
 public class BuiltInFunctionTupleFilter extends FunctionTupleFilter {
@@ -49,12 +51,18 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter {
     protected boolean isValidFunc = false;
     protected boolean isReversed = false;
 
+    final static Map<String, String> converters = Maps.newHashMap();
+    static {
+        converters.put("||", "CONCAT");
+    }
+
     public BuiltInFunctionTupleFilter(String name) {
         this(name, null);
     }
 
     public BuiltInFunctionTupleFilter(String name, FilterOperatorEnum filterOperatorEnum) {
-        super(Lists.<TupleFilter> newArrayList(), filterOperatorEnum == null ? FilterOperatorEnum.FUNCTION : filterOperatorEnum);
+        super(Lists.<TupleFilter> newArrayList(),
+                filterOperatorEnum == null ? FilterOperatorEnum.FUNCTION : filterOperatorEnum);
         this.methodParams = Lists.newArrayList();
 
         if (name != null) {
@@ -91,7 +99,8 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter {
         if (columnContainerFilter instanceof ColumnTupleFilter)
             methodParams.set(colPosition, (Serializable) input);
         else if (columnContainerFilter instanceof BuiltInFunctionTupleFilter)
-            methodParams.set(colPosition, (Serializable) ((BuiltInFunctionTupleFilter) columnContainerFilter).invokeFunction(input));
+            methodParams.set(colPosition,
+                    (Serializable) ((BuiltInFunctionTupleFilter) columnContainerFilter).invokeFunction(input));
         return method.invoke(null, (Object[]) (methodParams.toArray()));
     }
 
@@ -128,7 +137,8 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter {
                 if (!Primitives.isWrapperType(clazz))
                     methodParams.add(constVal);
                 else
-                    methodParams.add((Serializable) clazz.cast(clazz.getDeclaredMethod("valueOf", String.class).invoke(null, constVal)));
+                    methodParams.add((Serializable) clazz
+                            .cast(clazz.getDeclaredMethod("valueOf", String.class).invoke(null, constVal)));
             } catch (Exception e) {
                 logger.warn("Reflection failed for methodParams. ", e);
                 isValidFunc = false;
@@ -186,8 +196,9 @@ public class BuiltInFunctionTupleFilter extends FunctionTupleFilter {
     }
 
     protected void initMethod() {
-        if (BuiltInMethod.MAP.containsKey(name)) {
-            this.method = BuiltInMethod.MAP.get(name).method;
+        String operator = BuiltInMethod.MAP.containsKey(name) ? name : converters.get(name);
+        if (operator != null) {
+            this.method = BuiltInMethod.MAP.get(operator).method;
             isValidFunc = true;
         }
     }

http://git-wip-us.apache.org/repos/asf/kylin/blob/0eeceeff/core-metadata/src/main/java/org/apache/kylin/metadata/filter/function/BuiltInMethod.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/function/BuiltInMethod.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/function/BuiltInMethod.java
index 31ee297..e156174 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/function/BuiltInMethod.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/function/BuiltInMethod.java
@@ -29,7 +29,7 @@ import org.apache.commons.lang3.reflect.MethodUtils;
 import com.google.common.collect.ImmutableMap;
 
 public enum BuiltInMethod {
-    UPPER(BuiltInMethod.class, "upper", String.class), LOWER(BuiltInMethod.class, "lower", String.class), SUBSTRING(BuiltInMethod.class, "substring", String.class, int.class, int.class), CHAR_LENGTH(BuiltInMethod.class, "charLength", String.class), LIKE(BuiltInMethod.class, "like", String.class, String.class), INITCAP(BuiltInMethod.class, "initcap", String.class);
+    UPPER(BuiltInMethod.class, "upper", String.class), LOWER(BuiltInMethod.class, "lower", String.class), SUBSTRING(BuiltInMethod.class, "substring", String.class, int.class, int.class), CHAR_LENGTH(BuiltInMethod.class, "charLength", String.class), LIKE(BuiltInMethod.class, "like", String.class, String.class), INITCAP(BuiltInMethod.class, "initcap", String.class), CONCAT(BuiltInMethod.class, "concat", String.class, String.class);
     public final Method method;
     public static final ImmutableMap<String, BuiltInMethod> MAP;
 
@@ -140,4 +140,13 @@ public enum BuiltInMethod {
         return s.toLowerCase();
     }
 
+    /** SQL left || right */
+    public static String concat(String left, String right) {
+        if (left == null)
+            return right;
+        if (right == null)
+            return left;
+        return left.concat(right);
+    }
+
 }