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");