Coverage Report

Created: 2026-07-29 16:42

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/cast/function_cast.cpp
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#include <utility>
19
20
#include "core/data_type/data_type_agg_state.h"
21
#include "core/data_type/data_type_decimal.h"
22
#include "core/data_type/data_type_number.h" // IWYU pragma: keep
23
#include "core/data_type/data_type_quantilestate.h"
24
#include "core/data_type/data_type_variant.h"
25
#include "core/data_type/data_type_variant_v2.h"
26
#include "core/data_type/primitive_type.h"
27
#include "exprs/function/cast/cast_to_array.h"
28
#include "exprs/function/cast/cast_to_jsonb.h"
29
#include "exprs/function/cast/cast_to_map.h"
30
#include "exprs/function/cast/cast_to_struct.h"
31
#include "exprs/function/cast/cast_to_variant.h"
32
#include "exprs/function/cast/cast_wrapper_decls.h"
33
#include "exprs/function/cast/variant_v2/cast_variant_v2.h"
34
#include "exprs/function/simple_function_factory.h"
35
36
namespace doris {
37
38
namespace CastWrapper {
39
40
WrapperType create_hll_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
41
6
                               const DataTypeHLL& to_type) {
42
    /// Conversion from String through parsing.
43
6
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
44
6
        return cast_from_string_to_generic;
45
6
    }
46
47
0
    return CastWrapper::create_unsupport_wrapper("Cast to HLL only support from String type");
48
6
}
49
50
WrapperType create_bitmap_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
51
5
                                  const DataTypeBitMap& to_type) {
52
    /// Conversion from String through parsing.
53
5
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
54
5
        return cast_from_string_to_generic;
55
5
    }
56
57
0
    return CastWrapper::create_unsupport_wrapper("Cast to BitMap only support from String type");
58
5
}
59
60
WrapperType create_quantile_state_wrapper(FunctionContext* context,
61
                                          const DataTypePtr& from_type_untyped,
62
2
                                          const DataTypeQuantileState& to_type) {
63
    /// Conversion from String through parsing.
64
2
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
65
2
        return cast_from_string_to_generic;
66
2
    }
67
68
0
    return CastWrapper::create_unsupport_wrapper(
69
0
            "Cast to QuantileState only support from String type");
70
2
}
71
72
316
WrapperType create_varbinary_wrapper(const DataTypePtr& from_type_untyped) {
73
    /// Conversion from String through parsing.
74
316
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
75
316
        return cast_from_string_to_generic;
76
316
    }
77
78
0
    return CastWrapper::create_unsupport_wrapper("Cast to Varbinary only support from String type");
79
316
}
80
81
WrapperType prepare_unpack_dictionaries(FunctionContext* context, const DataTypePtr& from_type,
82
1.77M
                                        const DataTypePtr& to_type) {
83
1.77M
    const auto& from_nested = from_type;
84
1.77M
    const auto& to_nested = to_type;
85
86
1.77M
    if (from_type->is_null_literal()) {
87
2.19k
        if (!to_nested->is_nullable()) {
88
0
            return CastWrapper::create_unsupport_wrapper(
89
0
                    "Cannot convert NULL to a non-nullable type");
90
0
        }
91
92
2.19k
        return [](FunctionContext* context, Block& block, const ColumnNumbers&, uint32_t result,
93
2.19k
                  size_t input_rows_count, const NullMap::value_type* null_map = nullptr) {
94
            /// TODO: remove this in the future.
95
2.19k
            auto& res = block.get_by_position(result);
96
2.19k
            res.column = res.type->create_column_const_with_default_value(input_rows_count)
97
2.19k
                                 ->convert_to_full_column_if_const();
98
2.19k
            return Status::OK();
99
2.19k
        };
100
2.19k
    }
101
102
1.77M
    auto wrapper = prepare_remove_nullable(context, from_nested, to_nested);
103
104
1.77M
    return wrapper;
105
1.77M
}
106
107
bool need_replace_null_data_to_default(FunctionContext* context, const DataTypePtr& from_type,
108
1.72M
                                       const DataTypePtr& to_type) {
109
1.72M
    if (from_type->equals(*to_type)) {
110
104k
        return false;
111
104k
    }
112
113
1.61M
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
1.36M
        using Types = std::decay_t<decltype(types)>;
115
1.36M
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
383k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
383k
            return false;
121
383k
        }
122
0
        return call_on_index_and_data_type<
123
1.36M
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
963k
            using Types2 = std::decay_t<decltype(types2)>;
125
963k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
708k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
708k
                return false;
130
708k
            }
131
253k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
253k
                using FromFieldType = typename FromDataType::FieldType;
133
253k
                using ToFieldType = typename ToDataType::FieldType;
134
253k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
253k
                UInt32 from_scale = 0;
136
137
253k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
44.8k
                    const auto* from_decimal_type =
139
44.8k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
44.8k
                    from_precision =
141
44.8k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
44.8k
                    from_scale = from_decimal_type->get_scale();
143
44.8k
                }
144
145
253k
                UInt32 to_max_digits = 0;
146
253k
                UInt32 to_precision = 0;
147
253k
                UInt32 to_scale = 0;
148
149
253k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
247k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
247k
                    const auto* to_decimal_type =
153
247k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
247k
                    to_precision = to_decimal_type->get_precision();
155
247k
                    ToDataType::check_type_precision(to_precision);
156
157
247k
                    to_scale = to_decimal_type->get_scale();
158
247k
                    ToDataType::check_type_scale(to_scale);
159
247k
                }
160
253k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
6.18k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
6.18k
                    to_precision = to_max_digits;
163
6.18k
                }
164
165
253k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
253k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
253k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
253k
                if (to_scale > from_scale) {
170
12.3k
                    multiply_may_overflow &=
171
12.3k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
12.3k
                }
173
253k
                return narrow_integral || multiply_may_overflow;
174
253k
            }
175
0
            return false;
176
963k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
17
            using Types2 = std::decay_t<decltype(types2)>;
125
17
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
17
            return false;
176
17
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
36
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
36
            using Types2 = std::decay_t<decltype(types2)>;
125
36
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
36
            return false;
176
36
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
99
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
99
            using Types2 = std::decay_t<decltype(types2)>;
125
99
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
99
            return false;
176
99
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
10
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10
                using FromFieldType = typename FromDataType::FieldType;
133
10
                using ToFieldType = typename ToDataType::FieldType;
134
10
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10
                UInt32 from_scale = 0;
136
137
10
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10
                    const auto* from_decimal_type =
139
10
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10
                    from_precision =
141
10
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10
                    from_scale = from_decimal_type->get_scale();
143
10
                }
144
145
10
                UInt32 to_max_digits = 0;
146
10
                UInt32 to_precision = 0;
147
10
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
10
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
10
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
10
                    to_precision = to_max_digits;
163
10
                }
164
165
10
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
10
                return narrow_integral || multiply_may_overflow;
174
10
            }
175
0
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5
            using Types2 = std::decay_t<decltype(types2)>;
125
5
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5
                using FromFieldType = typename FromDataType::FieldType;
133
5
                using ToFieldType = typename ToDataType::FieldType;
134
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5
                UInt32 from_scale = 0;
136
137
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5
                    const auto* from_decimal_type =
139
5
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5
                    from_precision =
141
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5
                    from_scale = from_decimal_type->get_scale();
143
5
                }
144
145
5
                UInt32 to_max_digits = 0;
146
5
                UInt32 to_precision = 0;
147
5
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
5
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
5
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
5
                    to_precision = to_max_digits;
163
5
                }
164
165
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5
                return narrow_integral || multiply_may_overflow;
174
5
            }
175
0
            return false;
176
5
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5
            using Types2 = std::decay_t<decltype(types2)>;
125
5
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5
                using FromFieldType = typename FromDataType::FieldType;
133
5
                using ToFieldType = typename ToDataType::FieldType;
134
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5
                UInt32 from_scale = 0;
136
137
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5
                    const auto* from_decimal_type =
139
5
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5
                    from_precision =
141
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5
                    from_scale = from_decimal_type->get_scale();
143
5
                }
144
145
5
                UInt32 to_max_digits = 0;
146
5
                UInt32 to_precision = 0;
147
5
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
5
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
5
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
5
                    to_precision = to_max_digits;
163
5
                }
164
165
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5
                return narrow_integral || multiply_may_overflow;
174
5
            }
175
0
            return false;
176
5
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
939
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
939
            using Types2 = std::decay_t<decltype(types2)>;
125
939
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
939
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
939
                return false;
130
939
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
939
            return false;
176
939
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
873
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
873
            using Types2 = std::decay_t<decltype(types2)>;
125
873
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
873
            return false;
176
873
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
10
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
143
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
143
            using Types2 = std::decay_t<decltype(types2)>;
125
143
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
143
            return false;
176
143
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
261
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
261
            using Types2 = std::decay_t<decltype(types2)>;
125
261
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
261
            return false;
176
261
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
23
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
23
            using Types2 = std::decay_t<decltype(types2)>;
125
23
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
23
            return false;
176
23
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
30
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
30
            using Types2 = std::decay_t<decltype(types2)>;
125
30
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
30
            return false;
176
30
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
24
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
24
                using FromFieldType = typename FromDataType::FieldType;
133
24
                using ToFieldType = typename ToDataType::FieldType;
134
24
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
24
                UInt32 from_scale = 0;
136
137
24
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
24
                    const auto* from_decimal_type =
139
24
                            check_and_get_data_type<FromDataType>(from_type.get());
140
24
                    from_precision =
141
24
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
24
                    from_scale = from_decimal_type->get_scale();
143
24
                }
144
145
24
                UInt32 to_max_digits = 0;
146
24
                UInt32 to_precision = 0;
147
24
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
24
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
24
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
24
                    to_precision = to_max_digits;
163
24
                }
164
165
24
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
24
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
24
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
24
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
24
                return narrow_integral || multiply_may_overflow;
174
24
            }
175
0
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
72
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
320
            using Types2 = std::decay_t<decltype(types2)>;
125
320
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
320
            return false;
176
320
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
7.86k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.86k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.86k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
7.86k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
7.86k
                return false;
130
7.86k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7.86k
            return false;
176
7.86k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
142
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
142
            using Types2 = std::decay_t<decltype(types2)>;
125
142
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
142
            return false;
176
142
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
1.60k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.60k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.60k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.60k
            return false;
176
1.60k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
132
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
132
            using Types2 = std::decay_t<decltype(types2)>;
125
132
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
132
            return false;
176
132
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
100
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
100
            using Types2 = std::decay_t<decltype(types2)>;
125
100
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
100
            return false;
176
100
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
25
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
23
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
23
            using Types2 = std::decay_t<decltype(types2)>;
125
23
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
23
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
23
                using FromFieldType = typename FromDataType::FieldType;
133
23
                using ToFieldType = typename ToDataType::FieldType;
134
23
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
23
                UInt32 from_scale = 0;
136
137
23
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
23
                    const auto* from_decimal_type =
139
23
                            check_and_get_data_type<FromDataType>(from_type.get());
140
23
                    from_precision =
141
23
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
23
                    from_scale = from_decimal_type->get_scale();
143
23
                }
144
145
23
                UInt32 to_max_digits = 0;
146
23
                UInt32 to_precision = 0;
147
23
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
23
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
23
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
23
                    to_precision = to_max_digits;
163
23
                }
164
165
23
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
23
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
23
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
23
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
23
                return narrow_integral || multiply_may_overflow;
174
23
            }
175
0
            return false;
176
23
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
72
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
320
            using Types2 = std::decay_t<decltype(types2)>;
125
320
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
320
            return false;
176
320
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
2.99k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.99k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.99k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2.99k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2.99k
                return false;
130
2.99k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.99k
            return false;
176
2.99k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
46
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
46
            using Types2 = std::decay_t<decltype(types2)>;
125
46
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
46
            return false;
176
46
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
3.71k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3.71k
            using Types2 = std::decay_t<decltype(types2)>;
125
3.71k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
3.71k
            return false;
176
3.71k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
535
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
535
            using Types2 = std::decay_t<decltype(types2)>;
125
535
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
535
            return false;
176
535
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
139k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
139k
            using Types2 = std::decay_t<decltype(types2)>;
125
139k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
139k
            return false;
176
139k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
174
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
174
            using Types2 = std::decay_t<decltype(types2)>;
125
174
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
174
            return false;
176
174
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
38
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
38
            using Types2 = std::decay_t<decltype(types2)>;
125
38
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
38
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
38
                using FromFieldType = typename FromDataType::FieldType;
133
38
                using ToFieldType = typename ToDataType::FieldType;
134
38
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
38
                UInt32 from_scale = 0;
136
137
38
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
38
                    const auto* from_decimal_type =
139
38
                            check_and_get_data_type<FromDataType>(from_type.get());
140
38
                    from_precision =
141
38
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
38
                    from_scale = from_decimal_type->get_scale();
143
38
                }
144
145
38
                UInt32 to_max_digits = 0;
146
38
                UInt32 to_precision = 0;
147
38
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
38
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
38
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
38
                    to_precision = to_max_digits;
163
38
                }
164
165
38
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
38
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
38
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
38
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
38
                return narrow_integral || multiply_may_overflow;
174
38
            }
175
0
            return false;
176
38
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
250
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
250
            using Types2 = std::decay_t<decltype(types2)>;
125
250
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
250
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
250
                using FromFieldType = typename FromDataType::FieldType;
133
250
                using ToFieldType = typename ToDataType::FieldType;
134
250
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
250
                UInt32 from_scale = 0;
136
137
250
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
250
                    const auto* from_decimal_type =
139
250
                            check_and_get_data_type<FromDataType>(from_type.get());
140
250
                    from_precision =
141
250
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
250
                    from_scale = from_decimal_type->get_scale();
143
250
                }
144
145
250
                UInt32 to_max_digits = 0;
146
250
                UInt32 to_precision = 0;
147
250
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
250
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
250
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
250
                    to_precision = to_max_digits;
163
250
                }
164
165
250
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
250
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
250
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
250
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
250
                return narrow_integral || multiply_may_overflow;
174
250
            }
175
0
            return false;
176
250
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
12
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
276
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
276
            using Types2 = std::decay_t<decltype(types2)>;
125
276
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
276
            return false;
176
276
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
25.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
25.5k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
25.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
25.5k
                return false;
130
25.5k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
25.5k
            return false;
176
25.5k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
580
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
580
            using Types2 = std::decay_t<decltype(types2)>;
125
580
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
580
            return false;
176
580
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
1.40k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.40k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.40k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.40k
            return false;
176
1.40k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
684
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
684
            using Types2 = std::decay_t<decltype(types2)>;
125
684
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
684
            return false;
176
684
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
14.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
14.2k
            using Types2 = std::decay_t<decltype(types2)>;
125
14.2k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
14.2k
            return false;
176
14.2k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
312
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
312
            using Types2 = std::decay_t<decltype(types2)>;
125
312
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
312
            return false;
176
312
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
639
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
639
            using Types2 = std::decay_t<decltype(types2)>;
125
639
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
639
            return false;
176
639
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
2.34k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.34k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.34k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.34k
            return false;
176
2.34k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
312
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
312
            using Types2 = std::decay_t<decltype(types2)>;
125
312
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
312
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
312
                using FromFieldType = typename FromDataType::FieldType;
133
312
                using ToFieldType = typename ToDataType::FieldType;
134
312
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
312
                UInt32 from_scale = 0;
136
137
312
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
312
                    const auto* from_decimal_type =
139
312
                            check_and_get_data_type<FromDataType>(from_type.get());
140
312
                    from_precision =
141
312
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
312
                    from_scale = from_decimal_type->get_scale();
143
312
                }
144
145
312
                UInt32 to_max_digits = 0;
146
312
                UInt32 to_precision = 0;
147
312
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
312
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
312
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
312
                    to_precision = to_max_digits;
163
312
                }
164
165
312
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
312
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
312
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
312
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
312
                return narrow_integral || multiply_may_overflow;
174
312
            }
175
0
            return false;
176
312
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
318
            using Types2 = std::decay_t<decltype(types2)>;
125
318
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
318
                using FromFieldType = typename FromDataType::FieldType;
133
318
                using ToFieldType = typename ToDataType::FieldType;
134
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
318
                UInt32 from_scale = 0;
136
137
318
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
318
                    const auto* from_decimal_type =
139
318
                            check_and_get_data_type<FromDataType>(from_type.get());
140
318
                    from_precision =
141
318
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
318
                    from_scale = from_decimal_type->get_scale();
143
318
                }
144
145
318
                UInt32 to_max_digits = 0;
146
318
                UInt32 to_precision = 0;
147
318
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
318
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
318
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
318
                    to_precision = to_max_digits;
163
318
                }
164
165
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
318
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
318
                return narrow_integral || multiply_may_overflow;
174
318
            }
175
0
            return false;
176
318
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
304
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
304
            using Types2 = std::decay_t<decltype(types2)>;
125
304
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
304
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
304
                using FromFieldType = typename FromDataType::FieldType;
133
304
                using ToFieldType = typename ToDataType::FieldType;
134
304
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
304
                UInt32 from_scale = 0;
136
137
304
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
304
                    const auto* from_decimal_type =
139
304
                            check_and_get_data_type<FromDataType>(from_type.get());
140
304
                    from_precision =
141
304
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
304
                    from_scale = from_decimal_type->get_scale();
143
304
                }
144
145
304
                UInt32 to_max_digits = 0;
146
304
                UInt32 to_precision = 0;
147
304
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
304
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
304
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
304
                    to_precision = to_max_digits;
163
304
                }
164
165
304
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
304
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
304
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
304
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
304
                return narrow_integral || multiply_may_overflow;
174
304
            }
175
0
            return false;
176
304
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
755
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
755
            using Types2 = std::decay_t<decltype(types2)>;
125
755
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
755
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
755
                using FromFieldType = typename FromDataType::FieldType;
133
755
                using ToFieldType = typename ToDataType::FieldType;
134
755
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
755
                UInt32 from_scale = 0;
136
137
755
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
755
                    const auto* from_decimal_type =
139
755
                            check_and_get_data_type<FromDataType>(from_type.get());
140
755
                    from_precision =
141
755
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
755
                    from_scale = from_decimal_type->get_scale();
143
755
                }
144
145
755
                UInt32 to_max_digits = 0;
146
755
                UInt32 to_precision = 0;
147
755
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
755
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
755
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
755
                    to_precision = to_max_digits;
163
755
                }
164
165
755
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
755
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
755
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
755
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
755
                return narrow_integral || multiply_may_overflow;
174
755
            }
175
0
            return false;
176
755
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
1.25k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.25k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.25k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.25k
            return false;
176
1.25k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
1.26k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.26k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.26k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.26k
            return false;
176
1.26k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
4
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
26.3k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
26.3k
            using Types2 = std::decay_t<decltype(types2)>;
125
26.3k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
26.3k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
26.3k
                return false;
130
26.3k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
26.3k
            return false;
176
26.3k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
139
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
139
            using Types2 = std::decay_t<decltype(types2)>;
125
139
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
139
            return false;
176
139
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
109
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
109
            using Types2 = std::decay_t<decltype(types2)>;
125
109
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
109
            return false;
176
109
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
79
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
79
            using Types2 = std::decay_t<decltype(types2)>;
125
79
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
79
            return false;
176
79
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
135
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
135
            using Types2 = std::decay_t<decltype(types2)>;
125
135
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
135
            return false;
176
135
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
585
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
585
            using Types2 = std::decay_t<decltype(types2)>;
125
585
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
585
            return false;
176
585
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9
            using Types2 = std::decay_t<decltype(types2)>;
125
9
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
9
            return false;
176
9
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
18
            using Types2 = std::decay_t<decltype(types2)>;
125
18
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
18
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
18
                using FromFieldType = typename FromDataType::FieldType;
133
18
                using ToFieldType = typename ToDataType::FieldType;
134
18
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
18
                UInt32 from_scale = 0;
136
137
18
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
18
                    const auto* from_decimal_type =
139
18
                            check_and_get_data_type<FromDataType>(from_type.get());
