diff --git a/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSuite.scala b/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSuite.scala index b4cefc3a77a2..a853cf7e4c95 100644 --- a/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSuite.scala +++ b/backends-clickhouse/src/test/scala/org/apache/gluten/execution/GlutenClickHouseTPCHSuite.scala @@ -427,6 +427,14 @@ class GlutenClickHouseTPCHSuite extends MergeTreeSuite { } + test("var_samp returns null instead of NaN") { + val sql1 = "select var_samp(id) from range(1)" + val sql2 = "select covar_samp(id, id) from range(1)" + + compareResultsAgainstVanillaSpark(sql1, true, { _ => }) + compareResultsAgainstVanillaSpark(sql2, true, { _ => }) + } + test("existence join") { spark.sql("create table t1(a int, b int) using parquet") spark.sql("create table t2(a int, b int) using parquet") diff --git a/cpp-ch/local-engine/Parser/AggregateFunctionParser.cpp b/cpp-ch/local-engine/Parser/AggregateFunctionParser.cpp index 696f5352f200..5bc055d08e6c 100644 --- a/cpp-ch/local-engine/Parser/AggregateFunctionParser.cpp +++ b/cpp-ch/local-engine/Parser/AggregateFunctionParser.cpp @@ -219,7 +219,9 @@ const DB::ActionsDAG::Node * AggregateFunctionParser::convertNodeTypeIfNeeded( const DB::ActionsDAG::Node * AggregateFunctionParser::convertNanToNullIfNeed( const CommonFunctionInfo & func_info, const DB::ActionsDAG::Node * func_node, DB::ActionsDAG & actions_dag) const { - if (getCHFunctionName(func_info) != "corr" || !func_node->result_type->isNullable()) + const auto function_name = getCHFunctionName(func_info); + if ((function_name != "corr" && function_name != "varSamp" && function_name != "covarSamp") + || !func_node->result_type->isNullable()) return func_node; /// result is nullable.