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 2015/12/04 11:24:26 UTC

[5/5] kylin git commit: KYLIN-976 bug fix

KYLIN-976 bug fix


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

Branch: refs/heads/KYLIN-976
Commit: 21f56da5090a0cd24145dfd5bb9eef8cd1c046fe
Parents: e5ff988
Author: Li, Yang <ya...@ebay.com>
Authored: Fri Dec 4 18:24:06 2015 +0800
Committer: Li, Yang <ya...@ebay.com>
Committed: Fri Dec 4 18:24:06 2015 +0800

----------------------------------------------------------------------
 .../apache/kylin/cube/CubeCapabilityChecker.java   |  2 +-
 .../apache/kylin/measure/MeasureTypeFactory.java   |  7 +++----
 .../apache/kylin/measure/hllc/HLLCMeasureType.java | 15 +++++++++------
 .../apache/kylin/measure/topn/TopNMeasureType.java | 17 ++++++++++-------
 .../apache/kylin/metadata/datatype/DataType.java   |  4 +++-
 5 files changed, 26 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kylin/blob/21f56da5/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java
----------------------------------------------------------------------
diff --git a/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java b/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java
index 28252a3..90a3656 100644
--- a/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java
+++ b/core-cube/src/main/java/org/apache/kylin/cube/CubeCapabilityChecker.java
@@ -186,7 +186,7 @@ public class CubeCapabilityChecker {
             if (unmatchedDimensions.isEmpty() && unmatchedAggregations.isEmpty())
                 break;
             
-            MeasureType measureType = measure.getFunction().getMeasureType();
+            MeasureType<?> measureType = measure.getFunction().getMeasureType();
             if (measureType instanceof BasicMeasureType)
                 continue;
             

http://git-wip-us.apache.org/repos/asf/kylin/blob/21f56da5/core-metadata/src/main/java/org/apache/kylin/measure/MeasureTypeFactory.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureTypeFactory.java b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureTypeFactory.java
index 48eddb2..13cc74a 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/MeasureTypeFactory.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/MeasureTypeFactory.java
@@ -23,7 +23,6 @@ import java.util.Map;
 
 import org.apache.kylin.common.KylinConfig;
 import org.apache.kylin.common.util.ClassUtil;
-import org.apache.kylin.common.util.Pair;
 import org.apache.kylin.measure.basic.BasicMeasureType;
 import org.apache.kylin.measure.hllc.HLLCMeasureType;
 import org.apache.kylin.measure.topn.TopNMeasureType;
@@ -43,7 +42,7 @@ abstract public class MeasureTypeFactory<T> {
     
     // ============================================================================
     
-    private static Map<Pair<String, String>, MeasureTypeFactory<?>> factories = Maps.newHashMap();
+    private static Map<String, MeasureTypeFactory<?>> factories = Maps.newHashMap();
     private static MeasureTypeFactory<?> defaultFactory = new BasicMeasureType.Factory();
     
     public static synchronized void init(KylinConfig config) {
@@ -69,7 +68,7 @@ abstract public class MeasureTypeFactory<T> {
             
             DataType.register(dataTypeName);
             DataTypeSerializer.register(dataTypeName, serializer);
-            factories.put(Pair.newPair(funcName, dataTypeName), factory);
+            factories.put(funcName, factory);
         }
     }
     
@@ -80,7 +79,7 @@ abstract public class MeasureTypeFactory<T> {
     public static MeasureType<?> create(String funcName, DataType dataType) {
         funcName = funcName.toUpperCase();
         
-        MeasureTypeFactory<?> factory = factories.get(Pair.newPair(funcName, dataType.getName()));
+        MeasureTypeFactory<?> factory = factories.get(funcName);
         if (factory == null)
             factory = defaultFactory;
         

http://git-wip-us.apache.org/repos/asf/kylin/blob/21f56da5/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java b/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
index 073de6d..4a80d9b 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/hllc/HLLCMeasureType.java
@@ -36,7 +36,7 @@ public class HLLCMeasureType extends MeasureType<HyperLogLogPlusCounter> {
 
     public static final String FUNC_COUNT_DISTINCT = "COUNT_DISTINCT";
     public static final String DATATYPE_HLLC = "hllc";
-    
+
     public static class Factory extends MeasureTypeFactory<HyperLogLogPlusCounter> {
 
         @Override
@@ -59,7 +59,7 @@ public class HLLCMeasureType extends MeasureType<HyperLogLogPlusCounter> {
             return HLLCSerializer.class;
         }
     }
-    
+
     // ============================================================================
 
     private final DataType dataType;
@@ -77,11 +77,14 @@ public class HLLCMeasureType extends MeasureType<HyperLogLogPlusCounter> {
         if (FUNC_COUNT_DISTINCT.equals(funcName) == false)
             throw new IllegalArgumentException();
 
-        if (DATATYPE_HLLC.equals(dataType.getName()) == false)
-            throw new IllegalArgumentException();
+        // data type could be null at query layer, because only function and parameters are known at that stage
+        if (dataType != null) {
+            if (DATATYPE_HLLC.equals(dataType.getName()) == false)
+                throw new IllegalArgumentException();
 
-        if (dataType.getPrecision() < 1 || dataType.getPrecision() > 5000)
-            throw new IllegalArgumentException();
+            if (dataType.getPrecision() < 1 || dataType.getPrecision() > 5000)
+                throw new IllegalArgumentException();
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/kylin/blob/21f56da5/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
index c3d36ca..74c6d10 100644
--- a/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/measure/topn/TopNMeasureType.java
@@ -53,7 +53,7 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
 
     public static final String FUNC_TOP_N = "TOP_N";
     public static final String DATATYPE_TOPN = "topn";
-    
+
     public static class Factory extends MeasureTypeFactory<TopNCounter<ByteArray>> {
 
         @Override
@@ -76,7 +76,7 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
             return TopNCounterSerializer.class;
         }
     }
-    
+
     // ============================================================================
 
     private final DataType dataType;
@@ -93,12 +93,15 @@ public class TopNMeasureType extends MeasureType<TopNCounter<ByteArray>> {
     private void validate(String funcName, DataType dataType) {
         if (FUNC_TOP_N.equals(funcName) == false)
             throw new IllegalArgumentException();
-        
-        if (DATATYPE_TOPN.equals(dataType.getName()) == false)
-            throw new IllegalArgumentException();
 
-        if (dataType.getPrecision() < 1 || dataType.getPrecision() > 5000)
-            throw new IllegalArgumentException();
+        // data type could be null at query layer, because only function and parameters are known at that stage
+        if (dataType != null) {
+            if (DATATYPE_TOPN.equals(dataType.getName()) == false)
+                throw new IllegalArgumentException();
+
+            if (dataType.getPrecision() < 1 || dataType.getPrecision() > 5000)
+                throw new IllegalArgumentException();
+        }
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/kylin/blob/21f56da5/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
----------------------------------------------------------------------
diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
index 05e6744..f5231e5 100644
--- a/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
+++ b/core-metadata/src/main/java/org/apache/kylin/metadata/datatype/DataType.java
@@ -30,6 +30,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.commons.lang.StringUtils;
+import org.apache.kylin.metadata.model.TblColRef.InnerDataTypeEnum;
 
 /**
  */
@@ -58,7 +59,8 @@ public class DataType implements Serializable {
                 "boolean", "byte", "binary", //
                 "int", "short", "long", "integer", "tinyint", "smallint", "bigint", //
                 "float", "real", "double", "decimal", "numeric", //
-                "date", "time", "datetime", "timestamp");
+                "date", "time", "datetime", "timestamp", //
+                InnerDataTypeEnum.LITERAL.getDataType(), InnerDataTypeEnum.DERIVED.getDataType());
     }
 
     public static final Set<String> INTEGER_FAMILY = new HashSet<String>();