140
18
                    from_precision =
141
18
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
18
                    from_scale = from_decimal_type->get_scale();
143
18
                }
144
145
18
                UInt32 to_max_digits = 0;
146
18
                UInt32 to_precision = 0;
147
18
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
18
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
18
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
18
                    to_precision = to_max_digits;
163
18
                }
164
165
18
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
18
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
18
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
18
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
18
                return narrow_integral || multiply_may_overflow;
174
18
            }
175
0
            return false;
176
18
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
783
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
783
            using Types2 = std::decay_t<decltype(types2)>;
125
783
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
783
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
783
                using FromFieldType = typename FromDataType::FieldType;
133
783
                using ToFieldType = typename ToDataType::FieldType;
134
783
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
783
                UInt32 from_scale = 0;
136
137
783
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
783
                    const auto* from_decimal_type =
139
783
                            check_and_get_data_type<FromDataType>(from_type.get());
140
783
                    from_precision =
141
783
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
783
                    from_scale = from_decimal_type->get_scale();
143
783
                }
144
145
783
                UInt32 to_max_digits = 0;
146
783
                UInt32 to_precision = 0;
147
783
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
783
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
783
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
783
                    to_precision = to_max_digits;
163
783
                }
164
165
783
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
783
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
783
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
783
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
783
                return narrow_integral || multiply_may_overflow;
174
783
            }
175
0
            return false;
176
783
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
16
            return false;
176
16
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
4
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
82.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
82.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
82.5k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
82.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
82.5k
                return false;
130
82.5k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
82.5k
            return false;
176
82.5k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
31
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
31
            using Types2 = std::decay_t<decltype(types2)>;
125
31
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
31
            return false;
176
31
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
119
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
119
            using Types2 = std::decay_t<decltype(types2)>;
125
119
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
119
            return false;
176
119
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
89
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
89
            using Types2 = std::decay_t<decltype(types2)>;
125
89
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
89
            return false;
176
89
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
119
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
119
            using Types2 = std::decay_t<decltype(types2)>;
125
119
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
119
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
119
                using FromFieldType = typename FromDataType::FieldType;
133
119
                using ToFieldType = typename ToDataType::FieldType;
134
119
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
119
                UInt32 from_scale = 0;
136
137
119
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
119
                    const auto* from_decimal_type =
139
119
                            check_and_get_data_type<FromDataType>(from_type.get());
140
119
                    from_precision =
141
119
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
119
                    from_scale = from_decimal_type->get_scale();
143
119
                }
144
145
119
                UInt32 to_max_digits = 0;
146
119
                UInt32 to_precision = 0;
147
119
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
119
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
119
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
119
                    to_precision = to_max_digits;
163
119
                }
164
165
119
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
119
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
119
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
119
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
119
                return narrow_integral || multiply_may_overflow;
174
119
            }
175
0
            return false;
176
119
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
112
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
112
            using Types2 = std::decay_t<decltype(types2)>;
125
112
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
112
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
112
                using FromFieldType = typename FromDataType::FieldType;
133
112
                using ToFieldType = typename ToDataType::FieldType;
134
112
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
112
                UInt32 from_scale = 0;
136
137
112
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
112
                    const auto* from_decimal_type =
139
112
                            check_and_get_data_type<FromDataType>(from_type.get());
140
112
                    from_precision =
141
112
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
112
                    from_scale = from_decimal_type->get_scale();
143
112
                }
144
145
112
                UInt32 to_max_digits = 0;
146
112
                UInt32 to_precision = 0;
147
112
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
112
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
112
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
112
                    to_precision = to_max_digits;
163
112
                }
164
165
112
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
112
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
112
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
112
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
112
                return narrow_integral || multiply_may_overflow;
174
112
            }
175
0
            return false;
176
112
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
16
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
16
                    const auto* from_decimal_type =
139
16
                            check_and_get_data_type<FromDataType>(from_type.get());
140
16
                    from_precision =
141
16
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
16
                    from_scale = from_decimal_type->get_scale();
143
16
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
16
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
16
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
16
                    to_precision = to_max_digits;
163
16
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
97
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
97
            using Types2 = std::decay_t<decltype(types2)>;
125
97
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
97
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
97
                using FromFieldType = typename FromDataType::FieldType;
133
97
                using ToFieldType = typename ToDataType::FieldType;
134
97
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
97
                UInt32 from_scale = 0;
136
137
97
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
97
                    const auto* from_decimal_type =
139
97
                            check_and_get_data_type<FromDataType>(from_type.get());
140
97
                    from_precision =
141
97
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
97
                    from_scale = from_decimal_type->get_scale();
143
97
                }
144
145
97
                UInt32 to_max_digits = 0;
146
97
                UInt32 to_precision = 0;
147
97
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
97
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
97
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
97
                    to_precision = to_max_digits;
163
97
                }
164
165
97
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
97
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
97
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
97
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
97
                return narrow_integral || multiply_may_overflow;
174
97
            }
175
0
            return false;
176
97
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
554
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
554
            using Types2 = std::decay_t<decltype(types2)>;
125
554
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
554
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
554
                using FromFieldType = typename FromDataType::FieldType;
133
554
                using ToFieldType = typename ToDataType::FieldType;
134
554
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
554
                UInt32 from_scale = 0;
136
137
554
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
554
                    const auto* from_decimal_type =
139
554
                            check_and_get_data_type<FromDataType>(from_type.get());
140
554
                    from_precision =
141
554
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
554
                    from_scale = from_decimal_type->get_scale();
143
554
                }
144
145
554
                UInt32 to_max_digits = 0;
146
554
                UInt32 to_precision = 0;
147
554
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
554
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
554
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
554
                    to_precision = to_max_digits;
163
554
                }
164
165
554
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
554
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
554
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
554
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
554
                return narrow_integral || multiply_may_overflow;
174
554
            }
175
0
            return false;
176
554
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
39
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
39
            using Types2 = std::decay_t<decltype(types2)>;
125
39
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
39
            return false;
176
39
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
7.78k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.78k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.78k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7.78k
            return false;
176
7.78k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
162
            using Types2 = std::decay_t<decltype(types2)>;
125
162
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
162
            return false;
176
162
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
1.82k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.82k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.82k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
1.82k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
1.82k
                return false;
130
1.82k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.82k
            return false;
176
1.82k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
306
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
306
            using Types2 = std::decay_t<decltype(types2)>;
125
306
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
306
            return false;
176
306
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
450
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
450
            using Types2 = std::decay_t<decltype(types2)>;
125
450
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
450
            return false;
176
450
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
886
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
886
            using Types2 = std::decay_t<decltype(types2)>;
125
886
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
886
            return false;
176
886
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
1.26k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.26k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.26k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.26k
            return false;
176
1.26k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
1.57k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.57k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.57k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.57k
            return false;
176
1.57k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
211
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
211
            using Types2 = std::decay_t<decltype(types2)>;
125
211
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
211
            return false;
176
211
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
2.79k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.79k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.79k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.79k
            return false;
176
2.79k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
402
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
402
            using Types2 = std::decay_t<decltype(types2)>;
125
402
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
402
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
402
                using FromFieldType = typename FromDataType::FieldType;
133
402
                using ToFieldType = typename ToDataType::FieldType;
134
402
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
402
                UInt32 from_scale = 0;
136
137
402
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
402
                    const auto* from_decimal_type =
139
402
                            check_and_get_data_type<FromDataType>(from_type.get());
140
402
                    from_precision =
141
402
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
402
                    from_scale = from_decimal_type->get_scale();
143
402
                }
144
145
402
                UInt32 to_max_digits = 0;
146
402
                UInt32 to_precision = 0;
147
402
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
402
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
402
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
402
                    to_precision = to_max_digits;
163
402
                }
164
165
402
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
402
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
402
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
402
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
402
                return narrow_integral || multiply_may_overflow;
174
402
            }
175
0
            return false;
176
402
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
358
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
358
            using Types2 = std::decay_t<decltype(types2)>;
125
358
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
358
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
358
                using FromFieldType = typename FromDataType::FieldType;
133
358
                using ToFieldType = typename ToDataType::FieldType;
134
358
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
358
                UInt32 from_scale = 0;
136
137
358
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
358
                    const auto* from_decimal_type =
139
358
                            check_and_get_data_type<FromDataType>(from_type.get());
140
358
                    from_precision =
141
358
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
358
                    from_scale = from_decimal_type->get_scale();
143
358
                }
144
145
358
                UInt32 to_max_digits = 0;
146
358
                UInt32 to_precision = 0;
147
358
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
358
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
358
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
358
                    to_precision = to_max_digits;
163
358
                }
164
165
358
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
358
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
358
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
358
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
358
                return narrow_integral || multiply_may_overflow;
174
358
            }
175
0
            return false;
176
358
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
56
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
56
            using Types2 = std::decay_t<decltype(types2)>;
125
56
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
56
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
56
                using FromFieldType = typename FromDataType::FieldType;
133
56
                using ToFieldType = typename ToDataType::FieldType;
134
56
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
56
                UInt32 from_scale = 0;
136
137
56
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
56
                    const auto* from_decimal_type =
139
56
                            check_and_get_data_type<FromDataType>(from_type.get());
140
56
                    from_precision =
141
56
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
56
                    from_scale = from_decimal_type->get_scale();
143
56
                }
144
145
56
                UInt32 to_max_digits = 0;
146
56
                UInt32 to_precision = 0;
147
56
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
56
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
56
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
56
                    to_precision = to_max_digits;
163
56
                }
164
165
56
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
56
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
56
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
56
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
56
                return narrow_integral || multiply_may_overflow;
174
56
            }
175
0
            return false;
176
56
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
782
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
782
            using Types2 = std::decay_t<decltype(types2)>;
125
782
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
782
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
782
                using FromFieldType = typename FromDataType::FieldType;
133
782
                using ToFieldType = typename ToDataType::FieldType;
134
782
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
782
                UInt32 from_scale = 0;
136
137
782
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
782
                    const auto* from_decimal_type =
139
782
                            check_and_get_data_type<FromDataType>(from_type.get());
140
782
                    from_precision =
141
782
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
782
                    from_scale = from_decimal_type->get_scale();
143
782
                }
144
145
782
                UInt32 to_max_digits = 0;
146
782
                UInt32 to_precision = 0;
147
782
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
782
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
782
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
782
                    to_precision = to_max_digits;
163
782
                }
164
165
782
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
782
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
782
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
782
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
782
                return narrow_integral || multiply_may_overflow;
174
782
            }
175
0
            return false;
176
782
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
544
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
544
            using Types2 = std::decay_t<decltype(types2)>;
125
544
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
544
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
544
                using FromFieldType = typename FromDataType::FieldType;
133
544
                using ToFieldType = typename ToDataType::FieldType;
134
544
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
544
                UInt32 from_scale = 0;
136
137
544
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
544
                    const auto* from_decimal_type =
139
544
                            check_and_get_data_type<FromDataType>(from_type.get());
140
544
                    from_precision =
141
544
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
544
                    from_scale = from_decimal_type->get_scale();
143
544
                }
144
145
544
                UInt32 to_max_digits = 0;
146
544
                UInt32 to_precision = 0;
147
544
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
544
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
544
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
544
                    to_precision = to_max_digits;
163
544
                }
164
165
544
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
544
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
544
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
544
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
544
                return narrow_integral || multiply_may_overflow;
174
544
            }
175
0
            return false;
176
544
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
89
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
89
            using Types2 = std::decay_t<decltype(types2)>;
125
89
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
89
            return false;
176
89
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
7.84k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.84k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.84k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7.84k
            return false;
176
7.84k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
162
            using Types2 = std::decay_t<decltype(types2)>;
125
162
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
162
            return false;
176
162
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
6.73k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
6.73k
            using Types2 = std::decay_t<decltype(types2)>;
125
6.73k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
6.73k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
6.73k
                return false;
130
6.73k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
6.73k
            return false;
176
6.73k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
19
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
19
            using Types2 = std::decay_t<decltype(types2)>;
125
19
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
19
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
19
                using FromFieldType = typename FromDataType::FieldType;
133
19
                using ToFieldType = typename ToDataType::FieldType;
134
19
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
19
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
19
                UInt32 to_max_digits = 0;
146
19
                UInt32 to_precision = 0;
147
19
                UInt32 to_scale = 0;
148
149
19
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
19
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
19
                    const auto* to_decimal_type =
153
19
                            check_and_get_data_type<ToDataType>(to_type.get());
154
19
                    to_precision = to_decimal_type->get_precision();
155
19
                    ToDataType::check_type_precision(to_precision);
156
157
19
                    to_scale = to_decimal_type->get_scale();
158
19
                    ToDataType::check_type_scale(to_scale);
159
19
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
19
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
19
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
19
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
19
                if (to_scale > from_scale) {
170
18
                    multiply_may_overflow &=
171
18
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
18
                }
173
19
                return narrow_integral || multiply_may_overflow;
174
19
            }
175
0
            return false;
176
19
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
469
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
469
            using Types2 = std::decay_t<decltype(types2)>;
125
469
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
469
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
469
                using FromFieldType = typename FromDataType::FieldType;
133
469
                using ToFieldType = typename ToDataType::FieldType;
134
469
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
469
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
469
                UInt32 to_max_digits = 0;
146
469
                UInt32 to_precision = 0;
147
469
                UInt32 to_scale = 0;
148
149
469
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
469
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
469
                    const auto* to_decimal_type =
153
469
                            check_and_get_data_type<ToDataType>(to_type.get());
154
469
                    to_precision = to_decimal_type->get_precision();
155
469
                    ToDataType::check_type_precision(to_precision);
156
157
469
                    to_scale = to_decimal_type->get_scale();
158
469
                    ToDataType::check_type_scale(to_scale);
159
469
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
469
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
469
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
469
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
469
                if (to_scale > from_scale) {
170
266
                    multiply_may_overflow &=
171
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
266
                }
173
469
                return narrow_integral || multiply_may_overflow;
174
469
            }
175
0
            return false;
176
469
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
501
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
501
            using Types2 = std::decay_t<decltype(types2)>;
125
501
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
501
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
501
                using FromFieldType = typename FromDataType::FieldType;
133
501
                using ToFieldType = typename ToDataType::FieldType;
134
501
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
501
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
501
                UInt32 to_max_digits = 0;
146
501
                UInt32 to_precision = 0;
147
501
                UInt32 to_scale = 0;
148
149
501
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
501
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
501
                    const auto* to_decimal_type =
153
501
                            check_and_get_data_type<ToDataType>(to_type.get());
154
501
                    to_precision = to_decimal_type->get_precision();
155
501
                    ToDataType::check_type_precision(to_precision);
156
157
501
                    to_scale = to_decimal_type->get_scale();
158
501
                    ToDataType::check_type_scale(to_scale);
159
501
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
501
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
501
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
501
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
501
                if (to_scale > from_scale) {
170
252
                    multiply_may_overflow &=
171
252
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
252
                }
173
501
                return narrow_integral || multiply_may_overflow;
174
501
            }
175
0
            return false;
176
501
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
553
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
553
            using Types2 = std::decay_t<decltype(types2)>;
125
553
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
553
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
553
                using FromFieldType = typename FromDataType::FieldType;
133
553
                using ToFieldType = typename ToDataType::FieldType;
134
553
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
553
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
553
                UInt32 to_max_digits = 0;
146
553
                UInt32 to_precision = 0;
147
553
                UInt32 to_scale = 0;
148
149
553
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
553
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
553
                    const auto* to_decimal_type =
153
553
                            check_and_get_data_type<ToDataType>(to_type.get());
154
553
                    to_precision = to_decimal_type->get_precision();
155
553
                    ToDataType::check_type_precision(to_precision);
156
157
553
                    to_scale = to_decimal_type->get_scale();
158
553
                    ToDataType::check_type_scale(to_scale);
159
553
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
553
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
553
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
553
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
553
                if (to_scale > from_scale) {
170
280
                    multiply_may_overflow &=
171
280
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
280
                }
173
553
                return narrow_integral || multiply_may_overflow;
174
553
            }
175
0
            return false;
176
553
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
612
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
612
            using Types2 = std::decay_t<decltype(types2)>;
125
612
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
612
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
612
                using FromFieldType = typename FromDataType::FieldType;
133
612
                using ToFieldType = typename ToDataType::FieldType;
134
612
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
612
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
612
                UInt32 to_max_digits = 0;
146
612
                UInt32 to_precision = 0;
147
612
                UInt32 to_scale = 0;
148
149
612
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
612
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
612
                    const auto* to_decimal_type =
153
612
                            check_and_get_data_type<ToDataType>(to_type.get());
154
612
                    to_precision = to_decimal_type->get_precision();
155
612
                    ToDataType::check_type_precision(to_precision);
156
157
612
                    to_scale = to_decimal_type->get_scale();
158
612
                    ToDataType::check_type_scale(to_scale);
159
612
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
612
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
612
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
612
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
612
                if (to_scale > from_scale) {
170
266
                    multiply_may_overflow &=
171
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
266
                }
173
612
                return narrow_integral || multiply_may_overflow;
174
612
            }
175
0
            return false;
176
612
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
549
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
549
            using Types2 = std::decay_t<decltype(types2)>;
125
549
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
549
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
549
                using FromFieldType = typename FromDataType::FieldType;
133
549
                using ToFieldType = typename ToDataType::FieldType;
134
549
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
549
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
549
                UInt32 to_max_digits = 0;
146
549
                UInt32 to_precision = 0;
147
549
                UInt32 to_scale = 0;
148
149
549
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
549
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
549
                    const auto* to_decimal_type =
153
549
                            check_and_get_data_type<ToDataType>(to_type.get());
154
549
                    to_precision = to_decimal_type->get_precision();
155
549
                    ToDataType::check_type_precision(to_precision);
156
157
549
                    to_scale = to_decimal_type->get_scale();
158
549
                    ToDataType::check_type_scale(to_scale);
159
549
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
549
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
549
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
549
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
549
                if (to_scale > from_scale) {
170
278
                    multiply_may_overflow &=
171
278
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
278
                }
173
549
                return narrow_integral || multiply_may_overflow;
174
549
            }
175
0
            return false;
176
549
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
104
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
104
            using Types2 = std::decay_t<decltype(types2)>;
125
104
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
104
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
104
                using FromFieldType = typename FromDataType::FieldType;
133
104
                using ToFieldType = typename ToDataType::FieldType;
134
104
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
104
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
104
                UInt32 to_max_digits = 0;
146
104
                UInt32 to_precision = 0;
147
104
                UInt32 to_scale = 0;
148
149
104
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
104
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
104
                    const auto* to_decimal_type =
153
104
                            check_and_get_data_type<ToDataType>(to_type.get());
154
104
                    to_precision = to_decimal_type->get_precision();
155
104
                    ToDataType::check_type_precision(to_precision);
156
157
104
                    to_scale = to_decimal_type->get_scale();
158
104
                    ToDataType::check_type_scale(to_scale);
159
104
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
104
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
104
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
104
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
104
                if (to_scale > from_scale) {
170
68
                    multiply_may_overflow &=
171
68
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
68
                }
173
104
                return narrow_integral || multiply_may_overflow;
174
104
            }
175
0
            return false;
176
104
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
310
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
310
            using Types2 = std::decay_t<decltype(types2)>;
125
310
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
310
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
310
                using FromFieldType = typename FromDataType::FieldType;
133
310
                using ToFieldType = typename ToDataType::FieldType;
134
310
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
310
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
310
                UInt32 to_max_digits = 0;
146
310
                UInt32 to_precision = 0;
147
310
                UInt32 to_scale = 0;
148
149
310
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
310
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
310
                    const auto* to_decimal_type =
153
310
                            check_and_get_data_type<ToDataType>(to_type.get());
154
310
                    to_precision = to_decimal_type->get_precision();
155
310
                    ToDataType::check_type_precision(to_precision);
156
157
310
                    to_scale = to_decimal_type->get_scale();
158
310
                    ToDataType::check_type_scale(to_scale);
