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 2016/09/03 06:37:39 UTC

[32/50] [abbrv] kylin git commit: minor

minor


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

Branch: refs/heads/1.5.x-HBase1.x
Commit: 3cb0894c4ff329d985513775c172ee47ed05ac67
Parents: a77fbc8
Author: Hongbin Ma <ma...@apache.org>
Authored: Wed Aug 31 14:36:26 2016 +0800
Committer: Hongbin Ma <ma...@apache.org>
Committed: Wed Aug 31 14:36:41 2016 +0800

----------------------------------------------------------------------
 .../filter/EvaluatableLikeFunction.java         | 26 +++++++++++++++++---
 1 file changed, 22 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/3cb0894c/core-metadata/src/main/java/org/apache/kylin/metadata/filter/EvaluatableLikeFunction.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/EvaluatableLikeFunction.java b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/EvaluatableLikeFunction.java
index 59961ac..28e544b 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/filter/EvaluatableLikeFunction.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/filter/EvaluatableLikeFunction.java
@@ -27,8 +27,13 @@ import org.apache.kylin.metadata.datatype.DataType;
 import org.apache.kylin.metadata.datatype.StringSerializer;
 import org.apache.kylin.metadata.tuple.IEvaluatableTuple;
 
+/**
+ * typically like will be handled by BuiltInFunctionTupleFilter rather than this
+ */
 public class EvaluatableLikeFunction extends BuiltInFunctionTupleFilter {
 
+    private boolean patternExtracted;
+
     public EvaluatableLikeFunction(String name) {
         super(name, FilterOperatorEnum.LIKE);
     }
@@ -86,11 +91,24 @@ public class EvaluatableLikeFunction extends BuiltInFunctionTupleFilter {
         return (filter instanceof ConstantTupleFilter) || (filter instanceof DynamicTupleFilter);
     }
 
+    @Override
+    public Object invokeFunction(Object input) throws InvocationTargetException, IllegalAccessException {
+        if (!patternExtracted) {
+            this.getLikePattern();
+        }
+        return super.invokeFunction(input);
+    }
+
+    //will replace the ByteArray pattern to String type
     public String getLikePattern() {
-        ByteArray byteArray = (ByteArray) methodParams.get(1);
-        StringSerializer s = new StringSerializer(DataType.getType("string"));
-        String pattern = s.deserialize(ByteBuffer.wrap(byteArray.array(), byteArray.offset(), byteArray.length()));
-        return pattern;
+        if (!patternExtracted) {
+            ByteArray byteArray = (ByteArray) methodParams.get(1);
+            StringSerializer s = new StringSerializer(DataType.getType("string"));
+            String pattern = s.deserialize(ByteBuffer.wrap(byteArray.array(), byteArray.offset(), byteArray.length()));
+            methodParams.set(1, pattern);
+            patternExtracted = true;
+        }
+        return (String) methodParams.get(1);
     }
 
 }