This is an automated email from the ASF dual-hosted git repository.

nic pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 595c4e2  KYLIN-3957 Fix exception cannot cast 'java.math.BigDecimal' 
to 'java.lang.Double'
595c4e2 is described below

commit 595c4e2112afeaea8c2881626959e37bbed50c84
Author: chao long <wayn...@qq.com>
AuthorDate: Mon Apr 15 17:23:12 2019 +0800

    KYLIN-3957 Fix exception cannot cast 'java.math.BigDecimal' to 
'java.lang.Double'
---
 .../java/org/apache/kylin/metadata/model/FunctionDesc.java     | 10 +++++++++-
 .../java/org/apache/kylin/metadata/model/FunctionDescTest.java |  3 +++
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
index 6fea634..45a03b0 100644
--- 
a/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
+++ 
b/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java
@@ -167,7 +167,15 @@ public class FunctionDesc implements Serializable {
             if (isMax() || isMin()) {
                 return parameter.getColRefs().get(0).getType();
             } else if (isSum()) {
-                return parameter.isColumnType() ? DataType.getType(returnType) 
: DataType.getType("bigint");
+                if (parameter.isColumnType()) {
+                    if 
(parameter.getColRefs().get(0).getType().isIntegerFamily()) {
+                        return DataType.getType("bigint");
+                    } else {
+                        return parameter.getColRefs().get(0).getType();
+                    }
+                } else {
+                    return DataType.getType("bigint");
+                }
             } else if (isCount()) {
                 return DataType.getType("bigint");
             } else {
diff --git 
a/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java
 
b/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java
index 5676d33..3835108 100644
--- 
a/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java
+++ 
b/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java
@@ -37,6 +37,7 @@ public class FunctionDescTest {
     public void getRewriteFieldType() {
         TblColRef mockColOfDoubleType = 
TblColRef.mockup(TableDesc.mockup("mock_table"), 0, "price", "double", "");
         TblColRef mockColOfDecimalType = 
TblColRef.mockup(TableDesc.mockup("mock_table"), 1, "price", "decimal", "");
+        TblColRef mockColOfIntegerType = 
TblColRef.mockup(TableDesc.mockup("mock_table"), 2, "price", "integer", "");
 
         FunctionDesc function = FunctionDesc.newInstance("SUM", 
ParameterDesc.newInstance("1"), "bigint");
         assertEquals(DataType.getType("bigint"), 
function.getRewriteFieldType());
@@ -44,6 +45,8 @@ public class FunctionDescTest {
         assertEquals(DataType.getType("bigint"), 
function.getRewriteFieldType());
         function = FunctionDesc.newInstance("SUM", 
ParameterDesc.newInstance(mockColOfDoubleType), "double");
         assertEquals(DataType.getType("double"), 
function.getRewriteFieldType());
+        function = FunctionDesc.newInstance("SUM", 
ParameterDesc.newInstance(mockColOfIntegerType), "bigint");
+        assertEquals(DataType.getType("bigint"), 
function.getRewriteFieldType());
         function = FunctionDesc.newInstance("MAX", 
ParameterDesc.newInstance(mockColOfDecimalType), "double");
         assertEquals(DataType.getType("decimal"), 
function.getRewriteFieldType());
         function = FunctionDesc.newInstance("MIN", 
ParameterDesc.newInstance(mockColOfDecimalType), "double");

Reply via email to