159
310
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
310
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
310
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
310
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
310
                if (to_scale > from_scale) {
170
260
                    multiply_may_overflow &=
171
260
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
260
                }
173
310
                return narrow_integral || multiply_may_overflow;
174
310
            }
175
0
            return false;
176
310
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
399
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
399
            using Types2 = std::decay_t<decltype(types2)>;
125
399
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
399
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
399
                using FromFieldType = typename FromDataType::FieldType;
133
399
                using ToFieldType = typename ToDataType::FieldType;
134
399
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
399
                UInt32 from_scale = 0;
136
137
399
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
399
                    const auto* from_decimal_type =
139
399
                            check_and_get_data_type<FromDataType>(from_type.get());
140
399
                    from_precision =
141
399
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
399
                    from_scale = from_decimal_type->get_scale();
143
399
                }
144
145
399
                UInt32 to_max_digits = 0;
146
399
                UInt32 to_precision = 0;
147
399
                UInt32 to_scale = 0;
148
149
399
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
399
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
399
                    const auto* to_decimal_type =
153
399
                            check_and_get_data_type<ToDataType>(to_type.get());
154
399
                    to_precision = to_decimal_type->get_precision();
155
399
                    ToDataType::check_type_precision(to_precision);
156
157
399
                    to_scale = to_decimal_type->get_scale();
158
399
                    ToDataType::check_type_scale(to_scale);
159
399
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
399
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
399
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
399
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
399
                if (to_scale > from_scale) {
170
90
                    multiply_may_overflow &=
171
90
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
90
                }
173
399
                return narrow_integral || multiply_may_overflow;
174
399
            }
175
0
            return false;
176
399
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
620
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
620
            using Types2 = std::decay_t<decltype(types2)>;
125
620
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
620
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
620
                using FromFieldType = typename FromDataType::FieldType;
133
620
                using ToFieldType = typename ToDataType::FieldType;
134
620
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
620
                UInt32 from_scale = 0;
136
137
620
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
620
                    const auto* from_decimal_type =
139
620
                            check_and_get_data_type<FromDataType>(from_type.get());
140
620
                    from_precision =
141
620
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
620
                    from_scale = from_decimal_type->get_scale();
143
620
                }
144
145
620
                UInt32 to_max_digits = 0;
146
620
                UInt32 to_precision = 0;
147
620
                UInt32 to_scale = 0;
148
149
620
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
620
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
620
                    const auto* to_decimal_type =
153
620
                            check_and_get_data_type<ToDataType>(to_type.get());
154
620
                    to_precision = to_decimal_type->get_precision();
155
620
                    ToDataType::check_type_precision(to_precision);
156
157
620
                    to_scale = to_decimal_type->get_scale();
158
620
                    ToDataType::check_type_scale(to_scale);
159
620
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
620
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
620
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
620
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
620
                if (to_scale > from_scale) {
170
198
                    multiply_may_overflow &=
171
198
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
198
                }
173
620
                return narrow_integral || multiply_may_overflow;
174
620
            }
175
0
            return false;
176
620
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
268
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
268
            using Types2 = std::decay_t<decltype(types2)>;
125
268
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
268
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
268
                using FromFieldType = typename FromDataType::FieldType;
133
268
                using ToFieldType = typename ToDataType::FieldType;
134
268
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
268
                UInt32 from_scale = 0;
136
137
268
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
268
                    const auto* from_decimal_type =
139
268
                            check_and_get_data_type<FromDataType>(from_type.get());
140
268
                    from_precision =
141
268
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
268
                    from_scale = from_decimal_type->get_scale();
143
268
                }
144
145
268
                UInt32 to_max_digits = 0;
146
268
                UInt32 to_precision = 0;
147
268
                UInt32 to_scale = 0;
148
149
268
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
268
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
268
                    const auto* to_decimal_type =
153
268
                            check_and_get_data_type<ToDataType>(to_type.get());
154
268
                    to_precision = to_decimal_type->get_precision();
155
268
                    ToDataType::check_type_precision(to_precision);
156
157
268
                    to_scale = to_decimal_type->get_scale();
158
268
                    ToDataType::check_type_scale(to_scale);
159
268
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
268
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
268
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
268
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
268
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
268
                return narrow_integral || multiply_may_overflow;
174
268
            }
175
0
            return false;
176
268
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
4.31k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4.31k
            using Types2 = std::decay_t<decltype(types2)>;
125
4.31k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
4.31k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
4.31k
                using FromFieldType = typename FromDataType::FieldType;
133
4.31k
                using ToFieldType = typename ToDataType::FieldType;
134
4.31k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
4.31k
                UInt32 from_scale = 0;
136
137
4.31k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
4.31k
                    const auto* from_decimal_type =
139
4.31k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
4.31k
                    from_precision =
141
4.31k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
4.31k
                    from_scale = from_decimal_type->get_scale();
143
4.31k
                }
144
145
4.31k
                UInt32 to_max_digits = 0;
146
4.31k
                UInt32 to_precision = 0;
147
4.31k
                UInt32 to_scale = 0;
148
149
4.31k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
4.31k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
4.31k
                    const auto* to_decimal_type =
153
4.31k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
4.31k
                    to_precision = to_decimal_type->get_precision();
155
4.31k
                    ToDataType::check_type_precision(to_precision);
156
157
4.31k
                    to_scale = to_decimal_type->get_scale();
158
4.31k
                    ToDataType::check_type_scale(to_scale);
159
4.31k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
4.31k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
4.31k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
4.31k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
4.31k
                if (to_scale > from_scale) {
170
139
                    multiply_may_overflow &=
171
139
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
139
                }
173
4.31k
                return narrow_integral || multiply_may_overflow;
174
4.31k
            }
175
0
            return false;
176
4.31k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
303
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
303
            using Types2 = std::decay_t<decltype(types2)>;
125
303
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
303
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
303
                using FromFieldType = typename FromDataType::FieldType;
133
303
                using ToFieldType = typename ToDataType::FieldType;
134
303
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
303
                UInt32 from_scale = 0;
136
137
303
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
303
                    const auto* from_decimal_type =
139
303
                            check_and_get_data_type<FromDataType>(from_type.get());
140
303
                    from_precision =
141
303
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
303
                    from_scale = from_decimal_type->get_scale();
143
303
                }
144
145
303
                UInt32 to_max_digits = 0;
146
303
                UInt32 to_precision = 0;
147
303
                UInt32 to_scale = 0;
148
149
303
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
303
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
303
                    const auto* to_decimal_type =
153
303
                            check_and_get_data_type<ToDataType>(to_type.get());
154
303
                    to_precision = to_decimal_type->get_precision();
155
303
                    ToDataType::check_type_precision(to_precision);
156
157
303
                    to_scale = to_decimal_type->get_scale();
158
303
                    ToDataType::check_type_scale(to_scale);
159
303
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
303
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
303
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
303
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
303
                if (to_scale > from_scale) {
170
79
                    multiply_may_overflow &=
171
79
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
79
                }
173
303
                return narrow_integral || multiply_may_overflow;
174
303
            }
175
0
            return false;
176
303
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
3.05k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3.05k
            using Types2 = std::decay_t<decltype(types2)>;
125
3.05k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
3.05k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
3.05k
                return false;
130
3.05k
            }
131
3.05k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
3.05k
                using FromFieldType = typename FromDataType::FieldType;
133
3.05k
                using ToFieldType = typename ToDataType::FieldType;
134
3.05k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
3.05k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
3.05k
                UInt32 to_max_digits = 0;
146
3.05k
                UInt32 to_precision = 0;
147
3.05k
                UInt32 to_scale = 0;
148
149
3.05k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
3.05k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
3.05k
                    const auto* to_decimal_type =
153
3.05k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
3.05k
                    to_precision = to_decimal_type->get_precision();
155
3.05k
                    ToDataType::check_type_precision(to_precision);
156
157
3.05k
                    to_scale = to_decimal_type->get_scale();
158
3.05k
                    ToDataType::check_type_scale(to_scale);
159
3.05k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
3.05k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
3.05k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
3.05k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
3.05k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
3.05k
                return narrow_integral || multiply_may_overflow;
174
3.05k
            }
175
0
            return false;
176
3.05k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
17
            using Types2 = std::decay_t<decltype(types2)>;
125
17
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
17
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
17
                using FromFieldType = typename FromDataType::FieldType;
133
17
                using ToFieldType = typename ToDataType::FieldType;
134
17
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
17
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
17
                UInt32 to_max_digits = 0;
146
17
                UInt32 to_precision = 0;
147
17
                UInt32 to_scale = 0;
148
149
17
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
17
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
17
                    const auto* to_decimal_type =
153
17
                            check_and_get_data_type<ToDataType>(to_type.get());
154
17
                    to_precision = to_decimal_type->get_precision();
155
17
                    ToDataType::check_type_precision(to_precision);
156
157
17
                    to_scale = to_decimal_type->get_scale();
158
17
                    ToDataType::check_type_scale(to_scale);
159
17
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
17
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
17
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
17
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
17
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
17
                return narrow_integral || multiply_may_overflow;
174
17
            }
175
0
            return false;
176
17
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
72
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
72
                using FromFieldType = typename FromDataType::FieldType;
133
72
                using ToFieldType = typename ToDataType::FieldType;
134
72
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
72
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
72
                UInt32 to_max_digits = 0;
146
72
                UInt32 to_precision = 0;
147
72
                UInt32 to_scale = 0;
148
149
72
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
72
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
72
                    const auto* to_decimal_type =
153
72
                            check_and_get_data_type<ToDataType>(to_type.get());
154
72
                    to_precision = to_decimal_type->get_precision();
155
72
                    ToDataType::check_type_precision(to_precision);
156
157
72
                    to_scale = to_decimal_type->get_scale();
158
72
                    ToDataType::check_type_scale(to_scale);
159
72
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
72
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
72
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
72
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
72
                if (to_scale > from_scale) {
170
59
                    multiply_may_overflow &=
171
59
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
59
                }
173
72
                return narrow_integral || multiply_may_overflow;
174
72
            }
175
0
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
49
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
49
            using Types2 = std::decay_t<decltype(types2)>;
125
49
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
49
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
49
                using FromFieldType = typename FromDataType::FieldType;
133
49
                using ToFieldType = typename ToDataType::FieldType;
134
49
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
49
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
49
                UInt32 to_max_digits = 0;
146
49
                UInt32 to_precision = 0;
147
49
                UInt32 to_scale = 0;
148
149
49
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
49
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
49
                    const auto* to_decimal_type =
153
49
                            check_and_get_data_type<ToDataType>(to_type.get());
154
49
                    to_precision = to_decimal_type->get_precision();
155
49
                    ToDataType::check_type_precision(to_precision);
156
157
49
                    to_scale = to_decimal_type->get_scale();
158
49
                    ToDataType::check_type_scale(to_scale);
159
49
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
49
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
49
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
49
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
49
                if (to_scale > from_scale) {
170
38
                    multiply_may_overflow &=
171
38
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
38
                }
173
49
                return narrow_integral || multiply_may_overflow;
174
49
            }
175
0
            return false;
176
49
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
464
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
464
            using Types2 = std::decay_t<decltype(types2)>;
125
464
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
464
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
464
                using FromFieldType = typename FromDataType::FieldType;
133
464
                using ToFieldType = typename ToDataType::FieldType;
134
464
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
464
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
464
                UInt32 to_max_digits = 0;
146
464
                UInt32 to_precision = 0;
147
464
                UInt32 to_scale = 0;
148
149
464
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
464
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
464
                    const auto* to_decimal_type =
153
464
                            check_and_get_data_type<ToDataType>(to_type.get());
154
464
                    to_precision = to_decimal_type->get_precision();
155
464
                    ToDataType::check_type_precision(to_precision);
156
157
464
                    to_scale = to_decimal_type->get_scale();
158
464
                    ToDataType::check_type_scale(to_scale);
159
464
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
464
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
464
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
464
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
464
                if (to_scale > from_scale) {
170
309
                    multiply_may_overflow &=
171
309
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
309
                }
173
464
                return narrow_integral || multiply_may_overflow;
174
464
            }
175
0
            return false;
176
464
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
53
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
53
            using Types2 = std::decay_t<decltype(types2)>;
125
53
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
53
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
53
                using FromFieldType = typename FromDataType::FieldType;
133
53
                using ToFieldType = typename ToDataType::FieldType;
134
53
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
53
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
53
                UInt32 to_max_digits = 0;
146
53
                UInt32 to_precision = 0;
147
53
                UInt32 to_scale = 0;
148
149
53
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
53
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
53
                    const auto* to_decimal_type =
153
53
                            check_and_get_data_type<ToDataType>(to_type.get());
154
53
                    to_precision = to_decimal_type->get_precision();
155
53
                    ToDataType::check_type_precision(to_precision);
156
157
53
                    to_scale = to_decimal_type->get_scale();
158
53
                    ToDataType::check_type_scale(to_scale);
159
53
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
53
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
53
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
53
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
53
                if (to_scale > from_scale) {
170
32
                    multiply_may_overflow &=
171
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
32
                }
173
53
                return narrow_integral || multiply_may_overflow;
174
53
            }
175
0
            return false;
176
53
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
65
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
65
            using Types2 = std::decay_t<decltype(types2)>;
125
65
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
65
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
65
                using FromFieldType = typename FromDataType::FieldType;
133
65
                using ToFieldType = typename ToDataType::FieldType;
134
65
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
65
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
65
                UInt32 to_max_digits = 0;
146
65
                UInt32 to_precision = 0;
147
65
                UInt32 to_scale = 0;
148
149
65
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
65
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
65
                    const auto* to_decimal_type =
153
65
                            check_and_get_data_type<ToDataType>(to_type.get());
154
65
                    to_precision = to_decimal_type->get_precision();
155
65
                    ToDataType::check_type_precision(to_precision);
156
157
65
                    to_scale = to_decimal_type->get_scale();
158
65
                    ToDataType::check_type_scale(to_scale);
159
65
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
65
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
65
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
65
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
65
                if (to_scale > from_scale) {
170
39
                    multiply_may_overflow &=
171
39
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
39
                }
173
65
                return narrow_integral || multiply_may_overflow;
174
65
            }
175
0
            return false;
176
65
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
107
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
107
            using Types2 = std::decay_t<decltype(types2)>;
125
107
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
107
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
107
                using FromFieldType = typename FromDataType::FieldType;
133
107
                using ToFieldType = typename ToDataType::FieldType;
134
107
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
107
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
107
                UInt32 to_max_digits = 0;
146
107
                UInt32 to_precision = 0;
147
107
                UInt32 to_scale = 0;
148
149
107
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
107
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
107
                    const auto* to_decimal_type =
153
107
                            check_and_get_data_type<ToDataType>(to_type.get());
154
107
                    to_precision = to_decimal_type->get_precision();
155
107
                    ToDataType::check_type_precision(to_precision);
156
157
107
                    to_scale = to_decimal_type->get_scale();
158
107
                    ToDataType::check_type_scale(to_scale);
159
107
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
107
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
107
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
107
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
107
                if (to_scale > from_scale) {
170
65
                    multiply_may_overflow &=
171
65
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
65
                }
173
107
                return narrow_integral || multiply_may_overflow;
174
107
            }
175
0
            return false;
176
107
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
215
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
215
            using Types2 = std::decay_t<decltype(types2)>;
125
215
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
215
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
215
                using FromFieldType = typename FromDataType::FieldType;
133
215
                using ToFieldType = typename ToDataType::FieldType;
134
215
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
215
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
215
                UInt32 to_max_digits = 0;
146
215
                UInt32 to_precision = 0;
147
215
                UInt32 to_scale = 0;
148
149
215
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
215
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
215
                    const auto* to_decimal_type =
153
215
                            check_and_get_data_type<ToDataType>(to_type.get());
154
215
                    to_precision = to_decimal_type->get_precision();
155
215
                    ToDataType::check_type_precision(to_precision);
156
157
215
                    to_scale = to_decimal_type->get_scale();
158
215
                    ToDataType::check_type_scale(to_scale);
159
215
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
215
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
215
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
215
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
215
                if (to_scale > from_scale) {
170
182
                    multiply_may_overflow &=
171
182
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
182
                }
173
215
                return narrow_integral || multiply_may_overflow;
174
215
            }
175
0
            return false;
176
215
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
1.11k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.11k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.11k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.11k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.11k
                using FromFieldType = typename FromDataType::FieldType;
133
1.11k
                using ToFieldType = typename ToDataType::FieldType;
134
1.11k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.11k
                UInt32 from_scale = 0;
136
137
1.11k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.11k
                    const auto* from_decimal_type =
139
1.11k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.11k
                    from_precision =
141
1.11k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.11k
                    from_scale = from_decimal_type->get_scale();
143
1.11k
                }
144
145
1.11k
                UInt32 to_max_digits = 0;
146
1.11k
                UInt32 to_precision = 0;
147
1.11k
                UInt32 to_scale = 0;
148
149
1.11k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.11k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.11k
                    const auto* to_decimal_type =
153
1.11k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.11k
                    to_precision = to_decimal_type->get_precision();
155
1.11k
                    ToDataType::check_type_precision(to_precision);
156
157
1.11k
                    to_scale = to_decimal_type->get_scale();
158
1.11k
                    ToDataType::check_type_scale(to_scale);
159
1.11k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.11k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.11k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.11k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.11k
                if (to_scale > from_scale) {
170
767
                    multiply_may_overflow &=
171
767
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
767
                }
173
1.11k
                return narrow_integral || multiply_may_overflow;
174
1.11k
            }
175
0
            return false;
176
1.11k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
10.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10.0k
            using Types2 = std::decay_t<decltype(types2)>;
125
10.0k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
10.0k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10.0k
                using FromFieldType = typename FromDataType::FieldType;
133
10.0k
                using ToFieldType = typename ToDataType::FieldType;
134
10.0k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10.0k
                UInt32 from_scale = 0;
136
137
10.0k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10.0k
                    const auto* from_decimal_type =
139
10.0k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10.0k
                    from_precision =
141
10.0k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10.0k
                    from_scale = from_decimal_type->get_scale();
143
10.0k
                }
144
145
10.0k
                UInt32 to_max_digits = 0;
146
10.0k
                UInt32 to_precision = 0;
147
10.0k
                UInt32 to_scale = 0;
148
149
10.0k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
10.0k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
10.0k
                    const auto* to_decimal_type =
153
10.0k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
10.0k
                    to_precision = to_decimal_type->get_precision();
155
10.0k
                    ToDataType::check_type_precision(to_precision);
156
157
10.0k
                    to_scale = to_decimal_type->get_scale();
158
10.0k
                    ToDataType::check_type_scale(to_scale);
159
10.0k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
10.0k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10.0k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10.0k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10.0k
                if (to_scale > from_scale) {
170
158
                    multiply_may_overflow &=
171
158
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
158
                }
173
10.0k
                return narrow_integral || multiply_may_overflow;
174
10.0k
            }
175
0
            return false;
176
10.0k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
253
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
253
            using Types2 = std::decay_t<decltype(types2)>;
125
253
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
253
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
253
                using FromFieldType = typename FromDataType::FieldType;
133
253
                using ToFieldType = typename ToDataType::FieldType;
134
253
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
253
                UInt32 from_scale = 0;
136
137
253
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
253
                    const auto* from_decimal_type =
139
253
                            check_and_get_data_type<FromDataType>(from_type.get());
140
253
                    from_precision =
141
253
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
253
                    from_scale = from_decimal_type->get_scale();
143
253
                }
144
145
253
                UInt32 to_max_digits = 0;
146
253
                UInt32 to_precision = 0;
147
253
                UInt32 to_scale = 0;
148
149
253
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
253
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
253
                    const auto* to_decimal_type =
153
253
                            check_and_get_data_type<ToDataType>(to_type.get());
154
253
                    to_precision = to_decimal_type->get_precision();
155
253
                    ToDataType::check_type_precision(to_precision);
156
157
253
                    to_scale = to_decimal_type->get_scale();
158
253
                    ToDataType::check_type_scale(to_scale);
