From ed6da9ede6b0bbd4c3008c91c13a7508bd76b2b0 Mon Sep 17 00:00:00 2001 From: Yifei Wu Date: Wed, 4 Apr 2018 10:08:08 +0800 Subject: [PATCH] KYLIN-3385 fix sum(1) --- .../apache/kylin/metadata/model/FunctionDesc.java | 2 ++ .../kylin/metadata/model/FunctionDescTest.java | 23 ++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/kylin/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java b/kylin/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java index 00b0fa0bf9..601ac270ed 100644 --- a/kylin/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java +++ b/kylin/core-metadata/src/main/java/org/apache/kylin/metadata/model/FunctionDesc.java @@ -165,6 +165,8 @@ public class FunctionDesc implements Serializable { } else if (isSum()) { if (parameter.isMathExpressionType()) return returnDataType; + if (parameter.isConstant()) + return DataType.getType("bigint"); return parameter.getColRefs().get(0).getType(); } else if (isCount()) { diff --git a/kylin/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java b/kylin/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java index 3d1c74cde0..729362ba63 100644 --- a/kylin/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java +++ b/kylin/core-metadata/src/test/java/org/apache/kylin/metadata/model/FunctionDescTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import org.apache.kylin.common.util.LocalFileMetadataTestCase; +import org.apache.kylin.metadata.datatype.DataType; import org.junit.Before; import org.junit.Test; @@ -58,4 +59,26 @@ public class FunctionDescTest extends LocalFileMetadataTestCase { assertFalse(functionDesc1.equals(functionDesc2)); } + @Test + public void getRewriteFieldType() { + FunctionDesc function = FunctionDesc.newInstance("SUM", ParameterDesc.newInstance("1"), "bigint"); + assertEquals(DataType.getType("bigint"), function.getRewriteFieldType()); + + function = FunctionDesc.newInstance("COUNT", ParameterDesc.newInstance("1"), "bigint"); + assertEquals(DataType.getType("bigint"), function.getRewriteFieldType()); + + function = FunctionDesc.newInstance("SUM", ParameterDesc.newInstance(model.findColumn("PRICE")), "double"); + assertEquals(DataType.getType("decimal"), function.getRewriteFieldType()); + + function = FunctionDesc.newInstance("MAX", ParameterDesc.newInstance(model.findColumn("PRICE")), "double"); + assertEquals(DataType.getType("decimal"), function.getRewriteFieldType()); + + function = FunctionDesc.newInstance("MIN", ParameterDesc.newInstance(model.findColumn("PRICE")), "double"); + assertEquals(DataType.getType("decimal"), function.getRewriteFieldType()); + + function = FunctionDesc.newInstance(FunctionDesc.FUNC_PERCENTILE, + ParameterDesc.newInstance(model.findColumn("PRICE")), "double"); + assertEquals(DataType.ANY, function.getRewriteFieldType()); + } + } \ No newline at end of file -- 2.14.3 (Apple Git-98)