From 8e2277d997987ebcd9ab2eef286f0c6fb11470ee Mon Sep 17 00:00:00 2001 From: yangzhg <780531911@qq.com> Date: Fri, 6 Dec 2019 16:19:08 +0800 Subject: [PATCH] Fix group by inf and nan duplicated (#2142 #2145) (#2401) --- be/src/exprs/cast_functions.cpp | 7 ++++--- .../java/org/apache/doris/rewrite/FEFunctions.java | 10 +++++++++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/be/src/exprs/cast_functions.cpp b/be/src/exprs/cast_functions.cpp index 2807dbe282..8dda9f57d0 100644 --- a/be/src/exprs/cast_functions.cpp +++ b/be/src/exprs/cast_functions.cpp @@ -17,8 +17,7 @@ #include "exprs/cast_functions.h" -#include -#include +#include #include "exprs/anyval_util.h" #include "runtime/datetime_value.h" @@ -113,7 +112,9 @@ CAST_FUNCTION(FloatVal, DoubleVal, double_val) num_type ret; \ ret.val = StringParser::string_parser_fn( \ reinterpret_cast(val.ptr), val.len, &result); \ - if (UNLIKELY(result != StringParser::PARSE_SUCCESS)) return num_type::null(); \ + if (UNLIKELY(result != StringParser::PARSE_SUCCESS || std::isnan(ret.val) || std::isinf(ret.val))) { \ + return num_type::null(); \ + } \ return ret; \ } diff --git a/fe/src/main/java/org/apache/doris/rewrite/FEFunctions.java b/fe/src/main/java/org/apache/doris/rewrite/FEFunctions.java index c493c28aca..8aca4a7e15 100755 --- a/fe/src/main/java/org/apache/doris/rewrite/FEFunctions.java +++ b/fe/src/main/java/org/apache/doris/rewrite/FEFunctions.java @@ -362,6 +362,9 @@ public class FEFunctions { @FEFunction(name = "divide", argTypes = { "DOUBLE", "DOUBLE" }, returnType = "DOUBLE") public static FloatLiteral divideDouble(LiteralExpr first, LiteralExpr second) throws AnalysisException { + if (second.getDoubleValue() == 0.0) { + return null; + } double result = first.getDoubleValue() / second.getDoubleValue(); return new FloatLiteral(result, Type.DOUBLE); } @@ -370,6 +373,9 @@ public class FEFunctions { public static DecimalLiteral divideDecimal(LiteralExpr first, LiteralExpr second) throws AnalysisException { BigDecimal left = new BigDecimal(first.getStringValue()); BigDecimal right = new BigDecimal(second.getStringValue()); + if (right.compareTo(BigDecimal.ZERO) == 0) { + return null; + } BigDecimal result = left.divide(right); return new DecimalLiteral(result); } @@ -378,7 +384,9 @@ public class FEFunctions { public static DecimalLiteral divideDecimalV2(LiteralExpr first, LiteralExpr second) throws AnalysisException { BigDecimal left = new BigDecimal(first.getStringValue()); BigDecimal right = new BigDecimal(second.getStringValue()); - + if (right.compareTo(BigDecimal.ZERO) == 0) { + return null; + } BigDecimal result = left.divide(right); return new DecimalLiteral(result); }