159
253
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
253
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
253
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
253
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
253
                if (to_scale > from_scale) {
170
56
                    multiply_may_overflow &=
171
56
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
56
                }
173
253
                return narrow_integral || multiply_may_overflow;
174
253
            }
175
0
            return false;
176
253
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
10.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
10.5k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
10.5k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10.5k
                using FromFieldType = typename FromDataType::FieldType;
133
10.5k
                using ToFieldType = typename ToDataType::FieldType;
134
10.5k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10.5k
                UInt32 from_scale = 0;
136
137
10.5k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10.5k
                    const auto* from_decimal_type =
139
10.5k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10.5k
                    from_precision =
141
10.5k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10.5k
                    from_scale = from_decimal_type->get_scale();
143
10.5k
                }
144
145
10.5k
                UInt32 to_max_digits = 0;
146
10.5k
                UInt32 to_precision = 0;
147
10.5k
                UInt32 to_scale = 0;
148
149
10.5k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
10.5k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
10.5k
                    const auto* to_decimal_type =
153
10.5k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
10.5k
                    to_precision = to_decimal_type->get_precision();
155
10.5k
                    ToDataType::check_type_precision(to_precision);
156
157
10.5k
                    to_scale = to_decimal_type->get_scale();
158
10.5k
                    ToDataType::check_type_scale(to_scale);
159
10.5k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
10.5k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10.5k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10.5k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10.5k
                if (to_scale > from_scale) {
170
144
                    multiply_may_overflow &=
171
144
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
144
                }
173
10.5k
                return narrow_integral || multiply_may_overflow;
174
10.5k
            }
175
0
            return false;
176
10.5k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
401
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
401
            using Types2 = std::decay_t<decltype(types2)>;
125
401
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
401
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
401
                using FromFieldType = typename FromDataType::FieldType;
133
401
                using ToFieldType = typename ToDataType::FieldType;
134
401
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
401
                UInt32 from_scale = 0;
136
137
401
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
401
                    const auto* from_decimal_type =
139
401
                            check_and_get_data_type<FromDataType>(from_type.get());
140
401
                    from_precision =
141
401
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
401
                    from_scale = from_decimal_type->get_scale();
143
401
                }
144
145
401
                UInt32 to_max_digits = 0;
146
401
                UInt32 to_precision = 0;
147
401
                UInt32 to_scale = 0;
148
149
401
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
401
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
401
                    const auto* to_decimal_type =
153
401
                            check_and_get_data_type<ToDataType>(to_type.get());
154
401
                    to_precision = to_decimal_type->get_precision();
155
401
                    ToDataType::check_type_precision(to_precision);
156
157
401
                    to_scale = to_decimal_type->get_scale();
158
401
                    ToDataType::check_type_scale(to_scale);
159
401
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
401
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
401
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
401
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
401
                if (to_scale > from_scale) {
170
137
                    multiply_may_overflow &=
171
137
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
137
                }
173
401
                return narrow_integral || multiply_may_overflow;
174
401
            }
175
0
            return false;
176
401
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
7.94k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.94k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.94k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
7.94k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
7.94k
                return false;
130
7.94k
            }
131
7.94k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
7.94k
                using FromFieldType = typename FromDataType::FieldType;
133
7.94k
                using ToFieldType = typename ToDataType::FieldType;
134
7.94k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
7.94k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
7.94k
                UInt32 to_max_digits = 0;
146
7.94k
                UInt32 to_precision = 0;
147
7.94k
                UInt32 to_scale = 0;
148
149
7.94k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
7.94k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
7.94k
                    const auto* to_decimal_type =
153
7.94k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
7.94k
                    to_precision = to_decimal_type->get_precision();
155
7.94k
                    ToDataType::check_type_precision(to_precision);
156
157
7.94k
                    to_scale = to_decimal_type->get_scale();
158
7.94k
                    ToDataType::check_type_scale(to_scale);
159
7.94k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
7.94k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
7.94k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
7.94k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
7.94k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
7.94k
                return narrow_integral || multiply_may_overflow;
174
7.94k
            }
175
0
            return false;
176
7.94k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
20
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
20
                using FromFieldType = typename FromDataType::FieldType;
133
20
                using ToFieldType = typename ToDataType::FieldType;
134
20
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
20
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
20
                UInt32 to_max_digits = 0;
146
20
                UInt32 to_precision = 0;
147
20
                UInt32 to_scale = 0;
148
149
20
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
20
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
20
                    const auto* to_decimal_type =
153
20
                            check_and_get_data_type<ToDataType>(to_type.get());
154
20
                    to_precision = to_decimal_type->get_precision();
155
20
                    ToDataType::check_type_precision(to_precision);
156
157
20
                    to_scale = to_decimal_type->get_scale();
158
20
                    ToDataType::check_type_scale(to_scale);
159
20
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
20
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
20
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
20
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
20
                if (to_scale > from_scale) {
170
20
                    multiply_may_overflow &=
171
20
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
20
                }
173
20
                return narrow_integral || multiply_may_overflow;
174
20
            }
175
0
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
16
                    const auto* to_decimal_type =
153
16
                            check_and_get_data_type<ToDataType>(to_type.get());
154
16
                    to_precision = to_decimal_type->get_precision();
155
16
                    ToDataType::check_type_precision(to_precision);
156
157
16
                    to_scale = to_decimal_type->get_scale();
158
16
                    ToDataType::check_type_scale(to_scale);
159
16
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
16
                    const auto* to_decimal_type =
153
16
                            check_and_get_data_type<ToDataType>(to_type.get());
154
16
                    to_precision = to_decimal_type->get_precision();
155
16
                    ToDataType::check_type_precision(to_precision);
156
157
16
                    to_scale = to_decimal_type->get_scale();
158
16
                    ToDataType::check_type_scale(to_scale);
159
16
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
16
                    const auto* to_decimal_type =
153
16
                            check_and_get_data_type<ToDataType>(to_type.get());
154
16
                    to_precision = to_decimal_type->get_precision();
155
16
                    ToDataType::check_type_precision(to_precision);
156
157
16
                    to_scale = to_decimal_type->get_scale();
158
16
                    ToDataType::check_type_scale(to_scale);
159
16
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
32
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
32
            using Types2 = std::decay_t<decltype(types2)>;
125
32
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
32
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
32
                using FromFieldType = typename FromDataType::FieldType;
133
32
                using ToFieldType = typename ToDataType::FieldType;
134
32
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
32
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
32
                UInt32 to_max_digits = 0;
146
32
                UInt32 to_precision = 0;
147
32
                UInt32 to_scale = 0;
148
149
32
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
32
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
32
                    const auto* to_decimal_type =
153
32
                            check_and_get_data_type<ToDataType>(to_type.get());
154
32
                    to_precision = to_decimal_type->get_precision();
155
32
                    ToDataType::check_type_precision(to_precision);
156
157
32
                    to_scale = to_decimal_type->get_scale();
158
32
                    ToDataType::check_type_scale(to_scale);
159
32
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
32
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
32
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
32
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
32
                if (to_scale > from_scale) {
170
32
                    multiply_may_overflow &=
171
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
32
                }
173
32
                return narrow_integral || multiply_may_overflow;
174
32
            }
175
0
            return false;
176
32
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
128
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
128
            using Types2 = std::decay_t<decltype(types2)>;
125
128
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
128
                using FromFieldType = typename FromDataType::FieldType;
133
128
                using ToFieldType = typename ToDataType::FieldType;
134
128
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
128
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
128
                UInt32 to_max_digits = 0;
146
128
                UInt32 to_precision = 0;
147
128
                UInt32 to_scale = 0;
148
149
128
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
128
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
128
                    const auto* to_decimal_type =
153
128
                            check_and_get_data_type<ToDataType>(to_type.get());
154
128
                    to_precision = to_decimal_type->get_precision();
155
128
                    ToDataType::check_type_precision(to_precision);
156
157
128
                    to_scale = to_decimal_type->get_scale();
158
128
                    ToDataType::check_type_scale(to_scale);
159
128
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
128
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
128
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
128
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
128
                if (to_scale > from_scale) {
170
128
                    multiply_may_overflow &=
171
128
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
128
                }
173
128
                return narrow_integral || multiply_may_overflow;
174
128
            }
175
0
            return false;
176
128
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2
                return false;
130
2
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
2
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2
                    const auto* to_decimal_type =
153
2
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2
                    to_precision = to_decimal_type->get_precision();
155
2
                    ToDataType::check_type_precision(to_precision);
156
157
2
                    to_scale = to_decimal_type->get_scale();
158
2
                    ToDataType::check_type_scale(to_scale);
159
2
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
21
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
21
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
21
                    const auto* to_decimal_type =
153
21
                            check_and_get_data_type<ToDataType>(to_type.get());
154
21
                    to_precision = to_decimal_type->get_precision();
155
21
                    ToDataType::check_type_precision(to_precision);
156
157
21
                    to_scale = to_decimal_type->get_scale();
158
21
                    ToDataType::check_type_scale(to_scale);
159
21
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
20
                    multiply_may_overflow &=
171
20
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
20
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
179
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
179
            using Types2 = std::decay_t<decltype(types2)>;
125
179
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
179
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
179
                using FromFieldType = typename FromDataType::FieldType;
133
179
                using ToFieldType = typename ToDataType::FieldType;
134
179
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
179
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
179
                UInt32 to_max_digits = 0;
146
179
                UInt32 to_precision = 0;
147
179
                UInt32 to_scale = 0;
148
149
179
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
179
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
179
                    const auto* to_decimal_type =
153
179
                            check_and_get_data_type<ToDataType>(to_type.get());
154
179
                    to_precision = to_decimal_type->get_precision();
155
179
                    ToDataType::check_type_precision(to_precision);
156
157
179
                    to_scale = to_decimal_type->get_scale();
158
179
                    ToDataType::check_type_scale(to_scale);
159
179
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
179
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
179
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
179
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
179
                if (to_scale > from_scale) {
170
128
                    multiply_may_overflow &=
171
128
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
128
                }
173
179
                return narrow_integral || multiply_may_overflow;
174
179
            }
175
0
            return false;
176
179
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
166
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
166
            using Types2 = std::decay_t<decltype(types2)>;
125
166
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
166
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
166
                using FromFieldType = typename FromDataType::FieldType;
133
166
                using ToFieldType = typename ToDataType::FieldType;
134
166
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
166
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
166
                UInt32 to_max_digits = 0;
146
166
                UInt32 to_precision = 0;
147
166
                UInt32 to_scale = 0;
148
149
166
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
166
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
166
                    const auto* to_decimal_type =
153
166
                            check_and_get_data_type<ToDataType>(to_type.get());
154
166
                    to_precision = to_decimal_type->get_precision();
155
166
                    ToDataType::check_type_precision(to_precision);
156
157
166
                    to_scale = to_decimal_type->get_scale();
158
166
                    ToDataType::check_type_scale(to_scale);
159
166
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
166
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
166
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
166
                if (to_scale > from_scale) {
170
115
                    multiply_may_overflow &=
171
115
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
115
                }
173
166
                return narrow_integral || multiply_may_overflow;
174
166
            }
175
0
            return false;
176
166
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
459
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
459
            using Types2 = std::decay_t<decltype(types2)>;
125
459
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
459
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
459
                using FromFieldType = typename FromDataType::FieldType;
133
459
                using ToFieldType = typename ToDataType::FieldType;
134
459
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
459
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
459
                UInt32 to_max_digits = 0;
146
459
                UInt32 to_precision = 0;
147
459
                UInt32 to_scale = 0;
148
149
459
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
459
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
459
                    const auto* to_decimal_type =
153
459
                            check_and_get_data_type<ToDataType>(to_type.get());
154
459
                    to_precision = to_decimal_type->get_precision();
155
459
                    ToDataType::check_type_precision(to_precision);
156
157
459
                    to_scale = to_decimal_type->get_scale();
158
459
                    ToDataType::check_type_scale(to_scale);
159
459
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
459
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
459
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
459
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
459
                if (to_scale > from_scale) {
170
402
                    multiply_may_overflow &=
171
402
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
402
                }
173
459
                return narrow_integral || multiply_may_overflow;
174
459
            }
175
0
            return false;
176
459
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
4.27k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4.27k
            using Types2 = std::decay_t<decltype(types2)>;
125
4.27k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
4.27k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
4.27k
                using FromFieldType = typename FromDataType::FieldType;
133
4.27k
                using ToFieldType = typename ToDataType::FieldType;
134
4.27k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
4.27k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
4.27k
                UInt32 to_max_digits = 0;
146
4.27k
                UInt32 to_precision = 0;
147
4.27k
                UInt32 to_scale = 0;
148
149
4.27k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
4.27k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
4.27k
                    const auto* to_decimal_type =
153
4.27k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
4.27k
                    to_precision = to_decimal_type->get_precision();
155
4.27k
                    ToDataType::check_type_precision(to_precision);
156
157
4.27k
                    to_scale = to_decimal_type->get_scale();
158
4.27k
                    ToDataType::check_type_scale(to_scale);
159
4.27k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
4.27k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
4.27k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
4.27k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
4.27k
                if (to_scale > from_scale) {
170
518
                    multiply_may_overflow &=
171
518
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
518
                }
173
4.27k
                return narrow_integral || multiply_may_overflow;
174
4.27k
            }
175
0
            return false;
176
4.27k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
365
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
365
            using Types2 = std::decay_t<decltype(types2)>;
125
365
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
365
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
365
                using FromFieldType = typename FromDataType::FieldType;
133
365
                using ToFieldType = typename ToDataType::FieldType;
134
365
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
365
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
365
                UInt32 to_max_digits = 0;
146
365
                UInt32 to_precision = 0;
147
365
                UInt32 to_scale = 0;
148
149
365
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
365
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
365
                    const auto* to_decimal_type =
153
365
                            check_and_get_data_type<ToDataType>(to_type.get());
154
365
                    to_precision = to_decimal_type->get_precision();
155
365
                    ToDataType::check_type_precision(to_precision);
156
157
365
                    to_scale = to_decimal_type->get_scale();
158
365
                    ToDataType::check_type_scale(to_scale);
159
365
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
365
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
365
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
365
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
365
                if (to_scale > from_scale) {
170
196
                    multiply_may_overflow &=
171
196
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
196
                }
173
365
                return narrow_integral || multiply_may_overflow;
174
365
            }
175
0
            return false;
176
365
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
248
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
248
            using Types2 = std::decay_t<decltype(types2)>;
125
248
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
248
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
248
                using FromFieldType = typename FromDataType::FieldType;
133
248
                using ToFieldType = typename ToDataType::FieldType;
134
248
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
248
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
248
                UInt32 to_max_digits = 0;
146
248
                UInt32 to_precision = 0;
147
248
                UInt32 to_scale = 0;
148
149
248
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
248
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
248
                    const auto* to_decimal_type =
153
248
                            check_and_get_data_type<ToDataType>(to_type.get());
154
248
                    to_precision = to_decimal_type->get_precision();
155
248
                    ToDataType::check_type_precision(to_precision);
156
157
248
                    to_scale = to_decimal_type->get_scale();
158
248
                    ToDataType::check_type_scale(to_scale);
159
248
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
248
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
248
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
248
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
248
                if (to_scale > from_scale) {
170
130
                    multiply_may_overflow &=
171
130
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
130
                }
173
248
                return narrow_integral || multiply_may_overflow;
174
248
            }
175
0
            return false;
176
248
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
492
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
492
            using Types2 = std::decay_t<decltype(types2)>;
125
492
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
492
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
492
                using FromFieldType = typename FromDataType::FieldType;
133
492
                using ToFieldType = typename ToDataType::FieldType;
134
492
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
492
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
492
                UInt32 to_max_digits = 0;
146
492
                UInt32 to_precision = 0;
147
492
                UInt32 to_scale = 0;
148
149
492
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
492
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
492
                    const auto* to_decimal_type =
153
492
                            check_and_get_data_type<ToDataType>(to_type.get());
154
492
                    to_precision = to_decimal_type->get_precision();
155
492
                    ToDataType::check_type_precision(to_precision);
156
157
492
                    to_scale = to_decimal_type->get_scale();
158
492
                    ToDataType::check_type_scale(to_scale);
159
492
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
492
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
492
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
492
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
492
                if (to_scale > from_scale) {
170
382
                    multiply_may_overflow &=
171
382
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
382
                }
173
492
                return narrow_integral || multiply_may_overflow;
174
492
            }
175
0
            return false;
176
492
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
743
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
743
            using Types2 = std::decay_t<decltype(types2)>;
125
743
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
743
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
743
                using FromFieldType = typename FromDataType::FieldType;
133
743
                using ToFieldType = typename ToDataType::FieldType;
134
743
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
743
                UInt32 from_scale = 0;
136
137
743
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
743
                    const auto* from_decimal_type =
139
743
                            check_and_get_data_type<FromDataType>(from_type.get());
140
743
                    from_precision =
141
743
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
743
                    from_scale = from_decimal_type->get_scale();
143
743
                }
144
145
743
                UInt32 to_max_digits = 0;
146
743
                UInt32 to_precision = 0;
147
743
                UInt32 to_scale = 0;
148
149
743
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
743
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
743
                    const auto* to_decimal_type =
153
743
                            check_and_get_data_type<ToDataType>(to_type.get());
154
743
                    to_precision = to_decimal_type->get_precision();
155
743
                    ToDataType::check_type_precision(to_precision);
156
157
743
                    to_scale = to_decimal_type->get_scale();
158
743
                    ToDataType::check_type_scale(to_scale);
159
743
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
743
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
743
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
743
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
743
                if (to_scale > from_scale) {
170
601
                    multiply_may_overflow &=
171
601
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
601
                }
173
743
                return narrow_integral || multiply_may_overflow;
174
743
            }
175
0
            return false;
176
743
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
1.61k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.61k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.61k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.61k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.61k
                using FromFieldType = typename FromDataType::FieldType;
133
1.61k
                using ToFieldType = typename ToDataType::FieldType;
134
1.61k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.61k
                UInt32 from_scale = 0;
136
137
1.61k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.61k
                    const auto* from_decimal_type =
139
1.61k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.61k
                    from_precision =
141
1.61k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.61k
                    from_scale = from_decimal_type->get_scale();
143
1.61k
                }
144
145
1.61k
                UInt32 to_max_digits = 0;
146
1.61k
                UInt32 to_precision = 0;
147
1.61k
                UInt32 to_scale = 0;
148
149
1.61k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.61k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.61k
                    const auto* to_decimal_type =
153
1.61k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.61k
                    to_precision = to_decimal_type->get_precision();
155
1.61k
                    ToDataType::check_type_precision(to_precision);
156
157
1.61k
                    to_scale = to_decimal_type->get_scale();
158
1.61k
                    ToDataType::check_type_scale(to_scale);
159
1.61k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.61k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.61k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.61k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.61k
                if (to_scale > from_scale) {
170
720
                    multiply_may_overflow &=
171
720
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
720
                }
173
1.61k
                return narrow_integral || multiply_may_overflow;
174
1.61k
            }
175
0
            return false;
176
1.61k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
317
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
317
            using Types2 = std::decay_t<decltype(types2)>;
125
317
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
317
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
317
                using FromFieldType = typename FromDataType::FieldType;
133
317
                using ToFieldType = typename ToDataType::FieldType;
134
317
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
317
                UInt32 from_scale = 0;
136
137
317
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
317
                    const auto* from_decimal_type =
139
317
                            check_and_get_data_type<FromDataType>(from_type.get());
140
317
                    from_precision =
141
317
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
317
                    from_scale = from_decimal_type->get_scale();
143
317
                }
144
145
317
                UInt32 to_max_digits = 0;
146
317
                UInt32 to_precision = 0;
147
317
                UInt32 to_scale = 0;
148
149
317
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
317
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
317
                    const auto* to_decimal_type =
153
317
                            check_and_get_data_type<ToDataType>(to_type.get());
154
317
                    to_precision = to_decimal_type->get_precision();
155
317
                    ToDataType::check_type_precision(to_precision);
