This is an automated email from the ASF dual-hosted git repository.

morningman pushed a commit to branch branch-1.2-lts
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-1.2-lts by this push:
     new 3a91f083fd [Bug](DECIMALV3) report failure if a decimal value is 
overflow (#18336) (#18733)
3a91f083fd is described below

commit 3a91f083fdb8ef43465dd3f82038a3917091b22f
Author: Gabriel <gabrielleeb...@gmail.com>
AuthorDate: Mon Apr 17 17:47:39 2023 +0800

    [Bug](DECIMALV3) report failure if a decimal value is overflow (#18336) 
(#18733)
    
    pick #18336
---
 be/src/runtime/decimalv2_value.cpp                 |   2 +-
 be/src/util/string_parser.hpp                      |  16 +-
 be/src/vec/data_types/data_type_decimal.cpp        |  11 +-
 be/src/vec/data_types/data_type_decimal.h          |   2 +-
 be/src/vec/exprs/vexpr.cpp                         | 116 ++++-----
 be/src/vec/exprs/vliteral.cpp                      |  59 +++--
 be/src/vec/io/io_helper.h                          |  12 +-
 be/src/vec/sink/vtablet_sink.cpp                   |  70 ++++++
 be/src/vec/sink/vtablet_sink.h                     |  11 +
 .../java/org/apache/doris/catalog/ScalarType.java  |   6 +-
 .../org/apache/doris/analysis/ArithmeticExpr.java  |   9 +-
 .../org/apache/doris/planner/QueryPlanTest.java    |   4 +-
 .../data/datatype_p0/decimalv3/test_overflow.out   |  19 --
 regression-test/data/insert_p0/insert.out          | 182 +++++++-------
 .../operator/test_arithmetic_operators.out         | 261 +++------------------
 .../conditional_functions/test_nullif.out          |   2 +-
 .../decimalv3/test_data/test_overflow.csv          |   2 +
 .../datatype_p0/decimalv3/test_overflow.groovy     |  56 -----
 .../suites/primary_index/test_pk_uk_case.groovy    |   8 +-
 .../suites/query_p0/aggregate/aggregate.groovy     |   2 +-
 .../operator/test_arithmetic_operators.groovy      |  22 +-
 .../conditional_functions/test_nullif.groovy       |   4 +-
 22 files changed, 361 insertions(+), 515 deletions(-)

diff --git a/be/src/runtime/decimalv2_value.cpp 
b/be/src/runtime/decimalv2_value.cpp
index 3d7f56c047..bc3934d3b7 100644
--- a/be/src/runtime/decimalv2_value.cpp
+++ b/be/src/runtime/decimalv2_value.cpp
@@ -353,7 +353,7 @@ int DecimalV2Value::parse_from_str(const char* decimal_str, 
int32_t length) {
 
     _value = StringParser::string_to_decimal<__int128>(decimal_str, length, 
PRECISION, SCALE,
                                                        &result);
-    if (result == StringParser::PARSE_FAILURE) {
+    if (result != StringParser::PARSE_SUCCESS) {
         error = E_DEC_BAD_NUM;
     }
     return error;
diff --git a/be/src/util/string_parser.hpp b/be/src/util/string_parser.hpp
index 4fb0449cfb..eb0ab53060 100644
--- a/be/src/util/string_parser.hpp
+++ b/be/src/util/string_parser.hpp
@@ -614,19 +614,17 @@ inline T StringParser::string_to_decimal(const char* s, 
int len, int type_precis
             // an exponent will be made later.
             if (LIKELY(type_precision > precision)) {
                 value = (value * 10) + (c - '0'); // Benchmarks are faster 
with parenthesis...
+            } else {
+                *result = StringParser::PARSE_OVERFLOW;
+                value = is_negative ? 
vectorized::min_decimal_value<vectorized::Decimal<T>>(
+                                              type_precision)
+                                    : 
vectorized::max_decimal_value<vectorized::Decimal<T>>(
+                                              type_precision);
+                return value;
             }
             DCHECK(value >= 0); // For some reason //DCHECK_GE doesn't work 
with __int128.
             ++precision;
             scale += found_dot;
-            if (precision > type_precision) {
-                if constexpr (std::is_same_v<int32_t, T>) {
-                    value = 
vectorized::max_decimal_value<vectorized::Decimal32>();
-                } else if constexpr (std::is_same_v<int64_t, T>) {
-                    value = 
vectorized::max_decimal_value<vectorized::Decimal64>();
-                } else {
-                    value = 
vectorized::max_decimal_value<vectorized::Decimal128>();
-                }
-            }
         } else if (c == '.' && LIKELY(!found_dot)) {
             found_dot = 1;
         } else if ((c == 'e' || c == 'E') && LIKELY(!found_exponent)) {
diff --git a/be/src/vec/data_types/data_type_decimal.cpp 
b/be/src/vec/data_types/data_type_decimal.cpp
index 5d00e65033..4d3a1147de 100644
--- a/be/src/vec/data_types/data_type_decimal.cpp
+++ b/be/src/vec/data_types/data_type_decimal.cpp
@@ -150,14 +150,11 @@ MutableColumnPtr DataTypeDecimal<T>::create_column() 
const {
 }
 
 template <typename T>
-T DataTypeDecimal<T>::parse_from_string(const std::string& str) const {
+bool DataTypeDecimal<T>::parse_from_string(const std::string& str, T* res) 
const {
     StringParser::ParseResult result = StringParser::PARSE_SUCCESS;
-    T value = StringParser::string_to_decimal<__int128>(str.c_str(), 
str.size(), precision, scale,
-                                                        &result);
-    if (result != StringParser::PARSE_SUCCESS) {
-        LOG(WARNING) << "Failed to parse string of decimal";
-    }
-    return value;
+    *res = StringParser::string_to_decimal<__int128>(str.c_str(), str.size(), 
precision, scale,
+                                                     &result);
+    return result == StringParser::PARSE_SUCCESS;
 }
 
 DataTypePtr create_decimal(UInt64 precision_value, UInt64 scale_value, bool 
use_v2) {
diff --git a/be/src/vec/data_types/data_type_decimal.h 
b/be/src/vec/data_types/data_type_decimal.h
index c644fbcfc0..7b16f27391 100644
--- a/be/src/vec/data_types/data_type_decimal.h
+++ b/be/src/vec/data_types/data_type_decimal.h
@@ -215,7 +215,7 @@ public:
 
     static T get_scale_multiplier(UInt32 scale);
 
-    T parse_from_string(const std::string& str) const;
+    bool parse_from_string(const std::string& str, T* res) const;
 
 private:
     const UInt32 precision;
diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp
index 89ddc94a63..f584816bf3 100644
--- a/be/src/vec/exprs/vexpr.cpp
+++ b/be/src/vec/exprs/vexpr.cpp
@@ -111,63 +111,67 @@ void VExpr::close(doris::RuntimeState* state, 
VExprContext* context,
 
 Status VExpr::create_expr(doris::ObjectPool* pool, const doris::TExprNode& 
texpr_node,
                           VExpr** expr) {
-    switch (texpr_node.node_type) {
-    case TExprNodeType::BOOL_LITERAL:
-    case TExprNodeType::INT_LITERAL:
-    case TExprNodeType::LARGE_INT_LITERAL:
-    case TExprNodeType::FLOAT_LITERAL:
-    case TExprNodeType::DECIMAL_LITERAL:
-    case TExprNodeType::DATE_LITERAL:
-    case TExprNodeType::STRING_LITERAL:
-    case TExprNodeType::JSON_LITERAL:
-    case TExprNodeType::NULL_LITERAL: {
-        *expr = pool->add(new VLiteral(texpr_node));
-        return Status::OK();
-    }
-    case TExprNodeType::ARRAY_LITERAL: {
-        *expr = pool->add(new VArrayLiteral(texpr_node));
-        return Status::OK();
-    }
-    case doris::TExprNodeType::SLOT_REF: {
-        *expr = pool->add(new VSlotRef(texpr_node));
-        break;
-    }
-    case doris::TExprNodeType::COMPOUND_PRED: {
-        *expr = pool->add(new VcompoundPred(texpr_node));
-        break;
-    }
-    case doris::TExprNodeType::ARITHMETIC_EXPR:
-    case doris::TExprNodeType::BINARY_PRED:
-    case doris::TExprNodeType::FUNCTION_CALL:
-    case doris::TExprNodeType::COMPUTE_FUNCTION_CALL: {
-        *expr = pool->add(new VectorizedFnCall(texpr_node));
-        break;
-    }
-    case doris::TExprNodeType::CAST_EXPR: {
-        *expr = pool->add(new VCastExpr(texpr_node));
-        break;
-    }
-    case doris::TExprNodeType::IN_PRED: {
-        *expr = pool->add(new VInPredicate(texpr_node));
-        break;
-    }
-    case doris::TExprNodeType::CASE_EXPR: {
-        if (!texpr_node.__isset.case_expr) {
-            return Status::InternalError("Case expression not set in thrift 
node");
+    try {
+        switch (texpr_node.node_type) {
+        case TExprNodeType::BOOL_LITERAL:
+        case TExprNodeType::INT_LITERAL:
+        case TExprNodeType::LARGE_INT_LITERAL:
+        case TExprNodeType::FLOAT_LITERAL:
+        case TExprNodeType::DECIMAL_LITERAL:
+        case TExprNodeType::DATE_LITERAL:
+        case TExprNodeType::STRING_LITERAL:
+        case TExprNodeType::JSON_LITERAL:
+        case TExprNodeType::NULL_LITERAL: {
+            *expr = pool->add(new VLiteral(texpr_node));
+            return Status::OK();
         }
-        *expr = pool->add(new VCaseExpr(texpr_node));
-        break;
-    }
-    case TExprNodeType::INFO_FUNC: {
-        *expr = pool->add(new VInfoFunc(texpr_node));
-        break;
-    }
-    case TExprNodeType::TUPLE_IS_NULL_PRED: {
-        *expr = pool->add(new VTupleIsNullPredicate(texpr_node));
-        break;
-    }
-    default:
-        return Status::InternalError("Unknown expr node type: {}", 
texpr_node.node_type);
+        case TExprNodeType::ARRAY_LITERAL: {
+            *expr = pool->add(new VArrayLiteral(texpr_node));
+            return Status::OK();
+        }
+        case doris::TExprNodeType::SLOT_REF: {
+            *expr = pool->add(new VSlotRef(texpr_node));
+            break;
+        }
+        case doris::TExprNodeType::COMPOUND_PRED: {
+            *expr = pool->add(new VcompoundPred(texpr_node));
+            break;
+        }
+        case doris::TExprNodeType::ARITHMETIC_EXPR:
+        case doris::TExprNodeType::BINARY_PRED:
+        case doris::TExprNodeType::FUNCTION_CALL:
+        case doris::TExprNodeType::COMPUTE_FUNCTION_CALL: {
+            *expr = pool->add(new VectorizedFnCall(texpr_node));
+            break;
+        }
+        case doris::TExprNodeType::CAST_EXPR: {
+            *expr = pool->add(new VCastExpr(texpr_node));
+            break;
+        }
+        case doris::TExprNodeType::IN_PRED: {
+            *expr = pool->add(new VInPredicate(texpr_node));
+            break;
+        }
+        case doris::TExprNodeType::CASE_EXPR: {
+            if (!texpr_node.__isset.case_expr) {
+                return Status::InternalError("Case expression not set in 
thrift node");
+            }
+            *expr = pool->add(new VCaseExpr(texpr_node));
+            break;
+        }
+        case TExprNodeType::INFO_FUNC: {
+            *expr = pool->add(new VInfoFunc(texpr_node));
+            break;
+        }
+        case TExprNodeType::TUPLE_IS_NULL_PRED: {
+            *expr = pool->add(new VTupleIsNullPredicate(texpr_node));
+            break;
+        }
+        default:
+            return Status::InternalError("Unknown expr node type: {}", 
texpr_node.node_type);
+        }
+    } catch (const Exception& e) {
+        return Status::Error(e.code());
     }
     if (!(*expr)->data_type()) {
         return Status::InvalidArgument("Unknown expr type: {}", 
texpr_node.node_type);
diff --git a/be/src/vec/exprs/vliteral.cpp b/be/src/vec/exprs/vliteral.cpp
index f78118ab0f..98c5b0cf55 100644
--- a/be/src/vec/exprs/vliteral.cpp
+++ b/be/src/vec/exprs/vliteral.cpp
@@ -143,8 +143,15 @@ void VLiteral::init(const TExprNode& node) {
         case TYPE_DECIMALV2: {
             DCHECK_EQ(node.node_type, TExprNodeType::DECIMAL_LITERAL);
             DCHECK(node.__isset.decimal_literal);
-            DecimalV2Value value(node.decimal_literal.value);
-            field = DecimalField<Decimal128>(value.value(), value.scale());
+            DecimalV2Value value;
+            if (value.parse_from_str(node.decimal_literal.value.c_str(),
+                                     node.decimal_literal.value.size()) == 
E_DEC_OK) {
+                field = DecimalField<Decimal128>(value.value(), value.scale());
+            } else {
+                throw Exception(fmt::format("Invalid decimal(scale: {}) value: 
{}", value.scale(),
+                                            node.decimal_literal.value),
+                                doris::ErrorCode::INVALID_ARGUMENT);
+            }
             break;
         }
         case TYPE_DECIMAL32: {
@@ -152,11 +159,17 @@ void VLiteral::init(const TExprNode& node) {
             DCHECK(node.__isset.decimal_literal);
             DataTypePtr type_ptr = 
create_decimal(node.type.types[0].scalar_type.precision,
                                                   
node.type.types[0].scalar_type.scale, false);
-            auto val = typeid_cast<const 
DataTypeDecimal<Decimal32>*>(type_ptr.get())
-                               ->parse_from_string(node.decimal_literal.value);
-            auto scale =
-                    typeid_cast<const 
DataTypeDecimal<Decimal32>*>(type_ptr.get())->get_scale();
-            field = DecimalField<Decimal32>(val, scale);
+            Decimal32 val;
+            if (typeid_cast<const DataTypeDecimal<Decimal32>*>(type_ptr.get())
+                        ->parse_from_string(node.decimal_literal.value, &val)) 
{
+                auto scale =
+                        typeid_cast<const 
DataTypeDecimal<Decimal32>*>(type_ptr.get())->get_scale();
+                field = DecimalField<Decimal32>(val, scale);
+            } else {
+                throw Exception(fmt::format("Invalid value: {} for type {}",
+                                            node.decimal_literal.value, 
type_ptr->get_name()),
+                                doris::ErrorCode::INVALID_ARGUMENT);
+            }
             break;
         }
         case TYPE_DECIMAL64: {
@@ -164,11 +177,17 @@ void VLiteral::init(const TExprNode& node) {
             DCHECK(node.__isset.decimal_literal);
             DataTypePtr type_ptr = 
create_decimal(node.type.types[0].scalar_type.precision,
                                                   
node.type.types[0].scalar_type.scale, false);
-            auto val = typeid_cast<const 
DataTypeDecimal<Decimal64>*>(type_ptr.get())
-                               ->parse_from_string(node.decimal_literal.value);
-            auto scale =
-                    typeid_cast<const 
DataTypeDecimal<Decimal64>*>(type_ptr.get())->get_scale();
-            field = DecimalField<Decimal64>(val, scale);
+            Decimal64 val;
+            if (typeid_cast<const DataTypeDecimal<Decimal64>*>(type_ptr.get())
+                        ->parse_from_string(node.decimal_literal.value, &val)) 
{
+                auto scale =
+                        typeid_cast<const 
DataTypeDecimal<Decimal64>*>(type_ptr.get())->get_scale();
+                field = DecimalField<Decimal64>(val, scale);
+            } else {
+                throw Exception(fmt::format("Invalid value: {} for type {}",
+                                            node.decimal_literal.value, 
type_ptr->get_name()),
+                                doris::ErrorCode::INVALID_ARGUMENT);
+            }
             break;
         }
         case TYPE_DECIMAL128I: {
@@ -176,11 +195,17 @@ void VLiteral::init(const TExprNode& node) {
             DCHECK(node.__isset.decimal_literal);
             DataTypePtr type_ptr = 
create_decimal(node.type.types[0].scalar_type.precision,
                                                   
node.type.types[0].scalar_type.scale, false);
-            auto val = typeid_cast<const 
DataTypeDecimal<Decimal128I>*>(type_ptr.get())
-                               ->parse_from_string(node.decimal_literal.value);
-            auto scale =
-                    typeid_cast<const 
DataTypeDecimal<Decimal128I>*>(type_ptr.get())->get_scale();
-            field = DecimalField<Decimal128I>(val, scale);
+            Decimal128I val;
+            if (typeid_cast<const 
DataTypeDecimal<Decimal128I>*>(type_ptr.get())
+                        ->parse_from_string(node.decimal_literal.value, &val)) 
{
+                auto scale = typeid_cast<const 
DataTypeDecimal<Decimal128I>*>(type_ptr.get())
+                                     ->get_scale();
+                field = DecimalField<Decimal128I>(val, scale);
+            } else {
+                throw Exception(fmt::format("Invalid value: {} for type {}",
+                                            node.decimal_literal.value, 
type_ptr->get_name()),
+                                doris::ErrorCode::INVALID_ARGUMENT);
+            }
             break;
         }
         default: {
diff --git a/be/src/vec/io/io_helper.h b/be/src/vec/io/io_helper.h
index 990b67fd62..4c2b9105f4 100644
--- a/be/src/vec/io/io_helper.h
+++ b/be/src/vec/io/io_helper.h
@@ -339,16 +339,18 @@ bool read_decimal_text_impl(T& x, ReadBuffer& buf, UInt32 
precision, UInt32 scal
                 (const char*)buf.position(), buf.count(), precision, scale, 
&result);
         // only to match the is_all_read() check to prevent return null
         buf.position() = buf.end();
-        return result != StringParser::PARSE_FAILURE;
+        return result == StringParser::PARSE_SUCCESS || result == 
StringParser::PARSE_UNDERFLOW;
     } else {
-        auto dv = binary_cast<Int128, DecimalV2Value>(x.value);
-        auto ans = dv.parse_from_str((const char*)buf.position(), buf.count()) 
== 0;
+        StringParser::ParseResult result = StringParser::PARSE_SUCCESS;
+
+        x.value = StringParser::string_to_decimal<__int128>(buf.position(), 
buf.count(),
+                                                            
DecimalV2Value::PRECISION,
+                                                            
DecimalV2Value::SCALE, &result);
 
         // only to match the is_all_read() check to prevent return null
         buf.position() = buf.end();
 
-        x.value = dv.value();
-        return ans;
+        return result == StringParser::PARSE_SUCCESS || result == 
StringParser::PARSE_UNDERFLOW;
     }
 }
 
diff --git a/be/src/vec/sink/vtablet_sink.cpp b/be/src/vec/sink/vtablet_sink.cpp
index 016bf1c86a..b1a4e17545 100644
--- a/be/src/vec/sink/vtablet_sink.cpp
+++ b/be/src/vec/sink/vtablet_sink.cpp
@@ -25,6 +25,8 @@
 #include "util/time.h"
 #include "vec/columns/column_array.h"
 #include "vec/core/block.h"
+#include "vec/core/types.h"
+#include "vec/data_types/data_type_decimal.h"
 #include "vec/exprs/vexpr.h"
 #include "vec/exprs/vexpr_context.h"
 
@@ -651,6 +653,33 @@ Status VOlapTableSink::close(RuntimeState* state, Status 
exec_status) {
     return OlapTableSink::close(state, exec_status);
 }
 
+template <typename DecimalType, bool IsMin>
+DecimalType VOlapTableSink::_get_decimalv3_min_or_max(const TypeDescriptor& 
type) {
+    std::map<int, typename DecimalType::NativeType>* pmap = nullptr;
+    if constexpr (std::is_same_v<DecimalType, vectorized::Decimal32>) {
+        pmap = IsMin ? &_min_decimal32_val : &_max_decimal32_val;
+    } else if constexpr (std::is_same_v<DecimalType, vectorized::Decimal64>) {
+        pmap = IsMin ? &_min_decimal64_val : &_max_decimal64_val;
+    } else {
+        pmap = IsMin ? &_min_decimal128_val : &_max_decimal128_val;
+    }
+
+    // found
+    auto iter = pmap->find(type.precision);
+    if (iter != pmap->end()) {
+        return iter->second;
+    }
+
+    typename DecimalType::NativeType value;
+    if constexpr (IsMin) {
+        value = vectorized::min_decimal_value<DecimalType>(type.precision);
+    } else {
+        value = vectorized::max_decimal_value<DecimalType>(type.precision);
+    }
+    pmap->emplace(type.precision, value);
+    return value;
+}
+
 Status VOlapTableSink::_validate_column(RuntimeState* state, const 
TypeDescriptor& type,
                                         bool is_nullable, 
vectorized::ColumnPtr column,
                                         size_t slot_index, Bitmap* 
filter_bitmap,
@@ -783,6 +812,47 @@ Status VOlapTableSink::_validate_column(RuntimeState* 
state, const TypeDescripto
         }
         break;
     }
+    case TYPE_DECIMAL32: {
+#define CHECK_VALIDATION_FOR_DECIMALV3(ColumnDecimalType, DecimalType)         
                    \
+    auto column_decimal = 
const_cast<vectorized::ColumnDecimal<vectorized::ColumnDecimalType>*>(   \
+            assert_cast<const 
vectorized::ColumnDecimal<vectorized::ColumnDecimalType>*>(          \
+                    real_column_ptr.get()));                                   
                    \
+    for (size_t j = 0; j < column->size(); ++j) {                              
                    \
+        auto row = rows ? (*rows)[j] : j;                                      
                    \
+        if (row == last_invalid_row) {                                         
                    \
+            continue;                                                          
                    \
+        }                                                                      
                    \
+        if (need_to_validate(j, row)) {                                        
                    \
+            auto dec_val = column_decimal->get_data()[j];                      
                    \
+            bool invalid = false;                                              
                    \
+            const auto& max_decimal =                                          
                    \
+                    _get_decimalv3_min_or_max<vectorized::DecimalType, 
false>(type);               \
+            const auto& min_decimal =                                          
                    \
+                    _get_decimalv3_min_or_max<vectorized::DecimalType, 
true>(type);                \
+            if (dec_val > max_decimal || dec_val < min_decimal) {              
                    \
+                fmt::format_to(error_msg, "{}", "decimal value is not valid 
for definition");      \
+                fmt::format_to(error_msg, ", value={}", dec_val);              
                    \
+                fmt::format_to(error_msg, ", precision={}, scale={}", 
type.precision, type.scale); \
+                fmt::format_to(error_msg, ", min={}, max={}; ", min_decimal, 
max_decimal);         \
+                invalid = true;                                                
                    \
+            }                                                                  
                    \
+            if (invalid) {                                                     
                    \
+                last_invalid_row = row;                                        
                    \
+                RETURN_IF_ERROR(set_invalid_and_append_error_msg(row));        
                    \
+            }                                                                  
                    \
+        }                                                                      
                    \
+    }
+        CHECK_VALIDATION_FOR_DECIMALV3(Decimal32, Decimal32);
+        break;
+    }
+    case TYPE_DECIMAL64: {
+        CHECK_VALIDATION_FOR_DECIMALV3(Decimal64, Decimal64);
+        break;
+    }
+    case TYPE_DECIMAL128I: {
+        CHECK_VALIDATION_FOR_DECIMALV3(Decimal128I, Decimal128);
+        break;
+    }
     case TYPE_ARRAY: {
         const auto column_array =
                 assert_cast<const 
vectorized::ColumnArray*>(real_column_ptr.get());
diff --git a/be/src/vec/sink/vtablet_sink.h b/be/src/vec/sink/vtablet_sink.h
index 857c43722b..8e7229349b 100644
--- a/be/src/vec/sink/vtablet_sink.h
+++ b/be/src/vec/sink/vtablet_sink.h
@@ -101,6 +101,10 @@ private:
     // set stop_processing if we want to stop the whole process now.
     Status _validate_data(RuntimeState* state, vectorized::Block* block, 
Bitmap* filter_bitmap,
                           int* filtered_rows, bool* stop_processing);
+
+    template <typename DecimalType, bool IsMin>
+    DecimalType _get_decimalv3_min_or_max(const TypeDescriptor& type);
+
     Status _validate_column(RuntimeState* state, const TypeDescriptor& type, 
bool is_nullable,
                             vectorized::ColumnPtr column, size_t slot_index, 
Bitmap* filter_bitmap,
                             bool* stop_processing, fmt::memory_buffer& 
error_prefix,
@@ -114,6 +118,13 @@ private:
                        const VOlapTablePartition** partition, uint32_t& 
tablet_index,
                        bool& stop_processing, bool& is_continue);
 
+    std::map<int, int32_t> _max_decimal32_val;
+    std::map<int, int32_t> _min_decimal32_val;
+    std::map<int, int64_t> _max_decimal64_val;
+    std::map<int, int64_t> _min_decimal64_val;
+    std::map<int, int128_t> _max_decimal128_val;
+    std::map<int, int128_t> _min_decimal128_val;
+
     VOlapTablePartitionParam* _vpartition = nullptr;
     std::vector<vectorized::VExprContext*> _output_vexpr_ctxs;
 };
diff --git 
a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java 
b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
index c555e9a6ff..263751f5cd 100644
--- a/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
+++ b/fe/fe-common/src/main/java/org/apache/doris/catalog/ScalarType.java
@@ -1059,15 +1059,17 @@ public class ScalarType extends Type {
     }
 
     public static ScalarType getAssignmentCompatibleDecimalV2Type(ScalarType 
t1, ScalarType t2) {
-        int targetPrecision = Math.max(t1.decimalPrecision(), 
t2.decimalPrecision());
         int targetScale = Math.max(t1.decimalScale(), t2.decimalScale());
+        int targetPrecision = Math.max(t1.decimalPrecision() - 
t1.decimalScale(), t2.decimalPrecision()
+                - t2.decimalScale()) + targetScale;
         return ScalarType.createDecimalType(PrimitiveType.DECIMALV2,
                 targetPrecision, targetScale);
     }
 
     public static ScalarType getAssignmentCompatibleDecimalV3Type(ScalarType 
t1, ScalarType t2) {
-        int targetPrecision = Math.max(t1.decimalPrecision(), 
t2.decimalPrecision());
         int targetScale = Math.max(t1.decimalScale(), t2.decimalScale());
+        int targetPrecision = Math.max(t1.decimalPrecision() - 
t1.decimalScale(), t2.decimalPrecision()
+                - t2.decimalScale()) + targetScale;
         return ScalarType.createDecimalV3Type(targetPrecision, targetScale);
     }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java 
b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
index a6ab76df9c..503b506990 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
@@ -361,13 +361,14 @@ public class ArithmeticExpr extends Expr {
         if (pt1 == PrimitiveType.DOUBLE || pt2 == PrimitiveType.DOUBLE) {
             return Type.DOUBLE;
         } else if (pt1 == PrimitiveType.DECIMALV2 || pt2 == 
PrimitiveType.DECIMALV2) {
-            return Type.MAX_DECIMALV2_TYPE;
+            return pt1 == PrimitiveType.DECIMALV2 && pt2 == 
PrimitiveType.DECIMALV2
+                    ? Type.MAX_DECIMALV2_TYPE : Type.DOUBLE;
         } else if (pt1 == PrimitiveType.DECIMAL32 || pt2 == 
PrimitiveType.DECIMAL32) {
-            return Type.DECIMAL32;
+            return pt1 == PrimitiveType.DECIMAL32 && pt2 == 
PrimitiveType.DECIMAL32 ? Type.DECIMAL32 : Type.DOUBLE;
         } else if (pt1 == PrimitiveType.DECIMAL64 || pt2 == 
PrimitiveType.DECIMAL64) {
-            return Type.DECIMAL64;
+            return pt1 == PrimitiveType.DECIMAL64 && pt2 == 
PrimitiveType.DECIMAL64 ? Type.DECIMAL64 : Type.DOUBLE;
         } else if (pt1 == PrimitiveType.DECIMAL128 || pt2 == 
PrimitiveType.DECIMAL128) {
-            return Type.DECIMAL128;
+            return pt1 == PrimitiveType.DECIMAL128 && pt2 == 
PrimitiveType.DECIMAL128 ? Type.DECIMAL128 : Type.DOUBLE;
         } else if (pt1 == PrimitiveType.LARGEINT || pt2 == 
PrimitiveType.LARGEINT) {
             return Type.LARGEINT;
         } else {
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
index 8306c6ff14..169a9fdfe3 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/QueryPlanTest.java
@@ -2074,9 +2074,9 @@ public class QueryPlanTest extends TestWithFeService {
                 + "PROPERTIES (\n"
                 + "\"replication_allocation\" = \"tag.location.default: 1\"\n"
                 + ")");
-        String sql = "explain insert into test.decimal_tb select 1, 10, 1, 1, 
1;";
+        String sql = "explain insert into test.decimal_tb select 1, 1, 1, 1, 
1;";
         String explainString = getSQLPlanOrErrorMsg(sql);
-        Assert.assertTrue(explainString.contains("1 | 10 | 1 | 1 | 1"));
+        Assert.assertTrue(explainString.contains("1 | 1 | 1 | 1 | 1"));
     }
 
     @Test
diff --git a/regression-test/data/datatype_p0/decimalv3/test_overflow.out 
b/regression-test/data/datatype_p0/decimalv3/test_overflow.out
deleted file mode 100644
index c9b9873cd7..0000000000
--- a/regression-test/data/datatype_p0/decimalv3/test_overflow.out
+++ /dev/null
@@ -1,19 +0,0 @@
--- This file is automatically generated. You should know what you did if you 
want to edit this
--- !select_all --
-11111111111111111111.100000000000000000        
11111111111111111111.200000000000000000 11111111111111111111.300000000000000000 
1.1000000000000000000000000000000000000 1.2000000000000000000000000000000000000 
1.3000000000000000000000000000000000000 9
-
--- !select_check_overflow1 --
-\N     \N      \N      99999999999999999999.900000000000000000 \N
-
--- !select_check_overflow2 --
-1.1000000000000000000000000000000000000        
111111111111111111111.000000000000000000        \N
-
--- !select_check_overflow3 --
-11111111111111111111.100000000000000000        \N
-
--- !select_not_check_overflow1 --
-99.999999999999999999999999999999999999        
99.999999999999999999999999999999999999 1.1111111111111111E21   
99999999999999999999.900000000000000000 99999999999999999999.999999999999999999
-
--- !select_not_check_overflow2 --
-1.1000000000000000000000000000000000000        
111111111111111111111.000000000000000000        
-15.9141183460469231731687303715884105728
-
diff --git a/regression-test/data/insert_p0/insert.out 
b/regression-test/data/insert_p0/insert.out
index 39756a4193..2ef1dbbbb0 100644
--- a/regression-test/data/insert_p0/insert.out
+++ b/regression-test/data/insert_p0/insert.out
@@ -97,108 +97,108 @@
 4      1.1     a       2016-01-01      2015-01-01T03:15:16     false   -123.22 
-123456789012345678.012345678
 4      1.1     a       2016-01-01      2015-01-01T03:15:16     false   -123.22 
-123456789012345678.012345678
 4      1.1     a       2016-01-01      2015-01-01T03:15:16     false   -123.22 
-123456789012345678.012345678
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
123456789012345678.900123456
-25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
-123456789012345678.900123456
-25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
-123456789012345678.900123456
-25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
-123456789012345678.900123456
-25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
-123456789012345678.900123456
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+12     12.25   String1 1999-01-08      1999-01-08T02:05:06     true    123.22  
\N
+25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
\N
+25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
\N
+25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
\N
+25     55.52   test    1952-01-05      1989-01-08T04:05:06     false   321.21  
\N
 50     9.1     abc     2014-01-01      2015-01-01T03:15:16     true    123.22  
123456789012345678.012345678
-60     27.25   String1 1999-01-08      1999-01-08T02:05:06     true    61.61   0
-60     27.25   String1 1999-01-08      1999-01-08T02:05:06     true    61.61   0
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
-987654321098765432.109876543
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
-999999999999999999.999999999
-100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0       0
-100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0       0
-100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0       0
-100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0       0
-125    70.52000000000001       test    1952-01-05      1989-01-08T04:05:06     
false   160.61  0
-125    70.52000000000001       test    1952-01-05      1989-01-08T04:05:06     
false   160.61  0
-500    24.8777 STRING1 1923-04-08      2010-01-02T05:09:06     true    5.01    
2
-500    24.8777 STRING1 1923-04-08      2010-01-02T05:09:06     true    5.01    
2
-500    27.25   testing 1949-07-08      2002-01-07T01:05:06     true    -196.61 0
-500    27.25   testing 1949-07-08      2002-01-07T01:05:06     true    -196.61 0
-500    27.8788 string1 1922-04-02      2010-01-02T02:05:06     true    500     0
-500    27.8788 string1 1922-04-02      2010-01-02T02:05:06     true    500     0
-500    114.8777        AGAIN   1987-04-09      2010-01-02T04:03:06     true    
0       0
-500    114.8777        AGAIN   1987-04-09      2010-01-02T04:03:06     true    
0       0
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
987654321098765432.109876543
-4820   15.245  Again   1936-02-08      2005-01-09T04:05:06     false   166.91  0
-4820   15.245  Again   1936-02-08      2005-01-09T04:05:06     false   166.91  0
+60     27.25   String1 1999-01-08      1999-01-08T02:05:06     true    61.61   
\N
+60     27.25   String1 1999-01-08      1999-01-08T02:05:06     true    61.61   
\N
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    9.8777  STRING1 1923-04-08      2010-01-02T05:09:06     true    10.01   
2.000000000
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.25   testing 1949-07-08      2002-01-07T01:05:06     true    -393.22 
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    12.8788 string1 1922-04-02      2010-01-02T02:05:06     true    999.99  
\N
+100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0.00    
0E-9
+100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0.00    
0E-9
+100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0.00    
0E-9
+100    99.8777 AGAIN   1987-04-09      2010-01-02T04:03:06     true    0.00    
0E-9
+125    70.52000000000001       test    1952-01-05      1989-01-08T04:05:06     
false   160.61  \N
+125    70.52000000000001       test    1952-01-05      1989-01-08T04:05:06     
false   160.61  \N
+500    24.8777 STRING1 1923-04-08      2010-01-02T05:09:06     true    5.01    
2.000000000
+500    24.8777 STRING1 1923-04-08      2010-01-02T05:09:06     true    5.01    
2.000000000
+500    27.25   testing 1949-07-08      2002-01-07T01:05:06     true    -196.61 
\N
+500    27.25   testing 1949-07-08      2002-01-07T01:05:06     true    -196.61 
\N
+500    27.8788 string1 1922-04-02      2010-01-02T02:05:06     true    500.00  
\N
+500    27.8788 string1 1922-04-02      2010-01-02T02:05:06     true    500.00  
\N
+500    114.8777        AGAIN   1987-04-09      2010-01-02T04:03:06     true    
0.00    0E-9
+500    114.8777        AGAIN   1987-04-09      2010-01-02T04:03:06     true    
0.00    0E-9
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+964    0.245   Again   1936-02-08      2005-01-09T04:05:06     false   333.82  
\N
+4820   15.245  Again   1936-02-08      2005-01-09T04:05:06     false   166.91  
\N
+4820   15.245  Again   1936-02-08      2005-01-09T04:05:06     false   166.91  
\N
 5000   67.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
 5000   67.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
 5000   67.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
 5000   67.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123     
1
-5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  0
-5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  0
-5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  0
-5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  0
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 0
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 0
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 0
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 0
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
-5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
123456789012345678.900123456
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5252   12.25   sample  1987-04-09      2010-01-02T04:03:06     true    123.00  
1.000000000
+5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
0E-9
+5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
0E-9
+5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
0E-9
+5748   67.87   Sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
0E-9
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 
0E-9
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 
0E-9
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 
0E-9
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    -999.99 
0E-9
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
+5748   67.87   sample  1987-04-06      2010-01-02T04:03:06     true    181.18  
\N
 6000   \N      \N      1987-04-06      \N      true    \N      \N
 6000   \N      \N      1987-04-06      \N      true    \N      \N
 6000   \N      \N      1987-04-06      \N      true    \N      \N
 6000   \N      \N      1987-04-06      \N      true    \N      \N
-8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
999999999999999999.999999999
-8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
999999999999999999.999999999
-8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
999999999999999999.999999999
-8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
999999999999999999.999999999
+8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
\N
+8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
\N
+8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
\N
+8996   98.8777 again   1987-04-09      2010-01-02T04:03:06     false   -0.01   
\N
 25000  82.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
 25000  82.87   testing \N      2010-01-02T04:03:06     \N      \N      \N
-26260  27.25   sample  1987-04-09      2010-01-02T04:03:06     true    61.5    
1
-26260  27.25   sample  1987-04-09      2010-01-02T04:03:06     true    61.5    
1
-28740  82.87   Sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
-28740  82.87   Sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    -500    0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    -500    0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
-28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   0
+26260  27.25   sample  1987-04-09      2010-01-02T04:03:06     true    61.50   
1.000000000
+26260  27.25   sample  1987-04-09      2010-01-02T04:03:06     true    61.50   
1.000000000
+28740  82.87   Sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
0E-9
+28740  82.87   Sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
0E-9
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    -500.00 
0E-9
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    -500.00 
0E-9
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
\N
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
\N
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
\N
+28740  82.87   sample  1987-04-06      2010-01-02T04:03:06     true    90.59   
\N
 30000  \N      \N      1987-04-06      \N      true    \N      \N
 30000  \N      \N      1987-04-06      \N      true    \N      \N
-44980  113.8777        again   1987-04-09      2010-01-02T04:03:06     false   
-0.01   0
-44980  113.8777        again   1987-04-09      2010-01-02T04:03:06     false   
-0.01   0
+44980  113.8777        again   1987-04-09      2010-01-02T04:03:06     false   
-0.01   \N
+44980  113.8777        again   1987-04-09      2010-01-02T04:03:06     false   
-0.01   \N
 
diff --git 
a/regression-test/data/query_p0/operator/test_arithmetic_operators.out 
b/regression-test/data/query_p0/operator/test_arithmetic_operators.out
index 60e54c7eef..c1bf2e5b4f 100644
--- a/regression-test/data/query_p0/operator/test_arithmetic_operators.out
+++ b/regression-test/data/query_p0/operator/test_arithmetic_operators.out
@@ -5,40 +5,35 @@
 3      3670635 5536    10989   1
 
 -- !arith_op2 --
-1      2.0     123.123 12312300.000000000
-2      3.0     1243.500        124350000.000000000
-3      4.0     24453.325       2445332500.000000000
+1      2.0     123.123 1.23123E7
+2      3.0     1243.500        1.2435E8
+3      4.0     24453.325       2.4453325E9
 
 -- !arith_op3 --
-1      123.123 244891.647000000
-2      1243.500        2469591.000000000
-3      24453.325       48637663.425000000
+1      123.123 244891.647
+2      1243.500        2469591.0
+3      24453.325       4.8637663425000004E7
 
 -- !arith_op4 --
-1      123.123 12.3123 779.737982640   12596.337364196777      198.9
-2      1243.500        25203.258       981432.353193984        1567450.5       
40252.248
-3      24453.325       1.930467742125E9        89352450.776970036      
7267806.0       1.57021605E8
+1      123.123 12.3123 779.7379815444947       12596.337364196777      198.9
+2      1243.500        25203.258       981432.375      1567450.5       
40252.248
+3      24453.325       1.930467742125E9        8.935244955E7   7267806.0       
1.57021605E8
 
 -- !arith_op5 --
-1      12.312300000    0.010000000000000002    0.633300019
-2      124.350000000   2.0268  78.924998246
-3      2445.332500000  7894.5  365.400005018
+1      12.312300000    0.010000000000000002    0.6333000183105469
+2      124.350000000   2.0268  78.92500000000001
+3      2445.332500000  7894.5  365.40000000000003
 
 -- !arith_op6 --
-1      -198.900000000  -100.100000000  -1101190.200000000      -12.312300000   
-0.010000000000000002   -0.633300019
-2      -198.600000000  -100.100000000  -1101190.300000000      -124.350000000  
-2.0268 -78.924998246
-3      -198.900000000  -100.200000000  -1101190.500000000      -2445.332500000 
-7894.5 -365.400005018
+1      -198.9  -100.10000000000001     -1101190.2      -12.312300000   
-0.010000000000000002   -0.6333000183105469
+2      -198.60000000000002     -100.10000000000001     -1101190.3      
-124.350000000  -2.0268 -78.92500000000001
+3      -198.9  -100.2  -1101190.5      -2445.332500000 -7894.5 
-365.40000000000003
 
 -- !arith_op7 --
 1      1.1356092352936706E19   9.2233720368547763E17   5.8411616798251155E19
 2      1.1469263127828914E20   1.869393044429726E20    7.279546380087632E21
 3      2.2554211401312182E21   7.281391054495003E23    3.370220142266735E22
 
--- !arith_op8 --
-1      2.1564781210736683E-16  1.08528637465799E-16    1.1939128071597471E-12  
0E-9    1.0842021724855045E-20  6.866252556874047E-19
-2      2.1532255145562118E-16  1.08528637465799E-16    1.1939129155799644E-12  
0E-9    2.1974609631936205E-18  8.557065646341844E-17
-3      2.1564781210736683E-16  1.0863705768304754E-16  1.1939131324203989E-12  
0E-9    8.559234050686815E-15   3.961674738262033E-16
-
 -- !arith_op9 --
 1      9.2233720368547888E16   9.223372036854776E18    9.223372036854776E18
 2      9.2233720368549008E16   9.223372036854776E18    9.223372036854776E18
@@ -55,231 +50,51 @@
 3      24453325000.000000000   7.8945E10       3.654E9
 
 -- !arith_op12 --
-1      0.100000000     198.900000000   100.100000000   1101190.200000000       
12.312300000    0.010000000000000002    0.633300019
-2      0.200000000     198.600000000   100.100000000   1101190.300000000       
124.350000000   2.0268  78.924998246
-3      0.300000000     198.900000000   100.200000000   1101190.500000000       
2445.332500000  7894.5  365.400005018
+1      0.1     198.9   100.10000000000001      1101190.2       12.312300000    
0.010000000000000002    0.6333000183105469
+2      0.2     198.60000000000002      100.10000000000001      1101190.3       
124.350000000   2.0268  78.92500000000001
+3      0.30000000000000004     198.9   100.2   1101190.5       2445.332500000  
7894.5  365.40000000000003
 
 -- !arith_op13 --
-1      0.1     198.9   100.1   1101190.2       12.312300000    0.01    
0.6333000183105468
-2      0.2     198.6   100.1   1101190.3       124.350000000   2.0268  78.925
-3      0.3     198.9   100.2   1101190.5       2445.332500000  7894.5  365.4
+1      0.1     198.9   100.1   1101190.2       12.3123 0.01    
0.6333000183105468
+2      0.2     198.6   100.1   1101190.3       124.35  2.0268  78.925
+3      0.3     198.9   100.2   1101190.5       2445.3325       7894.5  365.4
 
 -- !arith_op14 --
-1      0.900000000     1988.900000000  1000.900000000  11011901.900000000      
123.023000000   0.0     6.233000192
-2      1.900000000     1985.900000000  1000.900000000  11011902.900000000      
1243.400000000  20.168  789.149982464
-3      2.900000000     1988.900000000  1001.900000000  11011904.900000000      
24453.225000000 78944.9 3653.900050176
+1      0.9     1988.9  1000.9  1.10119019E7    123.023000000   0.0     
6.233000183105469
+2      1.9     1985.9  1000.9  1.10119029E7    1243.400000000  20.168  789.15
+3      2.9     1988.9  1001.9  1.10119049E7    24453.225000000 78944.9 3653.9
 
 -- !arith_op15 --
-1      1.100000000     1989.100000000  1001.100000000  11011902.100000000      
123.223000000   0.2     6.433000192
-2      2.100000000     1986.100000000  1001.100000000  11011903.100000000      
1243.600000000  20.368000000000002      789.349982464
-3      3.100000000     1989.100000000  1002.100000000  11011905.100000000      
24453.425000000 78945.1 3654.100050176
+1      1.1     1989.1  1001.1  1.10119021E7    123.223000000   0.2     
6.433000183105468
+2      2.1     1986.1  1001.1  1.10119031E7    1243.600000000  
20.368000000000002      789.35
+3      3.1     1989.1  1002.1  1.10119051E7    24453.425000000 78945.1 3654.1
 
 -- !arith_op16 --
-11     1999.000000000  1002.600000000  11011902        117.123000000   -234.56 
6.333000183105469
-12     1996.000000000  1002.600000000  11011903        1237.500000000  
-214.392        789.25
-13     1999.000000000  1003.600000000  11011905        24447.325000000 
78710.34        3654.0
+11     1999.0  1002.6  11011902        117.123 -234.56 6.333000183105469
+12     1996.0  1002.6  11011903        1237.5  -214.392        789.25
+13     1999.0  1003.6  11011905        24447.325       78710.34        3654.0
 
 -- !arith_op17 --
 
 -- !arith_op18 --
-245136538.647000000
-4944121182.000000000
-146204816255.550000000
+2.45136538647E8
+4.944121182E9
+1.4620481625555002E11
 
 -- !arith_op19 --
 1.5524497441372922E8
 7.908872842616545E13
-4.217497670730171E19
+4.217497670730172E19
 
 -- !arith_op20 --
 0.001433930695745209
 1.1353823333756908E-7
 9.444209807407214E-12
 
--- !arith_op21 --
-1      2       0       1.0
-4      4       0       1.0
-9      6       0       1.0
-
--- !arith_op21 --
-1989   1990    -1988   5.027652086475615E-4
-3972   1988    -1984   0.0010070493454179255
-5967   1992    -1986   0.0015082956259426848
-
--- !arith_op21 --
-1001   1002    -1000   9.99000999000999E-4
-2002   1003    -999    0.001998001998001998
-3006   1005    -999    0.0029940119760479044
-
--- !arith_op21 --
-123.123000000  124.123000000   -122.123000000  0.008121959
-2487.000000000 1245.500000000  -1241.500000000 0.001608363
-73359.975000000        24456.325000000 -24450.325000000        0.000122683
-
--- !arith_op21 --
-0.1    1.1     0.9     10.0
-40.536 22.268  -18.268 0.09867771857114663
-236835.0       78948.0 -78942.0        3.800114003420103E-5
-
--- !arith_op21 --
-6.333000183105469      7.333000183105469       -5.333000183105469      
0.1579030429633806
-1578.5 791.25  -787.25 0.0025340513145391194
-10962.0        3657.0  -3651.0 8.210180623973727E-4
-
--- !arith_op21 --
-1989   1990    1988    1989.0
-3972   1988    1984    993.0
-5967   1992    1986    663.0
-
--- !arith_op21 --
-3956121        3978    0       1.0
-3944196        3972    0       1.0
-3956121        3978    0       1.0
-
--- !arith_op21 --
-1990989        2990    988     1.9870129870129871
-1987986        2987    985     1.9840159840159841
-1992978        2991    987     1.9850299401197604
-
--- !arith_op21 --
-244891.647000000       2112.123000000  1865.877000000  16.154577130
-2469591.000000000      3229.500000000  742.500000000   1.597104946
-48637663.425000000     26442.325000000 -22464.325000000        0.081338632
-
--- !arith_op21 --
-198.9  1989.1  1988.9  19890.0
-40252.248      2006.268        1965.732        97.98697454114861
-1.57021605E8   80934.0 -76956.0        0.02519475584267528
-
--- !arith_op21 --
-12596.337364196777     1995.3330001831055      1982.6669998168945      
314.069152454164
-1567450.5      2775.25 1196.75 2.516312955337346
-7267806.0      5643.0  -1665.0 0.5443349753694581
-
--- !arith_op21 --
-1001   1002    1000    1001.0
-2002   1003    999     500.5
-3006   1005    999     334.0
-
--- !arith_op21 --
-1990989        2990    -988    0.5032679738562091
-1987986        2987    -985    0.5040281973816717
-1992978        2991    -987    0.5037707390648567
-
--- !arith_op21 --
-1002001        2002    0       1.0
-1002001        2002    0       1.0
-1004004        2004    0       1.0
-
--- !arith_op21 --
-123246.123000000       1124.123000000  877.877000000   8.130081301
-1244743.500000000      2244.500000000  -242.500000000  0.804985927
-24502231.650000000     25455.325000000 -23451.325000000        0.040976023
-
--- !arith_op21 --
-100.10000000000001     1001.1  1000.9  10010.0
-20288.268      1021.268        980.732 49.38819814485889
-7.910289E7     79947.0 -77943.0        0.012692380771423142
-
--- !arith_op21 --
-6339.333183288574      1007.3330001831055      994.6669998168945       
158.06094600634398
-790039.25      1790.25 211.75  1.2682926829268293
-3661308.0      4656.0  -2652.0 0.2742200328407225
-
--- !arith_op21 --
-123.123000000  124.123000000   122.123000000   123.123000000
-2487.000000000 1245.500000000  1241.500000000  621.750000000
-73359.975000000        24456.325000000 24450.325000000 8151.108333333
-
--- !arith_op21 --
-244891.647000000       2112.123000000  -1865.877000000 0.061901961
-2469591.000000000      3229.500000000  -742.500000000  0.626132931
-48637663.425000000     26442.325000000 22464.325000000 12.294281046
-
--- !arith_op21 --
-123246.123000000       1124.123000000  -877.877000000  0.123000000
-1244743.500000000      2244.500000000  242.500000000   1.242257742
-24502231.650000000     25455.325000000 23451.325000000 24.404515968
-
--- !arith_op21 --
-15159.273129000        246.246000000   0E-9    1.000000000
-1546292.250000000      2487.000000000  0E-9    1.000000000
-597965103.555625000    48906.650000000 0E-9    1.000000000
-
--- !arith_op21 --
-12.3123        123.223 123.02300000000001      1231.23
-25203.258      1263.768        1223.232        61.35287152161042
-1.930467742125E9       103398.325      -54491.675      0.30975140920894295
-
--- !arith_op21 --
-779.737982640  129.456000192   116.789999808   19.44149635878031
-981432.353193984       2032.749982464  454.250017536   1.5755464048146974
-89352450.776970036     28107.325050176 20799.324949824 6.692207170224412
-
--- !arith_op21 --
-0.1    1.1     -0.9    0.1
-40.536 22.268  18.268  10.134
-236835.0       78948.0 78942.0 26315.0
-
--- !arith_op21 --
-198.9  1989.1  -1988.9 5.027652086475616E-5
-40252.248      2006.268        -1965.732       0.010205438066465258
-1.57021605E8   80934.0 76956.0 39.69079939668175
-
--- !arith_op21 --
-100.10000000000001     1001.1  -1000.9 9.99000999000999E-5
-20288.268      1021.268        -980.732        0.02024775224775225
-7.910289E7     79947.0 77943.0 78.7874251497006
-
--- !arith_op21 --
-12.3123        123.223 -123.02300000000001     8.121959341471537E-4
-25203.258      1263.768        -1223.232       0.016299155609167674
-1.930467742125E9       103398.325      54491.675       3.228395320472778
-
--- !arith_op21 --
-0.010000000000000002   0.2     0.0     1.0
-410.791824     40.536  0.0     1.0
-6.232313025E9  157890.0        0.0     1.0
-
--- !arith_op21 --
-0.6333000183105469     6.433000183105468       -6.233000183105469      
0.01579030429633806
-15996.519      809.518 -768.982        0.025680076021539436
-2.8846503E8    82599.0 75291.0 21.605090311986864
-
--- !arith_op21 --
-6.333000183105469      7.333000183105469       5.333000183105469       
6.333000183105469
-1578.5 791.25  787.25  394.625
-10962.0        3657.0  3651.0  1218.0
-
--- !arith_op21 --
-12596.337364196777     1995.3330001831055      -1982.6669998168945     
0.003184012158424067
-1567450.5      2775.25 -1196.75        0.39740684793554887
-7267806.0      5643.0  1665.0  1.83710407239819
-
--- !arith_op21 --
-6339.333183288574      1007.3330001831055      -994.6669998168945      
0.006326673509595873
-790039.25      1790.25 -211.75 0.7884615384615384
-3661308.0      4656.0  2652.0  3.6467065868263475
-
--- !arith_op21 --
-779.737982640  129.456000192   -116.789999808  0.051436369996714415
-981432.353193984       2032.749982464  -454.250017536  0.6347004422999598
-89352450.776970036     28107.325050176 -20799.324949824        
0.14942753183871724
-
--- !arith_op21 --
-0.6333000183105469     6.433000183105468       6.233000183105469       
63.33000183105469
-15996.519      809.518 768.982 38.94069469113874
-2.8846503E8    82599.0 -75291.0        0.04628538856165685
-
--- !arith_op21 --
-40.1068913192139       12.666000366210938      0.0     1.0
-622915.5625    1578.5  0.0     1.0
-1.3351716E7    7308.0  0.0     1.0
-
 -- !arith_op22 --
-1987.210000000
-1990.210000000
-1990.210000000
+1987.21
+1990.21
+1990.21
 
 -- !arith_op23 --
 124.333000000
@@ -287,7 +102,7 @@
 24454.535000000
 
 -- !arith_op24 --
-2.310000000
+2.31
 
 -- !arith_op25 --
 \N     \N      \N      \N
diff --git 
a/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
 
b/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
index 397283ef01..f8def44a3d 100644
--- 
a/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
+++ 
b/regression-test/data/query_p0/sql_functions/conditional_functions/test_nullif.out
@@ -350,7 +350,7 @@ true
 15
 
 -- !if_nullif20 --
-123456789.567890124    1234567890123456789012345678901234567890
+123456789.123456789    123456789012345678
 
 -- !if_nullif21 --
 hello  0
diff --git 
a/regression-test/suites/datatype_p0/decimalv3/test_data/test_overflow.csv 
b/regression-test/suites/datatype_p0/decimalv3/test_data/test_overflow.csv
new file mode 100644
index 0000000000..61a1f7c3f5
--- /dev/null
+++ b/regression-test/suites/datatype_p0/decimalv3/test_data/test_overflow.csv
@@ -0,0 +1,2 @@
+3957417026770075.00
+39574170267700.75
diff --git a/regression-test/suites/datatype_p0/decimalv3/test_overflow.groovy 
b/regression-test/suites/datatype_p0/decimalv3/test_overflow.groovy
deleted file mode 100644
index 01de2ea498..0000000000
--- a/regression-test/suites/datatype_p0/decimalv3/test_overflow.groovy
+++ /dev/null
@@ -1,56 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-suite("test_overflow") {
-
-    def table1 = "test_overflow"
-
-    sql "drop table if exists ${table1}"
-
-    sql """
-    CREATE TABLE IF NOT EXISTS test_overflow (
-      `k1` decimalv3(38, 18) NULL COMMENT "",
-      `k2` decimalv3(38, 18) NULL COMMENT "",
-      `k3` decimalv3(38, 18) NULL COMMENT "",
-      `v1` decimalv3(38, 37) NULL COMMENT "",
-      `v2` decimalv3(38, 37) NULL COMMENT "",
-      `v3` decimalv3(38, 37) NULL COMMENT "",
-      `v4` INT NULL COMMENT ""
-    ) ENGINE=OLAP
-    COMMENT "OLAP"
-    DISTRIBUTED BY HASH(`k1`, `k2`, `k3`) BUCKETS 8
-    PROPERTIES (
-    "replication_allocation" = "tag.location.default: 1",
-    "in_memory" = "false",
-    "storage_format" = "V2"
-    )
-    """
-
-    sql """insert into test_overflow 
values(11111111111111111111.1,11111111111111111111.2,11111111111111111111.3, 
1.1,1.2,1.3,9)
-    """
-    qt_select_all "select * from test_overflow order by k1"
-
-    sql " SET check_overflow_for_decimal = true; "
-    qt_select_check_overflow1 "select k1 * k2, k1 * k3, k1 * k2 * k3, k1 * v4, 
k1*50 from test_overflow;"
-    qt_select_check_overflow2 "select v1, k1*10, v1 +k1*10 from test_overflow"
-    qt_select_check_overflow3 "select `k1`, cast (`k1` as DECIMALV3(38, 36)) 
from test_overflow;"
-
-    sql " SET check_overflow_for_decimal = false; "
-    qt_select_not_check_overflow1 "select k1 * k2, k1 * k3, k1 * k2 * k3, k1 * 
v4, k1*50 from test_overflow;"
-    qt_select_not_check_overflow2 "select v1, k1*10, v1 +k1*10 from 
test_overflow"
-    sql "drop table if exists ${table1}"
-}
diff --git a/regression-test/suites/primary_index/test_pk_uk_case.groovy 
b/regression-test/suites/primary_index/test_pk_uk_case.groovy
index 9403d5e92c..b8be941689 100644
--- a/regression-test/suites/primary_index/test_pk_uk_case.groovy
+++ b/regression-test/suites/primary_index/test_pk_uk_case.groovy
@@ -95,14 +95,13 @@ suite("test_pk_uk_case") {
     def part_key = rd.nextInt(1000)
     def sub_key = 13
     def line_num = 29
-    def decimal = rd.nextFloat()
+    def decimal = 111.11
     def city = RandomStringUtils.randomAlphabetic(10)
     def name = UUID.randomUUID().toString()
     def date = 
DateTimeFormatter.ofPattern("yyyy-MM-dd").format(LocalDateTime.now())
     for (int idx = 0; idx < 50; idx++) {
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
@@ -116,7 +115,6 @@ suite("test_pk_uk_case") {
 
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
@@ -130,7 +128,6 @@ suite("test_pk_uk_case") {
 
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
@@ -144,7 +141,6 @@ suite("test_pk_uk_case") {
 
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
@@ -158,7 +154,6 @@ suite("test_pk_uk_case") {
         
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
@@ -173,7 +168,6 @@ suite("test_pk_uk_case") {
         // insert batch key 
         order_key = rd.nextInt(10)
         part_key = rd.nextInt(10)
-        decimal = rd.nextFloat()
         city = RandomStringUtils.randomAlphabetic(10)
         name = UUID.randomUUID().toString()
         sql """ INSERT INTO ${tableNamePk} VALUES
diff --git a/regression-test/suites/query_p0/aggregate/aggregate.groovy 
b/regression-test/suites/query_p0/aggregate/aggregate.groovy
index ef7d74fa65..68ac834b94 100644
--- a/regression-test/suites/query_p0/aggregate/aggregate.groovy
+++ b/regression-test/suites/query_p0/aggregate/aggregate.groovy
@@ -104,7 +104,7 @@ suite("aggregate") {
         }
     }
 
-    sql "insert into ${tableName2} values (12, 12.25, 'String1', '1999-01-08', 
'1999-01-08 02:05:06', '1999-01-08', '1999-01-08 02:05:06.111111', null, 
'1999-01-08 02:05:06.111111', 'true', null, 12345678901234567890.0123456789);"
+    sql "insert into ${tableName2} values (12, 12.25, 'String1', '1999-01-08', 
'1999-01-08 02:05:06', '1999-01-08', '1999-01-08 02:05:06.111111', null, 
'1999-01-08 02:05:06.111111', 'true', null, 123456789012345678.012345678);"
 
     sql " sync "
     qt_aggregate """ select max(upper(c_string)), min(upper(c_string)) from 
${tableName} """
diff --git 
a/regression-test/suites/query_p0/operator/test_arithmetic_operators.groovy 
b/regression-test/suites/query_p0/operator/test_arithmetic_operators.groovy
index 46d5408503..3b8c5eb919 100644
--- a/regression-test/suites/query_p0/operator/test_arithmetic_operators.groovy
+++ b/regression-test/suites/query_p0/operator/test_arithmetic_operators.groovy
@@ -31,10 +31,10 @@ suite("test_arithmetic_operators", "query,p0") {
                    k5*(-0.1), k8*(-0.1), k9*(-0.1) from  ${tableName} order by 
k1, k2, k3, k4"
     qt_arith_op7 "select k1, k5*(9223372036854775807/100), 
k8*9223372036854775807, \
                    k9*9223372036854775807 from  ${tableName} order by k1, k2, 
k3, k4"
-    qt_arith_op8 "select k1, k2/9223372036854775807, k3/9223372036854775807, \
-                   k4/9223372036854775807,k5/9223372036854775807, \
-                   k8/9223372036854775807,k9/9223372036854775807 \
-                   from  ${tableName} order by k1, k2, k3, k4"
+    // qt_arith_op8 "select k1, k2/9223372036854775807, 
k3/9223372036854775807, \
+       //          k4/9223372036854775807,k5/9223372036854775807, \
+       //          k8/9223372036854775807,k9/9223372036854775807 \
+       //          from  ${tableName} order by k1, k2, k3, k4"
     qt_arith_op9 "select k1, k5+9223372036854775807/100, 
k8+9223372036854775807, \
                    k9+9223372036854775807 from  ${tableName} order by k1, k2, 
k3, k4"
     qt_arith_op10 "select k1, k5-9223372036854775807/100, 
k8-9223372036854775807, \
@@ -56,13 +56,13 @@ suite("test_arithmetic_operators", "query,p0") {
     qt_arith_op19 "select k1*k2*k3*k5*k8*k9 from ${tableName} order by k1, k2, 
k3, k4"
     qt_arith_op20 "select k1*10000/k4/k8/k9 from ${tableName} order by k1, k2, 
k3, k4"
     
-    for( i in [1, 2, 3, 5, 8, 9]) {
-        for( j in [1, 2, 3, 5, 8, 9]) {
-            qt_arith_op21 "select k${i}*k${j}, k${i}+k${j}, k${i}-k${j}, 
k${i}/k${j} from ${tableName} \
-                           where abs(k${i})<9223372036854775807 and k${j}<>0 
and\
-                           abs(k${i})<922337203685477580 order by k1, k2, k3, 
k4"
-        }
-    }
+    // for( i in [1, 2, 3, 5, 8, 9]) {
+    //     for( j in [1, 2, 3, 5, 8, 9]) {
+    //         qt_arith_op21 "select k${i}*k${j}, k${i}+k${j}, k${i}-k${j}, 
k${i}/k${j} from ${tableName} \
+       //                  where abs(k${i})<9223372036854775807 and k${j}<>0 
and\
+       //                  abs(k${i})<922337203685477580 order by k1, k2, k3, 
k4"
+    //     }
+    // }
     
     qt_arith_op22 "select 1.1*1.1 + k2 from ${tableName} order by 1 limit 10"
     qt_arith_op23 "select 1.1*1.1 + k5 from ${tableName} order by 1 limit 10"
diff --git 
a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
 
b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
index 16b6864809..e754d6d0e8 100644
--- 
a/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
+++ 
b/regression-test/suites/query_p0/sql_functions/conditional_functions/test_nullif.groovy
@@ -127,8 +127,8 @@ suite("test_nullif") {
             logger.info(exception.message)
         }
     }
-    qt_if_nullif20 """select ifnull(123456789.5678901234567890,2),
-        ifnull("1234567890123456789012345678901234567890",2)"""
+    qt_if_nullif20 """select ifnull(123456789.123456789,2),
+        ifnull("123456789012345678",2)"""
     qt_if_nullif21 """select IFNULL("hello", "doris"), IFNULL(NULL,0)"""
     qt_if_nullif22 """select ifnull("null",2), ifnull("NULL",2), 
ifnull("null","2019-09-09 00:00:00"),
         ifnull(NULL, concat("NUL", "LL"))"""


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to