This is an automated email from the ASF dual-hosted git repository.
mbudiu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git
The following commit(s) were added to refs/heads/main by this push:
new a19bb8224f [CALCITE-6547] Result type inferred for STDDEV_SAMP is
incorrect
a19bb8224f is described below
commit a19bb8224fc54b35a4a2f0e5f594ce2e3544dfe9
Author: Mihai Budiu <[email protected]>
AuthorDate: Mon Aug 26 21:59:09 2024 -0700
[CALCITE-6547] Result type inferred for STDDEV_SAMP is incorrect
Signed-off-by: Mihai Budiu <[email protected]>
---
core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java | 3 ++-
core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml | 4 ++--
testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java | 4 ++--
3 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
index ea8cd95cfa..bab91ec22c 100644
--- a/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
+++ b/core/src/main/java/org/apache/calcite/sql/type/ReturnTypes.java
@@ -1401,7 +1401,8 @@ public abstract class ReturnTypes {
final RelDataType relDataType =
typeFactory.getTypeSystem().deriveAvgAggType(typeFactory,
opBinding.getOperandType(0));
- if (opBinding.getGroupCount() == 0 || opBinding.hasFilter()) {
+ if (opBinding.getGroupCount() == 0 || opBinding.hasFilter()
+ || opBinding.getOperator().kind == SqlKind.STDDEV_SAMP) {
return typeFactory.createTypeWithNullability(relDataType, true);
} else {
return relDataType;
diff --git
a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
index c3ee9f7c66..bf3276d22c 100644
--- a/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
+++ b/core/src/test/resources/org/apache/calcite/test/RelOptRulesTest.xml
@@ -1521,7 +1521,7 @@ LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)],
EXPR$2=[AVG($1)], EXPR$3=
</Resource>
<Resource name="planAfter">
<![CDATA[
-LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3),
0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT
NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1),
null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL],
EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL],
EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3,
1)))):INTEGER NOT NULL])
+LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3),
0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT
NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1),
null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER], EXPR$4=[CAST(/(-($1,
/(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2),
$3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])
LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)],
agg#2=[COUNT()])
LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])
LogicalProject(NAME=[$1], DEPTNO=[$0])
@@ -12133,7 +12133,7 @@ LogicalAggregate(group=[{0}], EXPR$1=[STDDEV_POP($1)],
EXPR$2=[AVG($1)], EXPR$3=
</Resource>
<Resource name="planAfter">
<![CDATA[
-LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3),
0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT
NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1),
null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER NOT NULL],
EXPR$4=[CAST(/(-($1, /(*($2, $2), $3)), $3)):INTEGER NOT NULL],
EXPR$5=[CAST(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1), null:BIGINT, -($3,
1)))):INTEGER NOT NULL])
+LogicalProject(NAME=[$0], EXPR$1=[CAST(POWER(/(-($1, /(*($2, $2), $3)), $3),
0.5:DECIMAL(2, 1))):INTEGER NOT NULL], EXPR$2=[CAST(/($2, $3)):INTEGER NOT
NULL], EXPR$3=[CAST(POWER(/(-($1, /(*($2, $2), $3)), CASE(=($3, 1),
null:BIGINT, -($3, 1))), 0.5:DECIMAL(2, 1))):INTEGER], EXPR$4=[CAST(/(-($1,
/(*($2, $2), $3)), $3)):INTEGER NOT NULL], EXPR$5=[CAST(/(-($1, /(*($2, $2),
$3)), CASE(=($3, 1), null:BIGINT, -($3, 1)))):INTEGER NOT NULL])
LogicalAggregate(group=[{0}], agg#0=[$SUM0($2)], agg#1=[$SUM0($1)],
agg#2=[COUNT()])
LogicalProject(NAME=[$0], DEPTNO=[$1], $f2=[*($1, $1)])
LogicalProject(NAME=[$1], DEPTNO=[$0])
diff --git a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
index 1fa79f3099..5ca6f9b156 100644
--- a/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
+++ b/testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java
@@ -14897,7 +14897,7 @@ public class SqlOperatorTest {
false);
f.checkType("stddev_samp(cast(null as varchar(2)))", "DECIMAL(19, 9)");
f.checkType("stddev_samp(CAST(NULL AS INTEGER))", "INTEGER");
- f.checkAggType("stddev_samp(DISTINCT 1.5)", "DECIMAL(2, 1) NOT NULL");
+ f.checkAggType("stddev_samp(DISTINCT 1.5)", "DECIMAL(2, 1)");
final String[] values = {"0", "CAST(null AS FLOAT)", "3", "3"};
if (f.brokenTestsEnabled()) {
// verified on Oracle 10g
@@ -14929,7 +14929,7 @@ public class SqlOperatorTest {
false);
f.checkType("stddev(cast(null as varchar(2)))", "DECIMAL(19, 9)");
f.checkType("stddev(CAST(NULL AS INTEGER))", "INTEGER");
- f.checkAggType("stddev(DISTINCT 1.5)", "DECIMAL(2, 1) NOT NULL");
+ f.checkAggType("stddev(DISTINCT 1.5)", "DECIMAL(2, 1)");
// with one value
f.checkAgg("stddev(x)", new String[]{"5"}, isNullValue());
// with zero values