156
157
317
                    to_scale = to_decimal_type->get_scale();
158
317
                    ToDataType::check_type_scale(to_scale);
159
317
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
317
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
317
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
317
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
317
                if (to_scale > from_scale) {
170
86
                    multiply_may_overflow &=
171
86
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
86
                }
173
317
                return narrow_integral || multiply_may_overflow;
174
317
            }
175
0
            return false;
176
317
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
2.94k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.94k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.94k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2.94k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.94k
                using FromFieldType = typename FromDataType::FieldType;
133
2.94k
                using ToFieldType = typename ToDataType::FieldType;
134
2.94k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.94k
                UInt32 from_scale = 0;
136
137
2.94k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2.94k
                    const auto* from_decimal_type =
139
2.94k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2.94k
                    from_precision =
141
2.94k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2.94k
                    from_scale = from_decimal_type->get_scale();
143
2.94k
                }
144
145
2.94k
                UInt32 to_max_digits = 0;
146
2.94k
                UInt32 to_precision = 0;
147
2.94k
                UInt32 to_scale = 0;
148
149
2.94k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.94k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.94k
                    const auto* to_decimal_type =
153
2.94k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.94k
                    to_precision = to_decimal_type->get_precision();
155
2.94k
                    ToDataType::check_type_precision(to_precision);
156
157
2.94k
                    to_scale = to_decimal_type->get_scale();
158
2.94k
                    ToDataType::check_type_scale(to_scale);
159
2.94k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2.94k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.94k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.94k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.94k
                if (to_scale > from_scale) {
170
717
                    multiply_may_overflow &=
171
717
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
717
                }
173
2.94k
                return narrow_integral || multiply_may_overflow;
174
2.94k
            }
175
0
            return false;
176
2.94k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
948
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
948
            using Types2 = std::decay_t<decltype(types2)>;
125
948
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
948
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
948
                using FromFieldType = typename FromDataType::FieldType;
133
948
                using ToFieldType = typename ToDataType::FieldType;
134
948
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
948
                UInt32 from_scale = 0;
136
137
948
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
948
                    const auto* from_decimal_type =
139
948
                            check_and_get_data_type<FromDataType>(from_type.get());
140
948
                    from_precision =
141
948
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
948
                    from_scale = from_decimal_type->get_scale();
143
948
                }
144
145
948
                UInt32 to_max_digits = 0;
146
948
                UInt32 to_precision = 0;
147
948
                UInt32 to_scale = 0;
148
149
948
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
948
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
948
                    const auto* to_decimal_type =
153
948
                            check_and_get_data_type<ToDataType>(to_type.get());
154
948
                    to_precision = to_decimal_type->get_precision();
155
948
                    ToDataType::check_type_precision(to_precision);
156
157
948
                    to_scale = to_decimal_type->get_scale();
158
948
                    ToDataType::check_type_scale(to_scale);
159
948
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
948
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
948
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
948
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
948
                if (to_scale > from_scale) {
170
394
                    multiply_may_overflow &=
171
394
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
394
                }
173
948
                return narrow_integral || multiply_may_overflow;
174
948
            }
175
0
            return false;
176
948
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
180k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
180k
            using Types2 = std::decay_t<decltype(types2)>;
125
180k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
180k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
180k
                return false;
130
180k
            }
131
180k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
180k
                using FromFieldType = typename FromDataType::FieldType;
133
180k
                using ToFieldType = typename ToDataType::FieldType;
134
180k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
180k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
180k
                UInt32 to_max_digits = 0;
146
180k
                UInt32 to_precision = 0;
147
180k
                UInt32 to_scale = 0;
148
149
180k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
180k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
180k
                    const auto* to_decimal_type =
153
180k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
180k
                    to_precision = to_decimal_type->get_precision();
155
180k
                    ToDataType::check_type_precision(to_precision);
156
157
180k
                    to_scale = to_decimal_type->get_scale();
158
180k
                    ToDataType::check_type_scale(to_scale);
159
180k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
180k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
180k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
180k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
180k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
180k
                return narrow_integral || multiply_may_overflow;
174
180k
            }
175
0
            return false;
176
180k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
7
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
7
                using FromFieldType = typename FromDataType::FieldType;
133
7
                using ToFieldType = typename ToDataType::FieldType;
134
7
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
7
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
7
                UInt32 to_max_digits = 0;
146
7
                UInt32 to_precision = 0;
147
7
                UInt32 to_scale = 0;
148
149
7
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
7
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
7
                    const auto* to_decimal_type =
153
7
                            check_and_get_data_type<ToDataType>(to_type.get());
154
7
                    to_precision = to_decimal_type->get_precision();
155
7
                    ToDataType::check_type_precision(to_precision);
156
157
7
                    to_scale = to_decimal_type->get_scale();
158
7
                    ToDataType::check_type_scale(to_scale);
159
7
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
7
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
7
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
7
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
7
                if (to_scale > from_scale) {
170
6
                    multiply_may_overflow &=
171
6
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
6
                }
173
7
                return narrow_integral || multiply_may_overflow;
174
7
            }
175
0
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
160
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
160
            using Types2 = std::decay_t<decltype(types2)>;
125
160
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
160
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
160
                using FromFieldType = typename FromDataType::FieldType;
133
160
                using ToFieldType = typename ToDataType::FieldType;
134
160
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
160
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
160
                UInt32 to_max_digits = 0;
146
160
                UInt32 to_precision = 0;
147
160
                UInt32 to_scale = 0;
148
149
160
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
160
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
160
                    const auto* to_decimal_type =
153
160
                            check_and_get_data_type<ToDataType>(to_type.get());
154
160
                    to_precision = to_decimal_type->get_precision();
155
160
                    ToDataType::check_type_precision(to_precision);
156
157
160
                    to_scale = to_decimal_type->get_scale();
158
160
                    ToDataType::check_type_scale(to_scale);
159
160
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
160
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
160
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
160
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
160
                if (to_scale > from_scale) {
170
109
                    multiply_may_overflow &=
171
109
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
109
                }
173
160
                return narrow_integral || multiply_may_overflow;
174
160
            }
175
0
            return false;
176
160
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
158
            using Types2 = std::decay_t<decltype(types2)>;
125
158
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
158
                using FromFieldType = typename FromDataType::FieldType;
133
158
                using ToFieldType = typename ToDataType::FieldType;
134
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
158
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
158
                UInt32 to_max_digits = 0;
146
158
                UInt32 to_precision = 0;
147
158
                UInt32 to_scale = 0;
148
149
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
158
                    const auto* to_decimal_type =
153
158
                            check_and_get_data_type<ToDataType>(to_type.get());
154
158
                    to_precision = to_decimal_type->get_precision();
155
158
                    ToDataType::check_type_precision(to_precision);
156
157
158
                    to_scale = to_decimal_type->get_scale();
158
158
                    ToDataType::check_type_scale(to_scale);
159
158
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
158
                if (to_scale > from_scale) {
170
107
                    multiply_may_overflow &=
171
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
107
                }
173
158
                return narrow_integral || multiply_may_overflow;
174
158
            }
175
0
            return false;
176
158
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
176
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
176
            using Types2 = std::decay_t<decltype(types2)>;
125
176
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
176
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
176
                using FromFieldType = typename FromDataType::FieldType;
133
176
                using ToFieldType = typename ToDataType::FieldType;
134
176
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
176
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
176
                UInt32 to_max_digits = 0;
146
176
                UInt32 to_precision = 0;
147
176
                UInt32 to_scale = 0;
148
149
176
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
176
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
176
                    const auto* to_decimal_type =
153
176
                            check_and_get_data_type<ToDataType>(to_type.get());
154
176
                    to_precision = to_decimal_type->get_precision();
155
176
                    ToDataType::check_type_precision(to_precision);
156
157
176
                    to_scale = to_decimal_type->get_scale();
158
176
                    ToDataType::check_type_scale(to_scale);
159
176
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
176
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
176
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
176
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
176
                if (to_scale > from_scale) {
170
120
                    multiply_may_overflow &=
171
120
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
120
                }
173
176
                return narrow_integral || multiply_may_overflow;
174
176
            }
175
0
            return false;
176
176
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
158
            using Types2 = std::decay_t<decltype(types2)>;
125
158
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
158
                using FromFieldType = typename FromDataType::FieldType;
133
158
                using ToFieldType = typename ToDataType::FieldType;
134
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
158
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
158
                UInt32 to_max_digits = 0;
146
158
                UInt32 to_precision = 0;
147
158
                UInt32 to_scale = 0;
148
149
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
158
                    const auto* to_decimal_type =
153
158
                            check_and_get_data_type<ToDataType>(to_type.get());
154
158
                    to_precision = to_decimal_type->get_precision();
155
158
                    ToDataType::check_type_precision(to_precision);
156
157
158
                    to_scale = to_decimal_type->get_scale();
158
158
                    ToDataType::check_type_scale(to_scale);
159
158
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
158
                if (to_scale > from_scale) {
170
107
                    multiply_may_overflow &=
171
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
107
                }
173
158
                return narrow_integral || multiply_may_overflow;
174
158
            }
175
0
            return false;
176
158
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
232
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
232
            using Types2 = std::decay_t<decltype(types2)>;
125
232
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
232
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
232
                using FromFieldType = typename FromDataType::FieldType;
133
232
                using ToFieldType = typename ToDataType::FieldType;
134
232
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
232
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
232
                UInt32 to_max_digits = 0;
146
232
                UInt32 to_precision = 0;
147
232
                UInt32 to_scale = 0;
148
149
232
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
232
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
232
                    const auto* to_decimal_type =
153
232
                            check_and_get_data_type<ToDataType>(to_type.get());
154
232
                    to_precision = to_decimal_type->get_precision();
155
232
                    ToDataType::check_type_precision(to_precision);
156
157
232
                    to_scale = to_decimal_type->get_scale();
158
232
                    ToDataType::check_type_scale(to_scale);
159
232
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
232
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
232
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
232
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
232
                if (to_scale > from_scale) {
170
170
                    multiply_may_overflow &=
171
170
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
170
                }
173
232
                return narrow_integral || multiply_may_overflow;
174
232
            }
175
0
            return false;
176
232
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
224
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
224
            using Types2 = std::decay_t<decltype(types2)>;
125
224
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
224
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
224
                using FromFieldType = typename FromDataType::FieldType;
133
224
                using ToFieldType = typename ToDataType::FieldType;
134
224
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
224
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
224
                UInt32 to_max_digits = 0;
146
224
                UInt32 to_precision = 0;
147
224
                UInt32 to_scale = 0;
148
149
224
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
224
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
224
                    const auto* to_decimal_type =
153
224
                            check_and_get_data_type<ToDataType>(to_type.get());
154
224
                    to_precision = to_decimal_type->get_precision();
155
224
                    ToDataType::check_type_precision(to_precision);
156
157
224
                    to_scale = to_decimal_type->get_scale();
158
224
                    ToDataType::check_type_scale(to_scale);
159
224
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
224
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
224
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
224
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
224
                if (to_scale > from_scale) {
170
126
                    multiply_may_overflow &=
171
126
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
126
                }
173
224
                return narrow_integral || multiply_may_overflow;
174
224
            }
175
0
            return false;
176
224
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
318
            using Types2 = std::decay_t<decltype(types2)>;
125
318
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
318
                using FromFieldType = typename FromDataType::FieldType;
133
318
                using ToFieldType = typename ToDataType::FieldType;
134
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
318
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
318
                UInt32 to_max_digits = 0;
146
318
                UInt32 to_precision = 0;
147
318
                UInt32 to_scale = 0;
148
149
318
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
318
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
318
                    const auto* to_decimal_type =
153
318
                            check_and_get_data_type<ToDataType>(to_type.get());
154
318
                    to_precision = to_decimal_type->get_precision();
155
318
                    ToDataType::check_type_precision(to_precision);
156
157
318
                    to_scale = to_decimal_type->get_scale();
158
318
                    ToDataType::check_type_scale(to_scale);
159
318
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
318
                if (to_scale > from_scale) {
170
208
                    multiply_may_overflow &=
171
208
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
208
                }
173
318
                return narrow_integral || multiply_may_overflow;
174
318
            }
175
0
            return false;
176
318
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
567
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
567
            using Types2 = std::decay_t<decltype(types2)>;
125
567
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
567
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
567
                using FromFieldType = typename FromDataType::FieldType;
133
567
                using ToFieldType = typename ToDataType::FieldType;
134
567
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
567
                UInt32 from_scale = 0;
136
137
567
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
567
                    const auto* from_decimal_type =
139
567
                            check_and_get_data_type<FromDataType>(from_type.get());
140
567
                    from_precision =
141
567
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
567
                    from_scale = from_decimal_type->get_scale();
143
567
                }
144
145
567
                UInt32 to_max_digits = 0;
146
567
                UInt32 to_precision = 0;
147
567
                UInt32 to_scale = 0;
148
149
567
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
567
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
567
                    const auto* to_decimal_type =
153
567
                            check_and_get_data_type<ToDataType>(to_type.get());
154
567
                    to_precision = to_decimal_type->get_precision();
155
567
                    ToDataType::check_type_precision(to_precision);
156
157
567
                    to_scale = to_decimal_type->get_scale();
158
567
                    ToDataType::check_type_scale(to_scale);
159
567
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
567
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
567
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
567
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
567
                if (to_scale > from_scale) {
170
499
                    multiply_may_overflow &=
171
499
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
499
                }
173
567
                return narrow_integral || multiply_may_overflow;
174
567
            }
175
0
            return false;
176
567
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
919
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
919
            using Types2 = std::decay_t<decltype(types2)>;
125
919
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
919
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
919
                using FromFieldType = typename FromDataType::FieldType;
133
919
                using ToFieldType = typename ToDataType::FieldType;
134
919
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
919
                UInt32 from_scale = 0;
136
137
919
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
919
                    const auto* from_decimal_type =
139
919
                            check_and_get_data_type<FromDataType>(from_type.get());
140
919
                    from_precision =
141
919
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
919
                    from_scale = from_decimal_type->get_scale();
143
919
                }
144
145
919
                UInt32 to_max_digits = 0;
146
919
                UInt32 to_precision = 0;
147
919
                UInt32 to_scale = 0;
148
149
919
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
919
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
919
                    const auto* to_decimal_type =
153
919
                            check_and_get_data_type<ToDataType>(to_type.get());
154
919
                    to_precision = to_decimal_type->get_precision();
155
919
                    ToDataType::check_type_precision(to_precision);
156
157
919
                    to_scale = to_decimal_type->get_scale();
158
919
                    ToDataType::check_type_scale(to_scale);
159
919
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
919
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
919
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
919
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
919
                if (to_scale > from_scale) {
170
792
                    multiply_may_overflow &=
171
792
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
792
                }
173
919
                return narrow_integral || multiply_may_overflow;
174
919
            }
175
0
            return false;
176
919
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
167
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
167
            using Types2 = std::decay_t<decltype(types2)>;
125
167
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
167
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
167
                using FromFieldType = typename FromDataType::FieldType;
133
167
                using ToFieldType = typename ToDataType::FieldType;
134
167
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
167
                UInt32 from_scale = 0;
136
137
167
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
167
                    const auto* from_decimal_type =
139
167
                            check_and_get_data_type<FromDataType>(from_type.get());
140
167
                    from_precision =
141
167
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
167
                    from_scale = from_decimal_type->get_scale();
143
167
                }
144
145
167
                UInt32 to_max_digits = 0;
146
167
                UInt32 to_precision = 0;
147
167
                UInt32 to_scale = 0;
148
149
167
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
167
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
167
                    const auto* to_decimal_type =
153
167
                            check_and_get_data_type<ToDataType>(to_type.get());
154
167
                    to_precision = to_decimal_type->get_precision();
155
167
                    ToDataType::check_type_precision(to_precision);
156
157
167
                    to_scale = to_decimal_type->get_scale();
158
167
                    ToDataType::check_type_scale(to_scale);
159
167
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
167
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
167
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
167
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
167
                if (to_scale > from_scale) {
170
90
                    multiply_may_overflow &=
171
90
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
90
                }
173
167
                return narrow_integral || multiply_may_overflow;
174
167
            }
175
0
            return false;
176
167
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
1.20k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.20k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.20k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.20k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.20k
                using FromFieldType = typename FromDataType::FieldType;
133
1.20k
                using ToFieldType = typename ToDataType::FieldType;
134
1.20k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.20k
                UInt32 from_scale = 0;
136
137
1.20k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.20k
                    const auto* from_decimal_type =
139
1.20k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.20k
                    from_precision =
141
1.20k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.20k
                    from_scale = from_decimal_type->get_scale();
143
1.20k
                }
144
145
1.20k
                UInt32 to_max_digits = 0;
146
1.20k
                UInt32 to_precision = 0;
147
1.20k
                UInt32 to_scale = 0;
148
149
1.20k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.20k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.20k
                    const auto* to_decimal_type =
153
1.20k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.20k
                    to_precision = to_decimal_type->get_precision();
155
1.20k
                    ToDataType::check_type_precision(to_precision);
156
157
1.20k
                    to_scale = to_decimal_type->get_scale();
158
1.20k
                    ToDataType::check_type_scale(to_scale);
159
1.20k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.20k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.20k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.20k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.20k
                if (to_scale > from_scale) {
170
739
                    multiply_may_overflow &=
171
739
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
739
                }
173
1.20k
                return narrow_integral || multiply_may_overflow;
174
1.20k
            }
175
0
            return false;
176
1.20k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
926
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
926
            using Types2 = std::decay_t<decltype(types2)>;
125
926
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
926
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
926
                using FromFieldType = typename FromDataType::FieldType;
133
926
                using ToFieldType = typename ToDataType::FieldType;
134
926
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
926
                UInt32 from_scale = 0;
136
137
926
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
926
                    const auto* from_decimal_type =
139
926
                            check_and_get_data_type<FromDataType>(from_type.get());
140
926
                    from_precision =
141
926
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
926
                    from_scale = from_decimal_type->get_scale();
143
926
                }
144
145
926
                UInt32 to_max_digits = 0;
146
926
                UInt32 to_precision = 0;
147
926
                UInt32 to_scale = 0;
148
149
926
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
926
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
926
                    const auto* to_decimal_type =
153
926
                            check_and_get_data_type<ToDataType>(to_type.get());
154
926
                    to_precision = to_decimal_type->get_precision();
155
926
                    ToDataType::check_type_precision(to_precision);
156
157
926
                    to_scale = to_decimal_type->get_scale();
158
926
                    ToDataType::check_type_scale(to_scale);
159
926
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
926
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
926
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
926
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
926
                if (to_scale > from_scale) {
170
453
                    multiply_may_overflow &=
171
453
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
453
                }
173
926
                return narrow_integral || multiply_may_overflow;
174
926
            }
175
0
            return false;
176
926
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
5.67k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.67k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.67k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
5.67k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
5.67k
                return false;
130
5.67k
            }
131
5.67k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.67k
                using FromFieldType = typename FromDataType::FieldType;
133
5.67k
                using ToFieldType = typename ToDataType::FieldType;
134
5.67k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.67k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
5.67k
                UInt32 to_max_digits = 0;
146
5.67k
                UInt32 to_precision = 0;
147
5.67k
                UInt32 to_scale = 0;
148
149
5.67k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.67k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.67k
                    const auto* to_decimal_type =
153
5.67k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.67k
                    to_precision = to_decimal_type->get_precision();
155
5.67k
                    ToDataType::check_type_precision(to_precision);
156
157
5.67k
                    to_scale = to_decimal_type->get_scale();
158
5.67k
                    ToDataType::check_type_scale(to_scale);
159
5.67k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5.67k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.67k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.67k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.67k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5.67k
                return narrow_integral || multiply_may_overflow;
174
5.67k
            }
175
0
            return false;
176
5.67k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1
            return false;
176
1
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3
            using Types2 = std::decay_t<decltype(types2)>;
125
3
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
3
            return false;
176
3
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
46
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
46
            using Types2 = std::decay_t<decltype(types2)>;
125
46
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
46
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
46
                return false;
130
46
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
46
            return false;
176
46
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Line
Count
Source
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
10
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Line
Count
Source
123
206
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
206
            using Types2 = std::decay_t<decltype(types2)>;
125
206
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
206
            return false;
176
206
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Line
Count
Source
123
202
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
202
            using Types2 = std::decay_t<decltype(types2)>;
125
202
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
202
            return false;
176
202
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
176k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
176k
            using Types2 = std::decay_t<decltype(types2)>;
125
176k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
176k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
176k
                return false;
130
176k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
176k
            return false;
176
176k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
33
            using Types2 = std::decay_t<decltype(types2)>;
125
33
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
33
            return false;
176
33
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
12
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
12
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
12
                using FromFieldType = typename FromDataType::FieldType;
133
12
                using ToFieldType = typename ToDataType::FieldType;
134
12
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
12
                UInt32 from_scale = 0;
136
137
12
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
12
                    const auto* from_decimal_type =
139
12
                            check_and_get_data_type<FromDataType>(from_type.get());
140
12
                    from_precision =
141
12
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
12
                    from_scale = from_decimal_type->get_scale();
143
12
                }
144
145
12
                UInt32 to_max_digits = 0;
146
12
                UInt32 to_precision = 0;
147
12
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
12
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
12
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
12
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
12
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
12
                return narrow_integral || multiply_may_overflow;
174
12
            }
175
0
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
4
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
4
                using FromFieldType = typename FromDataType::FieldType;
133
4
                using ToFieldType = typename ToDataType::FieldType;
134
4
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
4
                UInt32 from_scale = 0;
136
137
4
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
4
                    const auto* from_decimal_type =
139
4
                            check_and_get_data_type<FromDataType>(from_type.get());
140
4
                    from_precision =
141
4
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
4
                    from_scale = from_decimal_type->get_scale();
143
4
                }
144
145
4
                UInt32 to_max_digits = 0;
146
4
                UInt32 to_precision = 0;
147
4
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
4
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
4
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
4
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
4
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
4
                return narrow_integral || multiply_may_overflow;
174
4
            }
175
0
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Line
Count
Source
123
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5
            using Types2 = std::decay_t<decltype(types2)>;
125
5
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5
                using FromFieldType = typename FromDataType::FieldType;
133
5
                using ToFieldType = typename ToDataType::FieldType;
134
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5
                UInt32 from_scale = 0;
136
137
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5
                    const auto* from_decimal_type =
139
5
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5
                    from_precision =
141
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5
                    from_scale = from_decimal_type->get_scale();
143
5
                }
144
145
5
                UInt32 to_max_digits = 0;
146
5
                UInt32 to_precision = 0;
147
5
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5
                return narrow_integral || multiply_may_overflow;
174
5
            }
175
0
            return false;
176
5
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Line
Count
Source
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
10
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Line
Count
Source
123
363
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
363
            using Types2 = std::decay_t<decltype(types2)>;
125
363
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
363
            return false;
176
363
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Line
Count
Source
123
548
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
548
            using Types2 = std::decay_t<decltype(types2)>;
125
548
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
548
            return false;
176
548
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
52
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
52
            using Types2 = std::decay_t<decltype(types2)>;
125
52
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
52
            return false;
176
52
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Line
Count
Source
123
6
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
6
            using Types2 = std::decay_t<decltype(types2)>;
125
6
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
6
            return false;
176
6
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Line
Count
Source
123
43
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
43
            using Types2 = std::decay_t<decltype(types2)>;
125
43
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
43
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
43
                return false;
130
43
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
43
            return false;
176
43
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
180k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
180k
            using Types2 = std::decay_t<decltype(types2)>;
125
180k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
180k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
180k
                return false;
130
180k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
180k
            return false;
176
180k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
34
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
34
            using Types2 = std::decay_t<decltype(types2)>;
125
34
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
34
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
34
                return false;
130
34
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
34
            return false;
176
34
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Line
Count
Source
123
32
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
32
            using Types2 = std::decay_t<decltype(types2)>;
125
32
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
32
            return false;
176
32
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Line
Count
Source
123
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
33
            using Types2 = std::decay_t<decltype(types2)>;
125
33
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
33
            return false;
176
33
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9
            using Types2 = std::decay_t<decltype(types2)>;
125
9
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
9
            return false;
176
9
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Line
Count
Source
123
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3
            using Types2 = std::decay_t<decltype(types2)>;
125
3
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
3
            return false;
176
3
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
18
            using Types2 = std::decay_t<decltype(types2)>;
125
18
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
18
            return false;
176
18
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1
                using FromFieldType = typename FromDataType::FieldType;
133
1
                using ToFieldType = typename ToDataType::FieldType;
134
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1
                UInt32 from_scale = 0;
136
137
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1
                    const auto* from_decimal_type =
139
1
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1
                    from_precision =
141
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1
                    from_scale = from_decimal_type->get_scale();
143
1
                }
144
145
1
                UInt32 to_max_digits = 0;
146
1
                UInt32 to_precision = 0;
147
1
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
1
                    to_precision = to_max_digits;
163
1
                }
164
165
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
1
                return narrow_integral || multiply_may_overflow;
174
1
            }
175
0
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1
                using FromFieldType = typename FromDataType::FieldType;
133
1
                using ToFieldType = typename ToDataType::FieldType;
134
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1
                UInt32 from_scale = 0;
136
137
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1
                    const auto* from_decimal_type =
139
1
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1
                    from_precision =
141
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1
                    from_scale = from_decimal_type->get_scale();
143
1
                }
144
145
1
                UInt32 to_max_digits = 0;
146
1
                UInt32 to_precision = 0;
147
1
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
1
                    to_precision = to_max_digits;
163
1
                }
164
165
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
1
                return narrow_integral || multiply_may_overflow;
174
1
            }
175
0
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Line
Count
Source
123
11
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
11
            using Types2 = std::decay_t<decltype(types2)>;
125
11
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
11
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
11
                using FromFieldType = typename FromDataType::FieldType;
133
11
                using ToFieldType = typename ToDataType::FieldType;
134
11
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
11
                UInt32 from_scale = 0;
136
137
11
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
11
                    const auto* from_decimal_type =
139
11
                            check_and_get_data_type<FromDataType>(from_type.get());
140
11
                    from_precision =
141
11
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
11
                    from_scale = from_decimal_type->get_scale();
143
11
                }
144
145
11
                UInt32 to_max_digits = 0;
146
11
                UInt32 to_precision = 0;
147
11
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
11
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
11
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
11
                    to_precision = to_max_digits;
163
11
                }
164
165
11
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
11
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
11
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
11
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
11
                return narrow_integral || multiply_may_overflow;
174
11
            }
175
0
            return false;
176
11
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21
            return false;
176
21
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
301
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
301
            using Types2 = std::decay_t<decltype(types2)>;
125
301
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
301
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
301
                return false;
130
301
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
301
            return false;
176
301
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
177
1.36M
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_
Line
Count
Source
113
2.61k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
2.61k
        using Types = std::decay_t<decltype(types)>;
115
2.61k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
2.61k
        return call_on_index_and_data_type<
123
2.61k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.61k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.61k
            using FromDataType = typename Types2::LeftType;
126
2.61k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
2.61k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2.61k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2.61k
                return false;
130
2.61k
            }
131
2.61k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.61k
                using FromFieldType = typename FromDataType::FieldType;
133
2.61k
                using ToFieldType = typename ToDataType::FieldType;
134
2.61k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.61k
                UInt32 from_scale = 0;
136
137
2.61k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2.61k
                    const auto* from_decimal_type =
139
2.61k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2.61k
                    from_precision =
141
2.61k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2.61k
                    from_scale = from_decimal_type->get_scale();
143
2.61k
                }
144
145
2.61k
                UInt32 to_max_digits = 0;
146
2.61k
                UInt32 to_precision = 0;
147
2.61k
                UInt32 to_scale = 0;
148
149
2.61k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.61k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.61k
                    const auto* to_decimal_type =
153
2.61k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.61k
                    to_precision = to_decimal_type->get_precision();
155
2.61k
                    ToDataType::check_type_precision(to_precision);
156
157
2.61k
                    to_scale = to_decimal_type->get_scale();
158
2.61k
                    ToDataType::check_type_scale(to_scale);
159
2.61k
                }
160
2.61k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2.61k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2.61k
                    to_precision = to_max_digits;
163
2.61k
                }
164
165
2.61k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.61k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.61k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.61k
                if (to_scale > from_scale) {
170
2.61k
                    multiply_may_overflow &=
171
2.61k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
2.61k
                }
173
2.61k
                return narrow_integral || multiply_may_overflow;
174
2.61k
            }
175
2.61k
            return false;
176
2.61k
        });
177
2.61k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_
Line
Count
Source
113
9.81k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
9.81k
        using Types = std::decay_t<decltype(types)>;
115
9.81k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
9.81k
        return call_on_index_and_data_type<
123
9.81k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9.81k
            using Types2 = std::decay_t<decltype(types2)>;
125
9.81k
            using FromDataType = typename Types2::LeftType;
126
9.81k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
9.81k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
9.81k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
9.81k
                return false;
130
9.81k
            }
131
9.81k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
9.81k
                using FromFieldType = typename FromDataType::FieldType;
133
9.81k
                using ToFieldType = typename ToDataType::FieldType;
134
9.81k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
9.81k
                UInt32 from_scale = 0;
136
137
9.81k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
9.81k
                    const auto* from_decimal_type =
139
9.81k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
9.81k
                    from_precision =
141
9.81k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
9.81k
                    from_scale = from_decimal_type->get_scale();
143
9.81k
                }
144
145
9.81k
                UInt32 to_max_digits = 0;
146
9.81k
                UInt32 to_precision = 0;
147
9.81k
                UInt32 to_scale = 0;
148
149
9.81k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
9.81k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
9.81k
                    const auto* to_decimal_type =
153
9.81k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
9.81k
                    to_precision = to_decimal_type->get_precision();
155
9.81k
                    ToDataType::check_type_precision(to_precision);
156
157
9.81k
                    to_scale = to_decimal_type->get_scale();
158
9.81k
                    ToDataType::check_type_scale(to_scale);
159
9.81k
                }
160
9.81k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
9.81k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
9.81k
                    to_precision = to_max_digits;
163
9.81k
                }
164
165
9.81k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
9.81k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
9.81k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
9.81k
                if (to_scale > from_scale) {
170
9.81k
                    multiply_may_overflow &=
171
9.81k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
9.81k
                }
173
9.81k
                return narrow_integral || multiply_may_overflow;
174
9.81k
            }
175
9.81k
            return false;
176
9.81k
        });
177
9.81k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_
Line
Count
Source
113
5.72k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
5.72k
        using Types = std::decay_t<decltype(types)>;
115
5.72k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
5.72k
        return call_on_index_and_data_type<
123
5.72k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.72k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.72k
            using FromDataType = typename Types2::LeftType;
126
5.72k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
5.72k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
5.72k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
5.72k
                return false;
130
5.72k
            }
131
5.72k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.72k
                using FromFieldType = typename FromDataType::FieldType;
133
5.72k
                using ToFieldType = typename ToDataType::FieldType;
134
5.72k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.72k
                UInt32 from_scale = 0;
136
137
5.72k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5.72k
                    const auto* from_decimal_type =
139
5.72k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5.72k
                    from_precision =
141
5.72k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5.72k
                    from_scale = from_decimal_type->get_scale();
143
5.72k
                }
144
145
5.72k
                UInt32 to_max_digits = 0;
146
5.72k
                UInt32 to_precision = 0;
147
5.72k
                UInt32 to_scale = 0;
148
149
5.72k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.72k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.72k
                    const auto* to_decimal_type =
153
5.72k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.72k
                    to_precision = to_decimal_type->get_precision();
155
5.72k
                    ToDataType::check_type_precision(to_precision);
156
157
5.72k
                    to_scale = to_decimal_type->get_scale();
158
5.72k
                    ToDataType::check_type_scale(to_scale);
159
5.72k
                }
160
5.72k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
5.72k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
5.72k
                    to_precision = to_max_digits;
163
5.72k
                }
164
165
5.72k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.72k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.72k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.72k
                if (to_scale > from_scale) {
170
5.72k
                    multiply_may_overflow &=
171
5.72k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
5.72k
                }
173
5.72k
                return narrow_integral || multiply_may_overflow;
174
5.72k
            }
175
5.72k
            return false;
176
5.72k
        });
177
5.72k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_
Line
Count
Source
113
179k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
179k
        using Types = std::decay_t<decltype(types)>;
115
179k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
179k
        return call_on_index_and_data_type<
123
179k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
179k
            using Types2 = std::decay_t<decltype(types2)>;
125
179k
            using FromDataType = typename Types2::LeftType;
126
179k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
179k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
179k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
179k
                return false;
130
179k
            }
131
179k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
179k
                using FromFieldType = typename FromDataType::FieldType;
133
179k
                using ToFieldType = typename ToDataType::FieldType;
134
179k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
179k
                UInt32 from_scale = 0;
136
137
179k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
179k
                    const auto* from_decimal_type =
139
179k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
179k
                    from_precision =
141
179k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
179k
                    from_scale = from_decimal_type->get_scale();
143
179k
                }
144
145
179k
                UInt32 to_max_digits = 0;
146
179k
                UInt32 to_precision = 0;
147
179k
                UInt32 to_scale = 0;
148
149
179k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
179k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
179k
                    const auto* to_decimal_type =
153
179k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
179k
                    to_precision = to_decimal_type->get_precision();
155
179k
                    ToDataType::check_type_precision(to_precision);
156
157
179k
                    to_scale = to_decimal_type->get_scale();
158
179k
                    ToDataType::check_type_scale(to_scale);
159
179k
                }
160
179k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
179k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
179k
                    to_precision = to_max_digits;
163
179k
                }
164
165
179k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
179k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
179k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
179k
                if (to_scale > from_scale) {
170
179k
                    multiply_may_overflow &=
171
179k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
179k
                }
173
179k
                return narrow_integral || multiply_may_overflow;
174
179k
            }
175
179k
            return false;
176
179k
        });
177
179k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_
Line
Count
Source
113
53.0k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
53.0k
        using Types = std::decay_t<decltype(types)>;
115
53.0k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
53.0k
        return call_on_index_and_data_type<
123
53.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
53.0k
            using Types2 = std::decay_t<decltype(types2)>;
125
53.0k
            using FromDataType = typename Types2::LeftType;
126
53.0k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
53.0k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
53.0k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
53.0k
                return false;
130
53.0k
            }
131
53.0k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
53.0k
                using FromFieldType = typename FromDataType::FieldType;
133
53.0k
                using ToFieldType = typename ToDataType::FieldType;
134
53.0k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
53.0k
                UInt32 from_scale = 0;
136
137
53.0k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
53.0k
                    const auto* from_decimal_type =
139
53.0k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
53.0k
                    from_precision =
141
53.0k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
53.0k
                    from_scale = from_decimal_type->get_scale();
143
53.0k
                }
144
145
53.0k
                UInt32 to_max_digits = 0;
146
53.0k
                UInt32 to_precision = 0;
147
53.0k
                UInt32 to_scale = 0;
148
149
53.0k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
53.0k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
53.0k
                    const auto* to_decimal_type =
153
53.0k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
53.0k
                    to_precision = to_decimal_type->get_precision();
155
53.0k
                    ToDataType::check_type_precision(to_precision);
156
157
53.0k
                    to_scale = to_decimal_type->get_scale();
158
53.0k
                    ToDataType::check_type_scale(to_scale);
159
53.0k
                }
160
53.0k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
53.0k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
53.0k
                    to_precision = to_max_digits;
163
53.0k
                }
164
165
53.0k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
53.0k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
53.0k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
53.0k
                if (to_scale > from_scale) {
170
53.0k
                    multiply_may_overflow &=
171
53.0k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
53.0k
                }
173
53.0k
                return narrow_integral || multiply_may_overflow;
174
53.0k
            }
175
53.0k
            return false;
176
53.0k
        });
177
53.0k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_
Line
Count
Source
113
85.5k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
85.5k
        using Types = std::decay_t<decltype(types)>;
115
85.5k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
85.5k
        return call_on_index_and_data_type<
123
85.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
85.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
85.5k
            using FromDataType = typename Types2::LeftType;
126
85.5k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
85.5k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
85.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
85.5k
                return false;
130
85.5k
            }
131
85.5k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
85.5k
                using FromFieldType = typename FromDataType::FieldType;
133
85.5k
                using ToFieldType = typename ToDataType::FieldType;
134
85.5k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
85.5k
                UInt32 from_scale = 0;
136
137
85.5k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
85.5k
                    const auto* from_decimal_type =
139
85.5k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
85.5k
                    from_precision =
141
85.5k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
85.5k
                    from_scale = from_decimal_type->get_scale();
143
85.5k
                }
144
145
85.5k
                UInt32 to_max_digits = 0;
146
85.5k
                UInt32 to_precision = 0;
147
85.5k
                UInt32 to_scale = 0;
148
149
85.5k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
85.5k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
85.5k
                    const auto* to_decimal_type =
153
85.5k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
85.5k
                    to_precision = to_decimal_type->get_precision();
155
85.5k
                    ToDataType::check_type_precision(to_precision);
156
157
85.5k
                    to_scale = to_decimal_type->get_scale();
158
85.5k
                    ToDataType::check_type_scale(to_scale);
159
85.5k
                }
160
85.5k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
85.5k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
85.5k
                    to_precision = to_max_digits;
163
85.5k
                }
164
165
85.5k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
85.5k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
85.5k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
85.5k
                if (to_scale > from_scale) {
170
85.5k
                    multiply_may_overflow &=
171
85.5k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
85.5k
                }
173
85.5k
                return narrow_integral || multiply_may_overflow;
174
85.5k
            }
175
85.5k
            return false;
176
85.5k
        });
177
85.5k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_
Line
Count
Source
113
11.0k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
11.0k
        using Types = std::decay_t<decltype(types)>;
115
11.0k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
11.0k
        return call_on_index_and_data_type<
123
11.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
11.0k
            using Types2 = std::decay_t<decltype(types2)>;
125
11.0k
            using FromDataType = typename Types2::LeftType;
126
11.0k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
11.0k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
11.0k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
11.0k
                return false;
130
11.0k
            }
131
11.0k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
11.0k
                using FromFieldType = typename FromDataType::FieldType;
133
11.0k
                using ToFieldType = typename ToDataType::FieldType;
134
11.0k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
11.0k
                UInt32 from_scale = 0;
136
137
11.0k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
11.0k
                    const auto* from_decimal_type =
139
11.0k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
11.0k
                    from_precision =
141
11.0k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
11.0k
                    from_scale = from_decimal_type->get_scale();
143
11.0k
                }
144
145
11.0k
                UInt32 to_max_digits = 0;
146
11.0k
                UInt32 to_precision = 0;
147
11.0k
                UInt32 to_scale = 0;
148
149
11.0k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
11.0k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
11.0k
                    const auto* to_decimal_type =
153
11.0k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
11.0k
                    to_precision = to_decimal_type->get_precision();
155
11.0k
                    ToDataType::check_type_precision(to_precision);
156
157
11.0k
                    to_scale = to_decimal_type->get_scale();
158
11.0k
                    ToDataType::check_type_scale(to_scale);
159
11.0k
                }
160
11.0k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
11.0k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
11.0k
                    to_precision = to_max_digits;
163
11.0k
                }
164
165
11.0k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
11.0k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
11.0k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
11.0k
                if (to_scale > from_scale) {
170
11.0k
                    multiply_may_overflow &=
171
11.0k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
11.0k
                }
173
11.0k
                return narrow_integral || multiply_may_overflow;
174
11.0k
            }
175
11.0k
            return false;
176
11.0k
        });
177
11.0k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_
Line
Count
Source
113
28.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
28.9k
        using Types = std::decay_t<decltype(types)>;
115
28.9k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
28.9k
        return call_on_index_and_data_type<
123
28.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
28.9k
            using Types2 = std::decay_t<decltype(types2)>;
125
28.9k
            using FromDataType = typename Types2::LeftType;
126
28.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
28.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
28.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
28.9k
                return false;
130
28.9k
            }
131
28.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
28.9k
                using FromFieldType = typename FromDataType::FieldType;
133
28.9k
                using ToFieldType = typename ToDataType::FieldType;
134
28.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
28.9k
                UInt32 from_scale = 0;
136
137
28.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
28.9k
                    const auto* from_decimal_type =
139
28.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
28.9k
                    from_precision =
141
28.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
28.9k
                    from_scale = from_decimal_type->get_scale();
143
28.9k
                }
144
145
28.9k
                UInt32 to_max_digits = 0;
146
28.9k
                UInt32 to_precision = 0;
147
28.9k
                UInt32 to_scale = 0;
148
149
28.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
28.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
28.9k
                    const auto* to_decimal_type =
153
28.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
28.9k
                    to_precision = to_decimal_type->get_precision();
155
28.9k
                    ToDataType::check_type_precision(to_precision);
156
157
28.9k
                    to_scale = to_decimal_type->get_scale();
158
28.9k
                    ToDataType::check_type_scale(to_scale);
159
28.9k
                }
160
28.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
28.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
28.9k
                    to_precision = to_max_digits;
163
28.9k
                }
164
165
28.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
28.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
28.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
28.9k
                if (to_scale > from_scale) {
170
28.9k
                    multiply_may_overflow &=
171
28.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
28.9k
                }
173
28.9k
                return narrow_integral || multiply_may_overflow;
174
28.9k
            }
175
28.9k
            return false;
176
28.9k
        });
177
28.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_
Line
Count
Source
113
12.0k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
12.0k
        using Types = std::decay_t<decltype(types)>;
115
12.0k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
12.0k
        return call_on_index_and_data_type<
123
12.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12.0k
            using Types2 = std::decay_t<decltype(types2)>;
125
12.0k
            using FromDataType = typename Types2::LeftType;
126
12.0k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
12.0k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
12.0k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
12.0k
                return false;
130
12.0k
            }
131
12.0k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
12.0k
                using FromFieldType = typename FromDataType::FieldType;
133
12.0k
                using ToFieldType = typename ToDataType::FieldType;
134
12.0k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
12.0k
                UInt32 from_scale = 0;
136
137
12.0k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
12.0k
                    const auto* from_decimal_type =
139
12.0k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
12.0k
                    from_precision =
141
12.0k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
12.0k
                    from_scale = from_decimal_type->get_scale();
143
12.0k
                }
144
145
12.0k
                UInt32 to_max_digits = 0;
146
12.0k
                UInt32 to_precision = 0;
147
12.0k
                UInt32 to_scale = 0;
148
149
12.0k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
12.0k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
12.0k
                    const auto* to_decimal_type =
153
12.0k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
12.0k
                    to_precision = to_decimal_type->get_precision();
155
12.0k
                    ToDataType::check_type_precision(to_precision);
156
157
12.0k
                    to_scale = to_decimal_type->get_scale();
158
12.0k
                    ToDataType::check_type_scale(to_scale);
159
12.0k
                }
160
12.0k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
12.0k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
12.0k
                    to_precision = to_max_digits;
163
12.0k
                }
164
165
12.0k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
12.0k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
12.0k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
12.0k
                if (to_scale > from_scale) {
170
12.0k
                    multiply_may_overflow &=
171
12.0k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
12.0k
                }
173
12.0k
                return narrow_integral || multiply_may_overflow;
174
12.0k
            }
175
12.0k
            return false;
176
12.0k
        });
177
12.0k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_
Line
Count
Source
113
31.4k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
31.4k
        using Types = std::decay_t<decltype(types)>;
115
31.4k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
31.4k
        return call_on_index_and_data_type<
123
31.4k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
31.4k
            using Types2 = std::decay_t<decltype(types2)>;
125
31.4k
            using FromDataType = typename Types2::LeftType;
126
31.4k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
31.4k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
31.4k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
31.4k
                return false;
130
31.4k
            }
131
31.4k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
31.4k
                using FromFieldType = typename FromDataType::FieldType;
133
31.4k
                using ToFieldType = typename ToDataType::FieldType;
134
31.4k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
31.4k
                UInt32 from_scale = 0;
136
137
31.4k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
31.4k
                    const auto* from_decimal_type =
139
31.4k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
31.4k
                    from_precision =
141
31.4k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
31.4k
                    from_scale = from_decimal_type->get_scale();
143
31.4k
                }
144
145
31.4k
                UInt32 to_max_digits = 0;
146
31.4k
                UInt32 to_precision = 0;
147
31.4k
                UInt32 to_scale = 0;
148
149
31.4k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
31.4k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
31.4k
                    const auto* to_decimal_type =
153
31.4k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
31.4k
                    to_precision = to_decimal_type->get_precision();
155
31.4k
                    ToDataType::check_type_precision(to_precision);
156
157
31.4k
                    to_scale = to_decimal_type->get_scale();
158
31.4k
                    ToDataType::check_type_scale(to_scale);
159
31.4k
                }
160
31.4k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
31.4k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
31.4k
                    to_precision = to_max_digits;
163
31.4k
                }
164
165
31.4k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
31.4k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
31.4k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
31.4k
                if (to_scale > from_scale) {
170
31.4k
                    multiply_may_overflow &=
171
31.4k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
31.4k
                }
173
31.4k
                return narrow_integral || multiply_may_overflow;
174
31.4k
            }
175
31.4k
            return false;
176
31.4k
        });
177
31.4k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_
Line
Count
Source
113
230
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
230
        using Types = std::decay_t<decltype(types)>;
115
230
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
230
        return call_on_index_and_data_type<
123
230
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
230
            using Types2 = std::decay_t<decltype(types2)>;
125
230
            using FromDataType = typename Types2::LeftType;
126
230
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
230
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
230
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
230
                return false;
130
230
            }
131
230
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
230
                using FromFieldType = typename FromDataType::FieldType;
133
230
                using ToFieldType = typename ToDataType::FieldType;
134
230
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
230
                UInt32 from_scale = 0;
136
137
230
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
230
                    const auto* from_decimal_type =
139
230
                            check_and_get_data_type<FromDataType>(from_type.get());
140
230
                    from_precision =
141
230
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
230
                    from_scale = from_decimal_type->get_scale();
143
230
                }
144
145
230
                UInt32 to_max_digits = 0;
146
230
                UInt32 to_precision = 0;
147
230
                UInt32 to_scale = 0;
148
149
230
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
230
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
230
                    const auto* to_decimal_type =
153
230
                            check_and_get_data_type<ToDataType>(to_type.get());
154
230
                    to_precision = to_decimal_type->get_precision();
155
230
                    ToDataType::check_type_precision(to_precision);
156
157
230
                    to_scale = to_decimal_type->get_scale();
158
230
                    ToDataType::check_type_scale(to_scale);
159
230
                }
160
230
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
230
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
230
                    to_precision = to_max_digits;
163
230
                }
164
165
230
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
230
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
230
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
230
                if (to_scale > from_scale) {
170
230
                    multiply_may_overflow &=
171
230
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
230
                }
173
230
                return narrow_integral || multiply_may_overflow;
174
230
            }
175
230
            return false;
176
230
        });
177
230
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_
Line
Count
Source
113
193k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
193k
        using Types = std::decay_t<decltype(types)>;
115
193k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
193k
        return call_on_index_and_data_type<
123
193k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
193k
            using Types2 = std::decay_t<decltype(types2)>;
125
193k
            using FromDataType = typename Types2::LeftType;
126
193k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
193k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
193k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
193k
                return false;
130
193k
            }
131
193k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
193k
                using FromFieldType = typename FromDataType::FieldType;
133
193k
                using ToFieldType = typename ToDataType::FieldType;
134
193k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
193k
                UInt32 from_scale = 0;
136
137
193k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
193k
                    const auto* from_decimal_type =
139
193k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
193k
                    from_precision =
141
193k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
193k
                    from_scale = from_decimal_type->get_scale();
143
193k
                }
144
145
193k
                UInt32 to_max_digits = 0;
146
193k
                UInt32 to_precision = 0;
147
193k
                UInt32 to_scale = 0;
148
149
193k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
193k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
193k
                    const auto* to_decimal_type =
153
193k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
193k
                    to_precision = to_decimal_type->get_precision();
155
193k
                    ToDataType::check_type_precision(to_precision);
156
157
193k
                    to_scale = to_decimal_type->get_scale();
158
193k
                    ToDataType::check_type_scale(to_scale);
159
193k
                }
160
193k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
193k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
193k
                    to_precision = to_max_digits;
163
193k
                }
164
165
193k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
193k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
193k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
193k
                if (to_scale > from_scale) {
170
193k
                    multiply_may_overflow &=
171
193k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
193k
                }
173
193k
                return narrow_integral || multiply_may_overflow;
174
193k
            }
175
193k
            return false;
176
193k
        });
177
193k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_
Line
Count
Source
113
10.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
10.9k
        using Types = std::decay_t<decltype(types)>;
115
10.9k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
10.9k
        return call_on_index_and_data_type<
123
10.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10.9k
            using Types2 = std::decay_t<decltype(types2)>;
125
10.9k
            using FromDataType = typename Types2::LeftType;
126
10.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
10.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
10.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
10.9k
                return false;
130
10.9k
            }
131
10.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10.9k
                using FromFieldType = typename FromDataType::FieldType;
133
10.9k
                using ToFieldType = typename ToDataType::FieldType;
134
10.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10.9k
                UInt32 from_scale = 0;
136
137
10.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10.9k
                    const auto* from_decimal_type =
139
10.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10.9k
                    from_precision =
141
10.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10.9k
                    from_scale = from_decimal_type->get_scale();
143
10.9k
                }
144
145
10.9k
                UInt32 to_max_digits = 0;
146
10.9k
                UInt32 to_precision = 0;
147
10.9k
                UInt32 to_scale = 0;
148
149
10.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
10.9k
                    const auto* to_decimal_type =
153
10.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
10.9k
                    to_precision = to_decimal_type->get_precision();
155
10.9k
                    ToDataType::check_type_precision(to_precision);
156
157
10.9k
                    to_scale = to_decimal_type->get_scale();
158
10.9k
                    ToDataType::check_type_scale(to_scale);
159
10.9k
                }
160
10.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
10.9k
                    to_precision = to_max_digits;
163
10.9k
                }
164
165
10.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10.9k
                if (to_scale > from_scale) {
170
10.9k
                    multiply_may_overflow &=
171
10.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
10.9k
                }
173
10.9k
                return narrow_integral || multiply_may_overflow;
174
10.9k
            }
175
10.9k
            return false;
176
10.9k
        });
177
10.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_
Line
Count
Source
113
50
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
50
        using Types = std::decay_t<decltype(types)>;
115
50
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
50
        return call_on_index_and_data_type<
123
50
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
50
            using Types2 = std::decay_t<decltype(types2)>;
125
50
            using FromDataType = typename Types2::LeftType;
126
50
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
50
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
50
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
50
                return false;
130
50
            }
131
50
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
50
                using FromFieldType = typename FromDataType::FieldType;
133
50
                using ToFieldType = typename ToDataType::FieldType;
134
50
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
50
                UInt32 from_scale = 0;
136
137
50
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
50
                    const auto* from_decimal_type =
139
50
                            check_and_get_data_type<FromDataType>(from_type.get());
140
50
                    from_precision =
141
50
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
50
                    from_scale = from_decimal_type->get_scale();
143
50
                }
144
145
50
                UInt32 to_max_digits = 0;
146
50
                UInt32 to_precision = 0;
147
50
                UInt32 to_scale = 0;
148
149
50
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
50
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
50
                    const auto* to_decimal_type =
153
50
                            check_and_get_data_type<ToDataType>(to_type.get());
154
50
                    to_precision = to_decimal_type->get_precision();
155
50
                    ToDataType::check_type_precision(to_precision);
156
157
50
                    to_scale = to_decimal_type->get_scale();
158
50
                    ToDataType::check_type_scale(to_scale);
159
50
                }
160
50
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
50
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
50
                    to_precision = to_max_digits;
163
50
                }
164
165
50
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
50
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
50
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
50
                if (to_scale > from_scale) {
170
50
                    multiply_may_overflow &=
171
50
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
50
                }
173
50
                return narrow_integral || multiply_may_overflow;
174
50
            }
175
50
            return false;
176
50
        });
177
50
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_
Line
Count
Source
113
177k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
177k
        using Types = std::decay_t<decltype(types)>;
115
177k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
177k
        return call_on_index_and_data_type<
123
177k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
177k
            using Types2 = std::decay_t<decltype(types2)>;
125
177k
            using FromDataType = typename Types2::LeftType;
126
177k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
177k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
177k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
177k
                return false;
130
177k
            }
131
177k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
177k
                using FromFieldType = typename FromDataType::FieldType;
133
177k
                using ToFieldType = typename ToDataType::FieldType;
134
177k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
177k
                UInt32 from_scale = 0;
136
137
177k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
177k
                    const auto* from_decimal_type =
139
177k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
177k
                    from_precision =
141
177k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
177k
                    from_scale = from_decimal_type->get_scale();
143
177k
                }
144
145
177k
                UInt32 to_max_digits = 0;
146
177k
                UInt32 to_precision = 0;
147
177k
                UInt32 to_scale = 0;
148
149
177k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
177k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
177k
                    const auto* to_decimal_type =
153
177k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
177k
                    to_precision = to_decimal_type->get_precision();
155
177k
                    ToDataType::check_type_precision(to_precision);
156
157
177k
                    to_scale = to_decimal_type->get_scale();
158
177k
                    ToDataType::check_type_scale(to_scale);
159
177k
                }
160
177k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
177k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
177k
                    to_precision = to_max_digits;
163
177k
                }
164
165
177k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
177k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
177k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
177k
                if (to_scale > from_scale) {
170
177k
                    multiply_may_overflow &=
171
177k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
177k
                }
173
177k
                return narrow_integral || multiply_may_overflow;
174
177k
            }
175
177k
            return false;
176
177k
        });
177
177k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_
Line
Count
Source
113
181k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
181k
        using Types = std::decay_t<decltype(types)>;
115
181k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
181k
        return call_on_index_and_data_type<
123
181k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
181k
            using Types2 = std::decay_t<decltype(types2)>;
125
181k
            using FromDataType = typename Types2::LeftType;
126
181k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
181k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
181k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
181k
                return false;
130
181k
            }
131
181k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
181k
                using FromFieldType = typename FromDataType::FieldType;
133
181k
                using ToFieldType = typename ToDataType::FieldType;
134
181k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
181k
                UInt32 from_scale = 0;
136
137
181k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
181k
                    const auto* from_decimal_type =
139
181k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
181k
                    from_precision =
141
181k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
181k
                    from_scale = from_decimal_type->get_scale();
143
181k
                }
144
145
181k
                UInt32 to_max_digits = 0;
146
181k
                UInt32 to_precision = 0;
147
181k
                UInt32 to_scale = 0;
148
149
181k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
181k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
181k
                    const auto* to_decimal_type =
153
181k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
181k
                    to_precision = to_decimal_type->get_precision();
155
181k
                    ToDataType::check_type_precision(to_precision);
156
157
181k
                    to_scale = to_decimal_type->get_scale();
158
181k
                    ToDataType::check_type_scale(to_scale);
159
181k
                }
160
181k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
181k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
181k
                    to_precision = to_max_digits;
163
181k
                }
164
165
181k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
181k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
181k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
181k
                if (to_scale > from_scale) {
170
181k
                    multiply_may_overflow &=
171
181k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
181k
                }
173
181k
                return narrow_integral || multiply_may_overflow;
174
181k
            }
175
181k
            return false;
176
181k
        });
177
181k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_
Line
Count
Source
113
36
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
36
        using Types = std::decay_t<decltype(types)>;
115
36
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
36
        return call_on_index_and_data_type<
123
36
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
36
            using Types2 = std::decay_t<decltype(types2)>;
125
36
            using FromDataType = typename Types2::LeftType;
126
36
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
36
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
36
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
36
                return false;
130
36
            }
131
36
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
36
                using FromFieldType = typename FromDataType::FieldType;
133
36
                using ToFieldType = typename ToDataType::FieldType;
134
36
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
36
                UInt32 from_scale = 0;
136
137
36
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
36
                    const auto* from_decimal_type =
139
36
                            check_and_get_data_type<FromDataType>(from_type.get());
140
36
                    from_precision =
141
36
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
36
                    from_scale = from_decimal_type->get_scale();
143
36
                }
144
145
36
                UInt32 to_max_digits = 0;
146
36
                UInt32 to_precision = 0;
147
36
                UInt32 to_scale = 0;
148
149
36
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
36
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
36
                    const auto* to_decimal_type =
153
36
                            check_and_get_data_type<ToDataType>(to_type.get());
154
36
                    to_precision = to_decimal_type->get_precision();
155
36
                    ToDataType::check_type_precision(to_precision);
156
157
36
                    to_scale = to_decimal_type->get_scale();
158
36
                    ToDataType::check_type_scale(to_scale);
159
36
                }
160
36
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
36
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
36
                    to_precision = to_max_digits;
163
36
                }
164
165
36
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
36
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
36
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
36
                if (to_scale > from_scale) {
170
36
                    multiply_may_overflow &=
171
36
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
36
                }
173
36
                return narrow_integral || multiply_may_overflow;
174
36
            }
175
36
            return false;
176
36
        });
177
36
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_
Line
Count
Source
113
468
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
468
        using Types = std::decay_t<decltype(types)>;
115
468
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
468
        return call_on_index_and_data_type<
123
468
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
468
            using Types2 = std::decay_t<decltype(types2)>;
125
468
            using FromDataType = typename Types2::LeftType;
126
468
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
468
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
468
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
468
                return false;
130
468
            }
131
468
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
468
                using FromFieldType = typename FromDataType::FieldType;
133
468
                using ToFieldType = typename ToDataType::FieldType;
134
468
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
468
                UInt32 from_scale = 0;
136
137
468
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
468
                    const auto* from_decimal_type =
139
468
                            check_and_get_data_type<FromDataType>(from_type.get());
140
468
                    from_precision =
141
468
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
468
                    from_scale = from_decimal_type->get_scale();
143
468
                }
144
145
468
                UInt32 to_max_digits = 0;
146
468
                UInt32 to_precision = 0;
147
468
                UInt32 to_scale = 0;
148
149
468
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
468
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
468
                    const auto* to_decimal_type =
153
468
                            check_and_get_data_type<ToDataType>(to_type.get());
154
468
                    to_precision = to_decimal_type->get_precision();
155
468
                    ToDataType::check_type_precision(to_precision);
156
157
468
                    to_scale = to_decimal_type->get_scale();
158
468
                    ToDataType::check_type_scale(to_scale);
159
468
                }
160
468
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
468
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
468
                    to_precision = to_max_digits;
163
468
                }
164
165
468
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
468
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
468
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
468
                if (to_scale > from_scale) {
170
468
                    multiply_may_overflow &=
171
468
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
468
                }
173
468
                return narrow_integral || multiply_may_overflow;
174
468
            }
175
468
            return false;
176
468
        });
177
468
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_
Line
Count
Source
113
590
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
590
        using Types = std::decay_t<decltype(types)>;
115
590
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
590
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
590
            return false;
121
590
        }
122
0
        return call_on_index_and_data_type<
123
590
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
590
            using Types2 = std::decay_t<decltype(types2)>;
125
590
            using FromDataType = typename Types2::LeftType;
126
590
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
590
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
590
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
590
                return false;
130
590
            }
131
590
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
590
                using FromFieldType = typename FromDataType::FieldType;
133
590
                using ToFieldType = typename ToDataType::FieldType;
134
590
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
590
                UInt32 from_scale = 0;
136
137
590
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
590
                    const auto* from_decimal_type =
139
590
                            check_and_get_data_type<FromDataType>(from_type.get());
140
590
                    from_precision =
141
590
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
590
                    from_scale = from_decimal_type->get_scale();
143
590
                }
144
145
590
                UInt32 to_max_digits = 0;
146
590
                UInt32 to_precision = 0;
147
590
                UInt32 to_scale = 0;
148
149
590
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
590
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
590
                    const auto* to_decimal_type =
153
590
                            check_and_get_data_type<ToDataType>(to_type.get());
154
590
                    to_precision = to_decimal_type->get_precision();
155
590
                    ToDataType::check_type_precision(to_precision);
156
157
590
                    to_scale = to_decimal_type->get_scale();
158
590
                    ToDataType::check_type_scale(to_scale);
159
590
                }
160
590
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
590
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
590
                    to_precision = to_max_digits;
163
590
                }
164
165
590
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
590
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
590
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
590
                if (to_scale > from_scale) {
170
590
                    multiply_may_overflow &=
171
590
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
590
                }
173
590
                return narrow_integral || multiply_may_overflow;
174
590
            }
175
590
            return false;
176
590
        });
177
590
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_
Line
Count
Source
113
90.5k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
90.5k
        using Types = std::decay_t<decltype(types)>;
115
90.5k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
90.5k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
90.5k
            return false;
121
90.5k
        }
122
0
        return call_on_index_and_data_type<
123
90.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
90.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
90.5k
            using FromDataType = typename Types2::LeftType;
126
90.5k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
90.5k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
90.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
90.5k
                return false;
130
90.5k
            }
131
90.5k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
90.5k
                using FromFieldType = typename FromDataType::FieldType;
133
90.5k
                using ToFieldType = typename ToDataType::FieldType;
134
90.5k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
90.5k
                UInt32 from_scale = 0;
136
137
90.5k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
90.5k
                    const auto* from_decimal_type =
139
90.5k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
90.5k
                    from_precision =
141
90.5k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
90.5k
                    from_scale = from_decimal_type->get_scale();
143
90.5k
                }
144
145
90.5k
                UInt32 to_max_digits = 0;
146
90.5k
                UInt32 to_precision = 0;
147
90.5k
                UInt32 to_scale = 0;
148
149
90.5k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
90.5k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
90.5k
                    const auto* to_decimal_type =
153
90.5k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
90.5k
                    to_precision = to_decimal_type->get_precision();
155
90.5k
                    ToDataType::check_type_precision(to_precision);
156
157
90.5k
                    to_scale = to_decimal_type->get_scale();
158
90.5k
                    ToDataType::check_type_scale(to_scale);
159
90.5k
                }
160
90.5k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
90.5k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
90.5k
                    to_precision = to_max_digits;
163
90.5k
                }
164
165
90.5k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
90.5k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
90.5k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
90.5k
                if (to_scale > from_scale) {
170
90.5k
                    multiply_may_overflow &=
171
90.5k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
90.5k
                }
173
90.5k
                return narrow_integral || multiply_may_overflow;
174
90.5k
            }
175
90.5k
            return false;
176
90.5k
        });
177
90.5k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_
Line
Count
Source
113
165k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
165k
        using Types = std::decay_t<decltype(types)>;
115
165k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
165k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
165k
            return false;
121
165k
        }
122
0
        return call_on_index_and_data_type<
123
165k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
165k
            using Types2 = std::decay_t<decltype(types2)>;
125
165k
            using FromDataType = typename Types2::LeftType;
126
165k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
165k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
165k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
165k
                return false;
130
165k
            }
131
165k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
165k
                using FromFieldType = typename FromDataType::FieldType;
133
165k
                using ToFieldType = typename ToDataType::FieldType;
134
165k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
165k
                UInt32 from_scale = 0;
136
137
165k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
165k
                    const auto* from_decimal_type =
139
165k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
165k
                    from_precision =
141
165k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
165k
                    from_scale = from_decimal_type->get_scale();
143
165k
                }
144
145
165k
                UInt32 to_max_digits = 0;
146
165k
                UInt32 to_precision = 0;
147
165k
                UInt32 to_scale = 0;
148
149
165k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
165k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
165k
                    const auto* to_decimal_type =
153
165k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
165k
                    to_precision = to_decimal_type->get_precision();
155
165k
                    ToDataType::check_type_precision(to_precision);
156
157
165k
                    to_scale = to_decimal_type->get_scale();
158
165k
                    ToDataType::check_type_scale(to_scale);
159
165k
                }
160
165k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
165k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
165k
                    to_precision = to_max_digits;
163
165k
                }
164
165
165k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
165k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
165k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
165k
                if (to_scale > from_scale) {
170
165k
                    multiply_may_overflow &=
171
165k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
165k
                }
173
165k
                return narrow_integral || multiply_may_overflow;
174
165k
            }
175
165k
            return false;
176
165k
        });
177
165k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_
Line
Count
Source
113
127k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
127k
        using Types = std::decay_t<decltype(types)>;
115
127k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
127k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
127k
            return false;
121
127k
        }
122
0
        return call_on_index_and_data_type<
123
127k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
127k
            using Types2 = std::decay_t<decltype(types2)>;
125
127k
            using FromDataType = typename Types2::LeftType;
126
127k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
127k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
127k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
127k
                return false;
130
127k
            }
131
127k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
127k
                using FromFieldType = typename FromDataType::FieldType;
133
127k
                using ToFieldType = typename ToDataType::FieldType;
134
127k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
127k
                UInt32 from_scale = 0;
136
137
127k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
127k
                    const auto* from_decimal_type =
139
127k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
127k
                    from_precision =
141
127k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
127k
                    from_scale = from_decimal_type->get_scale();
143
127k
                }
144
145
127k
                UInt32 to_max_digits = 0;
146
127k
                UInt32 to_precision = 0;
147
127k
                UInt32 to_scale = 0;
148
149
127k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
127k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
127k
                    const auto* to_decimal_type =
153
127k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
127k
                    to_precision = to_decimal_type->get_precision();
155
127k
                    ToDataType::check_type_precision(to_precision);
156
157
127k
                    to_scale = to_decimal_type->get_scale();
158
127k
                    ToDataType::check_type_scale(to_scale);
159
127k
                }
160
127k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
127k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
127k
                    to_precision = to_max_digits;
163
127k
                }
164
165
127k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
127k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
127k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
127k
                if (to_scale > from_scale) {
170
127k
                    multiply_may_overflow &=
171
127k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
127k
                }
173
127k
                return narrow_integral || multiply_may_overflow;
174
127k
            }
175
127k
            return false;
176
127k
        });
177
127k
    };
178
179
1.61M
    return call_on_index_and_data_type<void>(to_type->get_primitive_type(), make_default_wrapper);
180
1.72M
}
181
182
WrapperType prepare_remove_nullable(FunctionContext* context, const DataTypePtr& from_type,
183
1.77M
                                    const DataTypePtr& to_type) {
184
    /// Determine whether pre-processing and/or post-processing must take place during conversion.
185
1.77M
    bool result_is_nullable = to_type->is_nullable();
186
187
1.77M
    if (result_is_nullable) {
188
1.72M
        return [from_type, to_type](FunctionContext* context, Block& block,
189
1.72M
                                    const ColumnNumbers& arguments, uint32_t result,
190
1.72M
                                    size_t input_rows_count,
191
1.72M
                                    const NullMap::value_type* null_map = nullptr) {
192
1.72M
            auto from_type_not_nullable = remove_nullable(from_type);
193
1.72M
            auto to_type_not_nullable = remove_nullable(to_type);
194
195
1.72M
            bool replace_null_data_to_default = need_replace_null_data_to_default(
196
1.72M
                    context, from_type_not_nullable, to_type_not_nullable);
197
198
1.72M
            auto nested_result_index = block.columns();
199
1.72M
            block.insert(block.get_by_position(result).unnest_nullable());
200
1.72M
            auto nested_source_index = block.columns();
201
1.72M
            block.insert(block.get_by_position(arguments[0])
202
1.72M
                                 .unnest_nullable(replace_null_data_to_default));
203
204
1.72M
            const auto& arg_col = block.get_by_position(arguments[0]);
205
1.72M
            const NullMap::value_type* arg_null_map = nullptr;
206
1.72M
            if (const auto* nullable = check_and_get_column<ColumnNullable>(*arg_col.column)) {
207
1.67M
                arg_null_map = nullable->get_null_map_data().data();
208
1.67M
            }
209
1.72M
            RETURN_IF_ERROR(prepare_impl(context, from_type_not_nullable, to_type_not_nullable)(
210
1.72M
                    context, block, {nested_source_index}, nested_result_index, input_rows_count,
211
1.72M
                    arg_null_map));
212
213
1.69M
            block.get_by_position(result).column =
214
1.69M
                    wrap_in_nullable(block.get_by_position(nested_result_index).column, block,
215
1.69M
                                     arguments, input_rows_count);
216
217
1.69M
            block.erase(nested_source_index);
218
1.69M
            block.erase(nested_result_index);
219
1.69M
            return Status::OK();
220
1.72M
        };
221
1.72M
    } else {
222
48.5k
        return prepare_impl(context, from_type, to_type);
223
48.5k
    }
224
1.77M
}
225
226
/// 'from_type' and 'to_type' are nested types in case of Nullable.
227
/// 'requested_result_is_nullable' is true if CAST to Nullable type is requested.
228
// NOLINTNEXTLINE(readability-function-size)
229
WrapperType prepare_impl(FunctionContext* context, const DataTypePtr& origin_from_type,
230
1.78M
                         const DataTypePtr& origin_to_type) {
231
1.78M
    auto to_type = get_serialized_type(origin_to_type);
232
1.78M
    auto from_type = get_serialized_type(origin_from_type);
233
1.78M
    if (from_type->equals(*to_type)) {
234
111k
        return create_identity_wrapper(from_type);
235
111k
    }
236
237
1.67M
    const auto* from_variant_v1 =
238
1.67M
            dynamic_cast<const DataTypeVariant*>(remove_nullable(from_type).get());
239
1.67M
    const auto* to_variant_v1 =
240
1.67M
            dynamic_cast<const DataTypeVariant*>(remove_nullable(to_type).get());
241
1.67M
    const auto* from_variant_v2 =
242
1.67M
            dynamic_cast<const DataTypeVariantV2*>(remove_nullable(from_type).get());
243
1.67M
    const auto* to_variant_v2 =
244
1.67M
            dynamic_cast<const DataTypeVariantV2*>(remove_nullable(to_type).get());
245
1.67M
    if ((from_variant_v1 != nullptr && to_variant_v2 != nullptr) ||
246
1.67M
        (from_variant_v2 != nullptr && to_variant_v1 != nullptr)) {
247
0
        return CastWrapper::create_unsupport_wrapper(
248
0
                "Cast between legacy Variant and compute-only Variant V2 is not supported");
249
0
    }
250
251
    // variant needs to be judged first
252
1.67M
    if (to_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
253
13.4k
        if (to_variant_v2 != nullptr) {
254
72
            return create_cast_to_variant_v2_wrapper(from_type);
255
72
        }
256
13.3k
        DORIS_CHECK(to_variant_v1 != nullptr);
257
13.3k
        return create_cast_to_variant_wrapper(from_type, *to_variant_v1);
258
13.4k
    }
259
1.66M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
260
17.6k
        if (from_variant_v2 != nullptr) {
261
139
            auto wrapper = create_cast_from_variant_v2_wrapper(to_type);
262
139
            return [wrapper = std::move(wrapper)](
263
139
                           FunctionContext* context, Block& block, const ColumnNumbers& arguments,
264
139
                           uint32_t result, size_t rows, const NullMap::value_type* null_map) {
265
139
                RETURN_IF_ERROR(wrapper(context, block, arguments, result, rows, null_map));
266
139
                auto& result_column = block.get_by_position(result).column;
267
139
                if (null_map == nullptr) {
268
78
                    const auto* nullable = check_and_get_column<ColumnNullable>(*result_column);
269
78
                    if (nullable != nullptr && !nullable->has_null()) {
270
69
                        result_column = nullable->get_nested_column_ptr();
271
69
                    }
272
78
                }
273
139
                return Status::OK();
274
139
            };
275
139
        }
276
17.5k
        DORIS_CHECK(from_variant_v1 != nullptr);
277
17.5k
        return create_cast_from_variant_wrapper(*from_variant_v1, to_type);
278
17.6k
    }
279
280
1.64M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_JSONB) {
281
9.50k
        return create_cast_from_jsonb_wrapper(static_cast<const DataTypeJsonb&>(*from_type),
282
9.50k
                                              to_type,
283
18.4E
                                              context ? context->jsonb_string_as_string() : false);
284
9.50k
    }
285
286
1.63M
    switch (to_type->get_primitive_type()) {
287
1.23k
    case PrimitiveType::TYPE_BOOLEAN:
288
1.23k
        return create_boolean_wrapper(context, from_type);
289
9.90k
    case PrimitiveType::TYPE_TINYINT:
290
15.5k
    case PrimitiveType::TYPE_SMALLINT:
291
192k
    case PrimitiveType::TYPE_INT:
292
251k
    case PrimitiveType::TYPE_BIGINT:
293
336k
    case PrimitiveType::TYPE_LARGEINT:
294
336k
        return create_int_wrapper(context, from_type, to_type->get_primitive_type());
295
11.2k
    case PrimitiveType::TYPE_FLOAT:
296
46.3k
    case PrimitiveType::TYPE_DOUBLE:
297
46.3k
        return create_float_wrapper(context, from_type, to_type->get_primitive_type());
298
50
    case PrimitiveType::TYPE_DATE:
299
86
    case PrimitiveType::TYPE_DATETIME:
300
178k
    case PrimitiveType::TYPE_DATEV2:
301
359k
    case PrimitiveType::TYPE_DATETIMEV2:
302
360k
    case PrimitiveType::TYPE_TIMEV2:
303
360k
        return create_datelike_wrapper(context, from_type, to_type->get_primitive_type());
304
581
    case PrimitiveType::TYPE_TIMESTAMPTZ:
305
581
        return create_timestamptz_wrapper(context, from_type);
306
90.5k
    case PrimitiveType::TYPE_IPV4:
307
255k
    case PrimitiveType::TYPE_IPV6:
308
255k
        return create_ip_wrapper(context, from_type, to_type->get_primitive_type());
309
294
    case PrimitiveType::TYPE_DECIMALV2:
310
12.4k
    case PrimitiveType::TYPE_DECIMAL32:
311
46.7k
    case PrimitiveType::TYPE_DECIMAL64:
312
244k
    case PrimitiveType::TYPE_DECIMAL128I:
313
255k
    case PrimitiveType::TYPE_DECIMAL256:
314
255k
        return create_decimal_wrapper(context, from_type, to_type->get_primitive_type());
315
25
    case PrimitiveType::TYPE_CHAR:
316
13.2k
    case PrimitiveType::TYPE_VARCHAR:
317
137k
    case PrimitiveType::TYPE_STRING:
318
137k
        return create_string_wrapper(from_type);
319
173k
    case PrimitiveType::TYPE_ARRAY:
320
173k
        return create_array_wrapper(context, from_type,
321
173k
                                    static_cast<const DataTypeArray&>(*to_type));
322
3.66k
    case PrimitiveType::TYPE_STRUCT:
323
3.66k
        return create_struct_wrapper(context, from_type,
324
3.66k
                                     static_cast<const DataTypeStruct&>(*to_type));
325
4.28k
    case PrimitiveType::TYPE_MAP:
326
4.28k
        return create_map_wrapper(context, from_type, static_cast<const DataTypeMap&>(*to_type));
327
6
    case PrimitiveType::TYPE_HLL:
328
6
        return create_hll_wrapper(context, from_type, static_cast<const DataTypeHLL&>(*to_type));
329
5
    case PrimitiveType::TYPE_BITMAP:
330
5
        return create_bitmap_wrapper(context, from_type,
331
5
                                     static_cast<const DataTypeBitMap&>(*to_type));
332
2
    case PrimitiveType::TYPE_QUANTILE_STATE:
333
2
        return create_quantile_state_wrapper(context, from_type,
334
2
                                             static_cast<const DataTypeQuantileState&>(*to_type));
335
60.2k
    case PrimitiveType::TYPE_JSONB:
336
60.2k
        return create_cast_to_jsonb_wrapper(from_type, static_cast<const DataTypeJsonb&>(*to_type),
337
60.2k
                                            context ? context->string_as_jsonb_string() : false);
338
316
    case PrimitiveType::TYPE_VARBINARY:
339
316
        return create_varbinary_wrapper(from_type);
340
0
    default:
341
0
        break;
342
1.63M
    }
343
344
0
    return create_unsupport_wrapper(from_type->get_name(), to_type->get_name());
345
1.63M
}
346
347
} // namespace CastWrapper
348
349
class PreparedFunctionCast : public PreparedFunctionImpl {
350
public:
351
    explicit PreparedFunctionCast(CastWrapper::WrapperType&& wrapper_function_, const char* name_)
352
1.58M
            : wrapper_function(std::move(wrapper_function_)), name(name_) {}
353
354
0
    String get_name() const override { return name; }
355
356
protected:
357
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
358
1.58M
                        uint32_t result, size_t input_rows_count) const override {
359
1.58M
        return wrapper_function(context, block, arguments, result, input_rows_count, nullptr);
360
1.58M
    }
361
362
1.58M
    bool use_default_implementation_for_nulls() const override { return false; }
363
1.58M
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
364
365
private:
366
    CastWrapper::WrapperType wrapper_function;
367
    const char* name;
368
};
369
370
class FunctionCast final : public IFunctionBase {
371
public:
372
    FunctionCast(const char* name_, DataTypes argument_types_, DataTypePtr return_type_)
373
1.46M
            : name(name_),
374
1.46M
              argument_types(std::move(argument_types_)),
375
1.46M
              return_type(std::move(return_type_)) {}
376
377
1.58M
    const DataTypes& get_argument_types() const override { return argument_types; }
378
1.58M
    const DataTypePtr& get_return_type() const override { return return_type; }
379
380
    PreparedFunctionPtr prepare(FunctionContext* context, const Block& /*sample_block*/,
381
                                const ColumnNumbers& /*arguments*/,
382
1.58M
                                uint32_t /*result*/) const override {
383
1.58M
        return std::make_shared<PreparedFunctionCast>(
384
1.58M
                CastWrapper::prepare_unpack_dictionaries(context, get_argument_types()[0],
385
1.58M
                                                         get_return_type()),
386
1.58M
                name);
387
1.58M
    }
388
389
0
    String get_name() const override { return name; }
390
391
0
    bool is_use_default_implementation_for_constants() const override { return true; }
392
393
private:
394
    const char* name = nullptr;
395
396
    DataTypes argument_types;
397
    DataTypePtr return_type;
398
};
399
400
class FunctionBuilderCast : public FunctionBuilderImpl {
401
public:
402
    static constexpr auto name = "CAST";
403
1.46M
    static FunctionBuilderPtr create() { return std::make_shared<FunctionBuilderCast>(); }
404
405
1.46M
    FunctionBuilderCast() = default;
406
407
1
    String get_name() const override { return name; }
408
409
0
    size_t get_number_of_arguments() const override { return 2; }
410
411
0
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
412
413
protected:
414
    FunctionBasePtr build_impl(const ColumnsWithTypeAndName& arguments,
415
1.46M
                               const DataTypePtr& return_type) const override {
416
1.46M
        DataTypes data_types(arguments.size());
417
418
4.38M
        for (size_t i = 0; i < arguments.size(); ++i) {
419
2.91M
            data_types[i] = arguments[i].type;
420
2.91M
        }
421
422
1.46M
        return std::make_shared<FunctionCast>(name, data_types, return_type);
423
1.46M
    }
424
425
1.46M
    bool skip_return_type_check() const override { return true; }
426
0
    DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) const override {
427
0
        return nullptr;
428
0
    }
429
430
0
    bool use_default_implementation_for_nulls() const override { return false; }
431
};
432
433
7
void register_function_cast(SimpleFunctionFactory& factory) {
434
7
    factory.register_function<FunctionBuilderCast>();
435
7
}
436
} // namespace doris