Coverage Report

Created: 2026-07-11 14:26

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/primitive_type.h"
25
#include "exprs/function/cast/cast_to_array.h"
26
#include "exprs/function/cast/cast_to_jsonb.h"
27
#include "exprs/function/cast/cast_to_map.h"
28
#include "exprs/function/cast/cast_to_struct.h"
29
#include "exprs/function/cast/cast_to_variant.h"
30
#include "exprs/function/cast/cast_wrapper_decls.h"
31
#include "exprs/function/simple_function_factory.h"
32
33
namespace doris {
34
35
namespace CastWrapper {
36
37
WrapperType create_hll_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
38
0
                               const DataTypeHLL& to_type) {
39
    /// Conversion from String through parsing.
40
0
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
41
0
        return cast_from_string_to_generic;
42
0
    }
43
44
0
    return CastWrapper::create_unsupport_wrapper("Cast to HLL only support from String type");
45
0
}
46
47
WrapperType create_bitmap_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
48
1
                                  const DataTypeBitMap& to_type) {
49
    /// Conversion from String through parsing.
50
1
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
51
1
        return cast_from_string_to_generic;
52
1
    }
53
54
0
    return CastWrapper::create_unsupport_wrapper("Cast to BitMap only support from String type");
55
1
}
56
57
WrapperType create_quantile_state_wrapper(FunctionContext* context,
58
                                          const DataTypePtr& from_type_untyped,
59
0
                                          const DataTypeQuantileState& to_type) {
60
    /// Conversion from String through parsing.
61
0
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
62
0
        return cast_from_string_to_generic;
63
0
    }
64
65
0
    return CastWrapper::create_unsupport_wrapper(
66
0
            "Cast to QuantileState only support from String type");
67
0
}
68
69
2
WrapperType create_varbinary_wrapper(const DataTypePtr& from_type_untyped) {
70
    /// Conversion from String through parsing.
71
2
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
72
2
        return cast_from_string_to_generic;
73
2
    }
74
75
0
    return CastWrapper::create_unsupport_wrapper("Cast to Varbinary only support from String type");
76
2
}
77
78
WrapperType prepare_unpack_dictionaries(FunctionContext* context, const DataTypePtr& from_type,
79
1.49M
                                        const DataTypePtr& to_type) {
80
1.49M
    const auto& from_nested = from_type;
81
1.49M
    const auto& to_nested = to_type;
82
83
1.49M
    if (from_type->is_null_literal()) {
84
1.25k
        if (!to_nested->is_nullable()) {
85
0
            return CastWrapper::create_unsupport_wrapper(
86
0
                    "Cannot convert NULL to a non-nullable type");
87
0
        }
88
89
1.25k
        return [](FunctionContext* context, Block& block, const ColumnNumbers&, uint32_t result,
90
1.25k
                  size_t input_rows_count, const NullMap::value_type* null_map = nullptr) {
91
            /// TODO: remove this in the future.
92
1.25k
            auto& res = block.get_by_position(result);
93
1.25k
            res.column = res.type->create_column_const_with_default_value(input_rows_count)
94
1.25k
                                 ->convert_to_full_column_if_const();
95
1.25k
            return Status::OK();
96
1.25k
        };
97
1.25k
    }
98
99
1.49M
    auto wrapper = prepare_remove_nullable(context, from_nested, to_nested);
100
101
1.49M
    return wrapper;
102
1.49M
}
103
104
bool need_replace_null_data_to_default(FunctionContext* context, const DataTypePtr& from_type,
105
1.47M
                                       const DataTypePtr& to_type) {
106
1.47M
    if (from_type->equals(*to_type)) {
107
71.3k
        return false;
108
71.3k
    }
109
110
1.40M
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
1.17M
        using Types = std::decay_t<decltype(types)>;
112
1.17M
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
342k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
342k
            return false;
118
342k
        }
119
0
        return call_on_index_and_data_type<
120
1.17M
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
807k
            using Types2 = std::decay_t<decltype(types2)>;
122
807k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
600k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
600k
                return false;
127
600k
            }
128
198k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
198k
                using FromFieldType = typename FromDataType::FieldType;
130
198k
                using ToFieldType = typename ToDataType::FieldType;
131
198k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
198k
                UInt32 from_scale = 0;
133
134
198k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
19.2k
                    const auto* from_decimal_type =
136
19.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
19.2k
                    from_precision =
138
19.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
19.2k
                    from_scale = from_decimal_type->get_scale();
140
19.2k
                }
141
142
198k
                UInt32 to_max_digits = 0;
143
198k
                UInt32 to_precision = 0;
144
198k
                UInt32 to_scale = 0;
145
146
198k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
192k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
192k
                    const auto* to_decimal_type =
150
192k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
192k
                    to_precision = to_decimal_type->get_precision();
152
192k
                    ToDataType::check_type_precision(to_precision);
153
154
192k
                    to_scale = to_decimal_type->get_scale();
155
192k
                    ToDataType::check_type_scale(to_scale);
156
192k
                }
157
198k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
6.16k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
6.16k
                    to_precision = to_max_digits;
160
6.16k
                }
161
162
198k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
198k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
198k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
198k
                if (to_scale > from_scale) {
167
11.9k
                    multiply_may_overflow &=
168
11.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
11.9k
                }
170
198k
                return narrow_integral || multiply_may_overflow;
171
198k
            }
172
0
            return false;
173
807k
        });
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
20
            return false;
173
20
        });
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
120
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
17
            using Types2 = std::decay_t<decltype(types2)>;
122
17
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
17
            return false;
173
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
120
36
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
36
            using Types2 = std::decay_t<decltype(types2)>;
122
36
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
36
            return false;
173
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
120
97
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
97
            using Types2 = std::decay_t<decltype(types2)>;
122
97
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
97
            return false;
173
97
        });
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2
            return false;
173
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10
            using Types2 = std::decay_t<decltype(types2)>;
122
10
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
10
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
10
                using FromFieldType = typename FromDataType::FieldType;
130
10
                using ToFieldType = typename ToDataType::FieldType;
131
10
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
10
                UInt32 from_scale = 0;
133
134
10
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
10
                    const auto* from_decimal_type =
136
10
                            check_and_get_data_type<FromDataType>(from_type.get());
137
10
                    from_precision =
138
10
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
10
                    from_scale = from_decimal_type->get_scale();
140
10
                }
141
142
10
                UInt32 to_max_digits = 0;
143
10
                UInt32 to_precision = 0;
144
10
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
10
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
10
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
10
                    to_precision = to_max_digits;
160
10
                }
161
162
10
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
10
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
10
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
10
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
10
                return narrow_integral || multiply_may_overflow;
171
10
            }
172
0
            return false;
173
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
120
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5
            using Types2 = std::decay_t<decltype(types2)>;
122
5
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5
                using FromFieldType = typename FromDataType::FieldType;
130
5
                using ToFieldType = typename ToDataType::FieldType;
131
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5
                UInt32 from_scale = 0;
133
134
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
5
                    const auto* from_decimal_type =
136
5
                            check_and_get_data_type<FromDataType>(from_type.get());
137
5
                    from_precision =
138
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
5
                    from_scale = from_decimal_type->get_scale();
140
5
                }
141
142
5
                UInt32 to_max_digits = 0;
143
5
                UInt32 to_precision = 0;
144
5
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
5
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
5
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
5
                    to_precision = to_max_digits;
160
5
                }
161
162
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
5
                return narrow_integral || multiply_may_overflow;
171
5
            }
172
0
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2
                using FromFieldType = typename FromDataType::FieldType;
130
2
                using ToFieldType = typename ToDataType::FieldType;
131
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2
                UInt32 from_scale = 0;
133
134
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2
                    const auto* from_decimal_type =
136
2
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2
                    from_precision =
138
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2
                    from_scale = from_decimal_type->get_scale();
140
2
                }
141
142
2
                UInt32 to_max_digits = 0;
143
2
                UInt32 to_precision = 0;
144
2
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
2
                    to_precision = to_max_digits;
160
2
                }
161
162
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
2
                return narrow_integral || multiply_may_overflow;
171
2
            }
172
0
            return false;
173
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
120
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5
            using Types2 = std::decay_t<decltype(types2)>;
122
5
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5
                using FromFieldType = typename FromDataType::FieldType;
130
5
                using ToFieldType = typename ToDataType::FieldType;
131
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5
                UInt32 from_scale = 0;
133
134
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
5
                    const auto* from_decimal_type =
136
5
                            check_and_get_data_type<FromDataType>(from_type.get());
137
5
                    from_precision =
138
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
5
                    from_scale = from_decimal_type->get_scale();
140
5
                }
141
142
5
                UInt32 to_max_digits = 0;
143
5
                UInt32 to_precision = 0;
144
5
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
5
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
5
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
5
                    to_precision = to_max_digits;
160
5
                }
161
162
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
5
                return narrow_integral || multiply_may_overflow;
171
5
            }
172
0
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2
                using FromFieldType = typename FromDataType::FieldType;
130
2
                using ToFieldType = typename ToDataType::FieldType;
131
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2
                UInt32 from_scale = 0;
133
134
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2
                    const auto* from_decimal_type =
136
2
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2
                    from_precision =
138
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2
                    from_scale = from_decimal_type->get_scale();
140
2
                }
141
142
2
                UInt32 to_max_digits = 0;
143
2
                UInt32 to_precision = 0;
144
2
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
2
                    to_precision = to_max_digits;
160
2
                }
161
162
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
2
                return narrow_integral || multiply_may_overflow;
171
2
            }
172
0
            return false;
173
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
120
799
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
799
            using Types2 = std::decay_t<decltype(types2)>;
122
799
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
799
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
799
                return false;
127
799
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
799
            return false;
173
799
        });
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
120
301
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
301
            using Types2 = std::decay_t<decltype(types2)>;
122
301
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
301
            return false;
173
301
        });
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
120
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10
            using Types2 = std::decay_t<decltype(types2)>;
122
10
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
10
            return false;
173
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
120
127
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
127
            using Types2 = std::decay_t<decltype(types2)>;
122
127
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
127
            return false;
173
127
        });
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
120
219
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
219
            using Types2 = std::decay_t<decltype(types2)>;
122
219
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
219
            return false;
173
219
        });
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
23
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
23
            using Types2 = std::decay_t<decltype(types2)>;
122
23
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
23
            return false;
173
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
120
30
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
30
            using Types2 = std::decay_t<decltype(types2)>;
122
30
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
30
            return false;
173
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
120
22
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
22
            using Types2 = std::decay_t<decltype(types2)>;
122
22
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
22
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
22
                using FromFieldType = typename FromDataType::FieldType;
130
22
                using ToFieldType = typename ToDataType::FieldType;
131
22
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
22
                UInt32 from_scale = 0;
133
134
22
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
22
                    const auto* from_decimal_type =
136
22
                            check_and_get_data_type<FromDataType>(from_type.get());
137
22
                    from_precision =
138
22
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
22
                    from_scale = from_decimal_type->get_scale();
140
22
                }
141
142
22
                UInt32 to_max_digits = 0;
143
22
                UInt32 to_precision = 0;
144
22
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
22
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
22
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
22
                    to_precision = to_max_digits;
160
22
                }
161
162
22
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
22
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
22
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
22
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
22
                return narrow_integral || multiply_may_overflow;
171
22
            }
172
0
            return false;
173
22
        });
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
120
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
25
            using Types2 = std::decay_t<decltype(types2)>;
122
25
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
25
                using FromFieldType = typename FromDataType::FieldType;
130
25
                using ToFieldType = typename ToDataType::FieldType;
131
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
25
                UInt32 from_scale = 0;
133
134
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
25
                    const auto* from_decimal_type =
136
25
                            check_and_get_data_type<FromDataType>(from_type.get());
137
25
                    from_precision =
138
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
25
                    from_scale = from_decimal_type->get_scale();
140
25
                }
141
142
25
                UInt32 to_max_digits = 0;
143
25
                UInt32 to_precision = 0;
144
25
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
25
                    to_precision = to_max_digits;
160
25
                }
161
162
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
25
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
25
                return narrow_integral || multiply_may_overflow;
171
25
            }
172
0
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
8
                using FromFieldType = typename FromDataType::FieldType;
130
8
                using ToFieldType = typename ToDataType::FieldType;
131
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
8
                UInt32 from_scale = 0;
133
134
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
8
                    const auto* from_decimal_type =
136
8
                            check_and_get_data_type<FromDataType>(from_type.get());
137
8
                    from_precision =
138
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
8
                    from_scale = from_decimal_type->get_scale();
140
8
                }
141
142
8
                UInt32 to_max_digits = 0;
143
8
                UInt32 to_precision = 0;
144
8
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
8
                    to_precision = to_max_digits;
160
8
                }
161
162
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
8
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
8
                return narrow_integral || multiply_may_overflow;
171
8
            }
172
0
            return false;
173
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
120
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
24
            using Types2 = std::decay_t<decltype(types2)>;
122
24
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
24
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
24
                using FromFieldType = typename FromDataType::FieldType;
130
24
                using ToFieldType = typename ToDataType::FieldType;
131
24
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
24
                UInt32 from_scale = 0;
133
134
24
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
24
                    const auto* from_decimal_type =
136
24
                            check_and_get_data_type<FromDataType>(from_type.get());
137
24
                    from_precision =
138
24
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
24
                    from_scale = from_decimal_type->get_scale();
140
24
                }
141
142
24
                UInt32 to_max_digits = 0;
143
24
                UInt32 to_precision = 0;
144
24
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
24
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
24
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
24
                    to_precision = to_max_digits;
160
24
                }
161
162
24
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
24
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
24
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
24
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
24
                return narrow_integral || multiply_may_overflow;
171
24
            }
172
0
            return false;
173
24
        });
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
120
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
25
            using Types2 = std::decay_t<decltype(types2)>;
122
25
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
25
                using FromFieldType = typename FromDataType::FieldType;
130
25
                using ToFieldType = typename ToDataType::FieldType;
131
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
25
                UInt32 from_scale = 0;
133
134
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
25
                    const auto* from_decimal_type =
136
25
                            check_and_get_data_type<FromDataType>(from_type.get());
137
25
                    from_precision =
138
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
25
                    from_scale = from_decimal_type->get_scale();
140
25
                }
141
142
25
                UInt32 to_max_digits = 0;
143
25
                UInt32 to_precision = 0;
144
25
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
25
                    to_precision = to_max_digits;
160
25
                }
161
162
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
25
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
25
                return narrow_integral || multiply_may_overflow;
171
25
            }
172
0
            return false;
173
25
        });
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
120
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
72
            using Types2 = std::decay_t<decltype(types2)>;
122
72
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
72
            return false;
173
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
120
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
24
            using Types2 = std::decay_t<decltype(types2)>;
122
24
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
24
            return false;
173
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
120
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
320
            using Types2 = std::decay_t<decltype(types2)>;
122
320
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
320
            return false;
173
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
120
2.95k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.95k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.95k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.95k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.95k
                return false;
127
2.95k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2.95k
            return false;
173
2.95k
        });
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
120
54
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
54
            using Types2 = std::decay_t<decltype(types2)>;
122
54
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
54
            return false;
173
54
        });
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
120
1.57k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.57k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.57k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.57k
            return false;
173
1.57k
        });
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
120
129
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
129
            using Types2 = std::decay_t<decltype(types2)>;
122
129
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
129
            return false;
173
129
        });
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
120
100
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
100
            using Types2 = std::decay_t<decltype(types2)>;
122
100
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
100
            return false;
173
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
20
            return false;
173
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
21
            return false;
173
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
120
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
25
            using Types2 = std::decay_t<decltype(types2)>;
122
25
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
25
            return false;
173
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
120
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
24
            using Types2 = std::decay_t<decltype(types2)>;
122
24
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
24
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
24
                using FromFieldType = typename FromDataType::FieldType;
130
24
                using ToFieldType = typename ToDataType::FieldType;
131
24
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
24
                UInt32 from_scale = 0;
133
134
24
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
24
                    const auto* from_decimal_type =
136
24
                            check_and_get_data_type<FromDataType>(from_type.get());
137
24
                    from_precision =
138
24
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
24
                    from_scale = from_decimal_type->get_scale();
140
24
                }
141
142
24
                UInt32 to_max_digits = 0;
143
24
                UInt32 to_precision = 0;
144
24
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
24
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
24
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
24
                    to_precision = to_max_digits;
160
24
                }
161
162
24
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
24
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
24
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
24
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
24
                return narrow_integral || multiply_may_overflow;
171
24
            }
172
0
            return false;
173
24
        });
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
120
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
25
            using Types2 = std::decay_t<decltype(types2)>;
122
25
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
25
                using FromFieldType = typename FromDataType::FieldType;
130
25
                using ToFieldType = typename ToDataType::FieldType;
131
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
25
                UInt32 from_scale = 0;
133
134
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
25
                    const auto* from_decimal_type =
136
25
                            check_and_get_data_type<FromDataType>(from_type.get());
137
25
                    from_precision =
138
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
25
                    from_scale = from_decimal_type->get_scale();
140
25
                }
141
142
25
                UInt32 to_max_digits = 0;
143
25
                UInt32 to_precision = 0;
144
25
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
25
                    to_precision = to_max_digits;
160
25
                }
161
162
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
25
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
25
                return narrow_integral || multiply_may_overflow;
171
25
            }
172
0
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
8
                using FromFieldType = typename FromDataType::FieldType;
130
8
                using ToFieldType = typename ToDataType::FieldType;
131
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
8
                UInt32 from_scale = 0;
133
134
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
8
                    const auto* from_decimal_type =
136
8
                            check_and_get_data_type<FromDataType>(from_type.get());
137
8
                    from_precision =
138
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
8
                    from_scale = from_decimal_type->get_scale();
140
8
                }
141
142
8
                UInt32 to_max_digits = 0;
143
8
                UInt32 to_precision = 0;
144
8
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
8
                    to_precision = to_max_digits;
160
8
                }
161
162
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
8
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
8
                return narrow_integral || multiply_may_overflow;
171
8
            }
172
0
            return false;
173
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
120
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
25
            using Types2 = std::decay_t<decltype(types2)>;
122
25
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
25
                using FromFieldType = typename FromDataType::FieldType;
130
25
                using ToFieldType = typename ToDataType::FieldType;
131
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
25
                UInt32 from_scale = 0;
133
134
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
25
                    const auto* from_decimal_type =
136
25
                            check_and_get_data_type<FromDataType>(from_type.get());
137
25
                    from_precision =
138
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
25
                    from_scale = from_decimal_type->get_scale();
140
25
                }
141
142
25
                UInt32 to_max_digits = 0;
143
25
                UInt32 to_precision = 0;
144
25
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
25
                    to_precision = to_max_digits;
160
25
                }
161
162
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
25
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
25
                return narrow_integral || multiply_may_overflow;
171
25
            }
172
0
            return false;
173
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
120
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
26
            using Types2 = std::decay_t<decltype(types2)>;
122
26
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
26
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
26
                using FromFieldType = typename FromDataType::FieldType;
130
26
                using ToFieldType = typename ToDataType::FieldType;
131
26
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
26
                UInt32 from_scale = 0;
133
134
26
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
26
                    const auto* from_decimal_type =
136
26
                            check_and_get_data_type<FromDataType>(from_type.get());
137
26
                    from_precision =
138
26
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
26
                    from_scale = from_decimal_type->get_scale();
140
26
                }
141
142
26
                UInt32 to_max_digits = 0;
143
26
                UInt32 to_precision = 0;
144
26
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
26
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
26
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
26
                    to_precision = to_max_digits;
160
26
                }
161
162
26
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
26
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
26
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
26
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
26
                return narrow_integral || multiply_may_overflow;
171
26
            }
172
0
            return false;
173
26
        });
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
120
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
72
            using Types2 = std::decay_t<decltype(types2)>;
122
72
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
72
            return false;
173
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
120
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
24
            using Types2 = std::decay_t<decltype(types2)>;
122
24
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
24
            return false;
173
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
120
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
320
            using Types2 = std::decay_t<decltype(types2)>;
122
320
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
320
            return false;
173
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
120
2.83k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.83k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.83k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.83k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.83k
                return false;
127
2.83k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2.83k
            return false;
173
2.83k
        });
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
120
44
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
44
            using Types2 = std::decay_t<decltype(types2)>;
122
44
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
44
            return false;
173
44
        });
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
120
1.51k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.51k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.51k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.51k
            return false;
173
1.51k
        });
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
120
324
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
324
            using Types2 = std::decay_t<decltype(types2)>;
122
324
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
324
            return false;
173
324
        });
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
120
130k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
130k
            using Types2 = std::decay_t<decltype(types2)>;
122
130k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
130k
            return false;
173
130k
        });
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
120
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
13
            using Types2 = std::decay_t<decltype(types2)>;
122
13
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
13
            return false;
173
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
20
            return false;
173
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
120
99
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
99
            using Types2 = std::decay_t<decltype(types2)>;
122
99
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
99
            return false;
173
99
        });
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21
                using FromFieldType = typename FromDataType::FieldType;
130
21
                using ToFieldType = typename ToDataType::FieldType;
131
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21
                UInt32 from_scale = 0;
133
134
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
21
                    const auto* from_decimal_type =
136
21
                            check_and_get_data_type<FromDataType>(from_type.get());
137
21
                    from_precision =
138
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
21
                    from_scale = from_decimal_type->get_scale();
140
21
                }
141
142
21
                UInt32 to_max_digits = 0;
143
21
                UInt32 to_precision = 0;
144
21
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
21
                    to_precision = to_max_digits;
160
21
                }
161
162
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
21
                return narrow_integral || multiply_may_overflow;
171
21
            }
172
0
            return false;
173
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
120
38
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
38
            using Types2 = std::decay_t<decltype(types2)>;
122
38
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
38
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
38
                using FromFieldType = typename FromDataType::FieldType;
130
38
                using ToFieldType = typename ToDataType::FieldType;
131
38
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
38
                UInt32 from_scale = 0;
133
134
38
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
38
                    const auto* from_decimal_type =
136
38
                            check_and_get_data_type<FromDataType>(from_type.get());
137
38
                    from_precision =
138
38
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
38
                    from_scale = from_decimal_type->get_scale();
140
38
                }
141
142
38
                UInt32 to_max_digits = 0;
143
38
                UInt32 to_precision = 0;
144
38
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
38
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
38
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
38
                    to_precision = to_max_digits;
160
38
                }
161
162
38
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
38
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
38
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
38
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
38
                return narrow_integral || multiply_may_overflow;
171
38
            }
172
0
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
8
                using FromFieldType = typename FromDataType::FieldType;
130
8
                using ToFieldType = typename ToDataType::FieldType;
131
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
8
                UInt32 from_scale = 0;
133
134
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
8
                    const auto* from_decimal_type =
136
8
                            check_and_get_data_type<FromDataType>(from_type.get());
137
8
                    from_precision =
138
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
8
                    from_scale = from_decimal_type->get_scale();
140
8
                }
141
142
8
                UInt32 to_max_digits = 0;
143
8
                UInt32 to_precision = 0;
144
8
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
8
                    to_precision = to_max_digits;
160
8
                }
161
162
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
8
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
8
                return narrow_integral || multiply_may_overflow;
171
8
            }
172
0
            return false;
173
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
120
249
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
249
            using Types2 = std::decay_t<decltype(types2)>;
122
249
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
249
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
249
                using FromFieldType = typename FromDataType::FieldType;
130
249
                using ToFieldType = typename ToDataType::FieldType;
131
249
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
249
                UInt32 from_scale = 0;
133
134
249
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
249
                    const auto* from_decimal_type =
136
249
                            check_and_get_data_type<FromDataType>(from_type.get());
137
249
                    from_precision =
138
249
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
249
                    from_scale = from_decimal_type->get_scale();
140
249
                }
141
142
249
                UInt32 to_max_digits = 0;
143
249
                UInt32 to_precision = 0;
144
249
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
249
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
249
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
249
                    to_precision = to_max_digits;
160
249
                }
161
162
249
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
249
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
249
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
249
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
249
                return narrow_integral || multiply_may_overflow;
171
249
            }
172
0
            return false;
173
249
        });
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
120
22
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
22
            using Types2 = std::decay_t<decltype(types2)>;
122
22
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
22
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
22
                using FromFieldType = typename FromDataType::FieldType;
130
22
                using ToFieldType = typename ToDataType::FieldType;
131
22
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
22
                UInt32 from_scale = 0;
133
134
22
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
22
                    const auto* from_decimal_type =
136
22
                            check_and_get_data_type<FromDataType>(from_type.get());
137
22
                    from_precision =
138
22
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
22
                    from_scale = from_decimal_type->get_scale();
140
22
                }
141
142
22
                UInt32 to_max_digits = 0;
143
22
                UInt32 to_precision = 0;
144
22
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
22
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
22
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
22
                    to_precision = to_max_digits;
160
22
                }
161
162
22
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
22
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
22
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
22
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
22
                return narrow_integral || multiply_may_overflow;
171
22
            }
172
0
            return false;
173
22
        });
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
120
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
12
            using Types2 = std::decay_t<decltype(types2)>;
122
12
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
12
            return false;
173
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
120
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
24
            using Types2 = std::decay_t<decltype(types2)>;
122
24
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
24
            return false;
173
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
120
276
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
276
            using Types2 = std::decay_t<decltype(types2)>;
122
276
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
276
            return false;
173
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
120
18.7k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
18.7k
            using Types2 = std::decay_t<decltype(types2)>;
122
18.7k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
18.7k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
18.7k
                return false;
127
18.7k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
18.7k
            return false;
173
18.7k
        });
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
120
340
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
340
            using Types2 = std::decay_t<decltype(types2)>;
122
340
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
340
            return false;
173
340
        });
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
120
1.08k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.08k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.08k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.08k
            return false;
173
1.08k
        });
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
120
655
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
655
            using Types2 = std::decay_t<decltype(types2)>;
122
655
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
655
            return false;
173
655
        });
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
120
9.16k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
9.16k
            using Types2 = std::decay_t<decltype(types2)>;
122
9.16k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
9.16k
            return false;
173
9.16k
        });
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
120
307
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
307
            using Types2 = std::decay_t<decltype(types2)>;
122
307
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
307
            return false;
173
307
        });
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
120
639
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
639
            using Types2 = std::decay_t<decltype(types2)>;
122
639
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
639
            return false;
173
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
120
2.34k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.34k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.34k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2.34k
            return false;
173
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
120
312
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
312
            using Types2 = std::decay_t<decltype(types2)>;
122
312
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
312
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
312
                using FromFieldType = typename FromDataType::FieldType;
130
312
                using ToFieldType = typename ToDataType::FieldType;
131
312
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
312
                UInt32 from_scale = 0;
133
134
312
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
312
                    const auto* from_decimal_type =
136
312
                            check_and_get_data_type<FromDataType>(from_type.get());
137
312
                    from_precision =
138
312
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
312
                    from_scale = from_decimal_type->get_scale();
140
312
                }
141
142
312
                UInt32 to_max_digits = 0;
143
312
                UInt32 to_precision = 0;
144
312
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
312
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
312
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
312
                    to_precision = to_max_digits;
160
312
                }
161
162
312
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
312
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
312
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
312
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
313
                return narrow_integral || multiply_may_overflow;
171
312
            }
172
0
            return false;
173
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
120
317
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
317
            using Types2 = std::decay_t<decltype(types2)>;
122
317
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
317
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
317
                using FromFieldType = typename FromDataType::FieldType;
130
317
                using ToFieldType = typename ToDataType::FieldType;
131
317
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
317
                UInt32 from_scale = 0;
133
134
317
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
317
                    const auto* from_decimal_type =
136
317
                            check_and_get_data_type<FromDataType>(from_type.get());
137
317
                    from_precision =
138
317
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
317
                    from_scale = from_decimal_type->get_scale();
140
317
                }
141
142
317
                UInt32 to_max_digits = 0;
143
317
                UInt32 to_precision = 0;
144
317
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
317
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
317
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
317
                    to_precision = to_max_digits;
160
317
                }
161
162
317
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
317
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
317
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
317
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
318
                return narrow_integral || multiply_may_overflow;
171
317
            }
172
0
            return false;
173
317
        });
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
120
303
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
303
            using Types2 = std::decay_t<decltype(types2)>;
122
303
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
303
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
303
                using FromFieldType = typename FromDataType::FieldType;
130
303
                using ToFieldType = typename ToDataType::FieldType;
131
303
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
303
                UInt32 from_scale = 0;
133
134
303
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
303
                    const auto* from_decimal_type =
136
303
                            check_and_get_data_type<FromDataType>(from_type.get());
137
303
                    from_precision =
138
303
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
303
                    from_scale = from_decimal_type->get_scale();
140
303
                }
141
142
303
                UInt32 to_max_digits = 0;
143
303
                UInt32 to_precision = 0;
144
303
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
303
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
303
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
303
                    to_precision = to_max_digits;
160
303
                }
161
162
303
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
303
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
303
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
303
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
303
                return narrow_integral || multiply_may_overflow;
171
303
            }
172
0
            return false;
173
303
        });
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
120
748
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
748
            using Types2 = std::decay_t<decltype(types2)>;
122
748
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
748
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
748
                using FromFieldType = typename FromDataType::FieldType;
130
748
                using ToFieldType = typename ToDataType::FieldType;
131
748
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
748
                UInt32 from_scale = 0;
133
134
748
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
748
                    const auto* from_decimal_type =
136
748
                            check_and_get_data_type<FromDataType>(from_type.get());
137
748
                    from_precision =
138
748
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
748
                    from_scale = from_decimal_type->get_scale();
140
748
                }
141
142
748
                UInt32 to_max_digits = 0;
143
748
                UInt32 to_precision = 0;
144
748
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
748
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
748
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
748
                    to_precision = to_max_digits;
160
748
                }
161
162
748
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
748
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
748
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
748
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
748
                return narrow_integral || multiply_may_overflow;
171
748
            }
172
0
            return false;
173
748
        });
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21
                using FromFieldType = typename FromDataType::FieldType;
130
21
                using ToFieldType = typename ToDataType::FieldType;
131
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21
                UInt32 from_scale = 0;
133
134
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
21
                    const auto* from_decimal_type =
136
21
                            check_and_get_data_type<FromDataType>(from_type.get());
137
21
                    from_precision =
138
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
21
                    from_scale = from_decimal_type->get_scale();
140
21
                }
141
142
21
                UInt32 to_max_digits = 0;
143
21
                UInt32 to_precision = 0;
144
21
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
21
                    to_precision = to_max_digits;
160
21
                }
161
162
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
21
                return narrow_integral || multiply_may_overflow;
171
21
            }
172
0
            return false;
173
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
120
1.24k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.24k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.24k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.24k
            return false;
173
1.24k
        });
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
120
1.23k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.23k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.23k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.23k
            return false;
173
1.23k
        });
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
120
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
4
            using Types2 = std::decay_t<decltype(types2)>;
122
4
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
4
            return false;
173
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
120
19.6k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
19.6k
            using Types2 = std::decay_t<decltype(types2)>;
122
19.6k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
19.6k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
19.6k
                return false;
127
19.6k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
19.6k
            return false;
173
19.6k
        });
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
120
145
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
145
            using Types2 = std::decay_t<decltype(types2)>;
122
145
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
145
            return false;
173
145
        });
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
120
109
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
109
            using Types2 = std::decay_t<decltype(types2)>;
122
109
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
109
            return false;
173
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
120
79
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
79
            using Types2 = std::decay_t<decltype(types2)>;
122
79
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
79
            return false;
173
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
120
132
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
132
            using Types2 = std::decay_t<decltype(types2)>;
122
132
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
132
            return false;
173
132
        });
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
120
604
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
604
            using Types2 = std::decay_t<decltype(types2)>;
122
604
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
604
            return false;
173
604
        });
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
120
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
9
            using Types2 = std::decay_t<decltype(types2)>;
122
9
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
9
            return false;
173
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
120
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
13
            using Types2 = std::decay_t<decltype(types2)>;
122
13
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
13
            return false;
173
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
120
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
18
            using Types2 = std::decay_t<decltype(types2)>;
122
18
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
18
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
18
                using FromFieldType = typename FromDataType::FieldType;
130
18
                using ToFieldType = typename ToDataType::FieldType;
131
18
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
18
                UInt32 from_scale = 0;
133
134
18
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
18
                    const auto* from_decimal_type =
136
18
                            check_and_get_data_type<FromDataType>(from_type.get());
137
18
                    from_precision =
138
18
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
18
                    from_scale = from_decimal_type->get_scale();
140
18
                }
141
142
18
                UInt32 to_max_digits = 0;
143
18
                UInt32 to_precision = 0;
144
18
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
18
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
18
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
18
                    to_precision = to_max_digits;
160
18
                }
161
162
18
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
18
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
18
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
18
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
18
                return narrow_integral || multiply_may_overflow;
171
18
            }
172
0
            return false;
173
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21
                using FromFieldType = typename FromDataType::FieldType;
130
21
                using ToFieldType = typename ToDataType::FieldType;
131
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21
                UInt32 from_scale = 0;
133
134
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
21
                    const auto* from_decimal_type =
136
21
                            check_and_get_data_type<FromDataType>(from_type.get());
137
21
                    from_precision =
138
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
21
                    from_scale = from_decimal_type->get_scale();
140
21
                }
141
142
21
                UInt32 to_max_digits = 0;
143
21
                UInt32 to_precision = 0;
144
21
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
21
                    to_precision = to_max_digits;
160
21
                }
161
162
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
21
                return narrow_integral || multiply_may_overflow;
171
21
            }
172
0
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
8
                using FromFieldType = typename FromDataType::FieldType;
130
8
                using ToFieldType = typename ToDataType::FieldType;
131
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
8
                UInt32 from_scale = 0;
133
134
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
8
                    const auto* from_decimal_type =
136
8
                            check_and_get_data_type<FromDataType>(from_type.get());
137
8
                    from_precision =
138
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
8
                    from_scale = from_decimal_type->get_scale();
140
8
                }
141
142
8
                UInt32 to_max_digits = 0;
143
8
                UInt32 to_precision = 0;
144
8
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
8
                    to_precision = to_max_digits;
160
8
                }
161
162
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
8
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
8
                return narrow_integral || multiply_may_overflow;
171
8
            }
172
0
            return false;
173
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21
                using FromFieldType = typename FromDataType::FieldType;
130
21
                using ToFieldType = typename ToDataType::FieldType;
131
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21
                UInt32 from_scale = 0;
133
134
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
21
                    const auto* from_decimal_type =
136
21
                            check_and_get_data_type<FromDataType>(from_type.get());
137
21
                    from_precision =
138
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
21
                    from_scale = from_decimal_type->get_scale();
140
21
                }
141
142
21
                UInt32 to_max_digits = 0;
143
21
                UInt32 to_precision = 0;
144
21
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
21
                    to_precision = to_max_digits;
160
21
                }
161
162
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
21
                return narrow_integral || multiply_may_overflow;
171
21
            }
172
0
            return false;
173
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
120
783
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
783
            using Types2 = std::decay_t<decltype(types2)>;
122
783
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
783
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
783
                using FromFieldType = typename FromDataType::FieldType;
130
783
                using ToFieldType = typename ToDataType::FieldType;
131
783
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
783
                UInt32 from_scale = 0;
133
134
783
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
783
                    const auto* from_decimal_type =
136
783
                            check_and_get_data_type<FromDataType>(from_type.get());
137
783
                    from_precision =
138
783
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
783
                    from_scale = from_decimal_type->get_scale();
140
783
                }
141
142
783
                UInt32 to_max_digits = 0;
143
783
                UInt32 to_precision = 0;
144
783
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
783
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
783
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
783
                    to_precision = to_max_digits;
160
783
                }
161
162
783
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
783
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
783
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
783
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
783
                return narrow_integral || multiply_may_overflow;
171
783
            }
172
0
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2
            return false;
173
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
120
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
16
            using Types2 = std::decay_t<decltype(types2)>;
122
16
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
16
            return false;
173
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
120
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
4
            using Types2 = std::decay_t<decltype(types2)>;
122
4
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
4
            return false;
173
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
120
67.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
67.2k
            using Types2 = std::decay_t<decltype(types2)>;
122
67.2k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
67.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
67.2k
                return false;
127
67.2k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
67.2k
            return false;
173
67.2k
        });
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2
            return false;
173
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
120
31
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
31
            using Types2 = std::decay_t<decltype(types2)>;
122
31
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
31
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
8
            return false;
173
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
20
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
8
            return false;
173
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
120
124
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
124
            using Types2 = std::decay_t<decltype(types2)>;
122
124
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
124
            return false;
173
124
        });
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
120
89
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
89
            using Types2 = std::decay_t<decltype(types2)>;
122
89
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
89
            return false;
173
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
120
119
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
119
            using Types2 = std::decay_t<decltype(types2)>;
122
119
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
119
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
119
                using FromFieldType = typename FromDataType::FieldType;
130
119
                using ToFieldType = typename ToDataType::FieldType;
131
119
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
119
                UInt32 from_scale = 0;
133
134
119
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
119
                    const auto* from_decimal_type =
136
119
                            check_and_get_data_type<FromDataType>(from_type.get());
137
119
                    from_precision =
138
119
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
119
                    from_scale = from_decimal_type->get_scale();
140
119
                }
141
142
119
                UInt32 to_max_digits = 0;
143
119
                UInt32 to_precision = 0;
144
119
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
119
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
119
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
119
                    to_precision = to_max_digits;
160
119
                }
161
162
119
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
119
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
119
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
119
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
119
                return narrow_integral || multiply_may_overflow;
171
119
            }
172
0
            return false;
173
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
120
112
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
112
            using Types2 = std::decay_t<decltype(types2)>;
122
112
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
112
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
112
                using FromFieldType = typename FromDataType::FieldType;
130
112
                using ToFieldType = typename ToDataType::FieldType;
131
112
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
112
                UInt32 from_scale = 0;
133
134
112
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
112
                    const auto* from_decimal_type =
136
112
                            check_and_get_data_type<FromDataType>(from_type.get());
137
112
                    from_precision =
138
112
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
112
                    from_scale = from_decimal_type->get_scale();
140
112
                }
141
142
112
                UInt32 to_max_digits = 0;
143
112
                UInt32 to_precision = 0;
144
112
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
112
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
112
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
112
                    to_precision = to_max_digits;
160
112
                }
161
162
112
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
112
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
112
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
112
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
112
                return narrow_integral || multiply_may_overflow;
171
112
            }
172
0
            return false;
173
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
120
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
16
            using Types2 = std::decay_t<decltype(types2)>;
122
16
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
16
                using FromFieldType = typename FromDataType::FieldType;
130
16
                using ToFieldType = typename ToDataType::FieldType;
131
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
16
                UInt32 from_scale = 0;
133
134
16
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
16
                    const auto* from_decimal_type =
136
16
                            check_and_get_data_type<FromDataType>(from_type.get());
137
16
                    from_precision =
138
16
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
16
                    from_scale = from_decimal_type->get_scale();
140
16
                }
141
142
16
                UInt32 to_max_digits = 0;
143
16
                UInt32 to_precision = 0;
144
16
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
16
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
16
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
16
                    to_precision = to_max_digits;
160
16
                }
161
162
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
16
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
16
                return narrow_integral || multiply_may_overflow;
171
16
            }
172
0
            return false;
173
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
120
97
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
97
            using Types2 = std::decay_t<decltype(types2)>;
122
97
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
97
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
97
                using FromFieldType = typename FromDataType::FieldType;
130
97
                using ToFieldType = typename ToDataType::FieldType;
131
97
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
97
                UInt32 from_scale = 0;
133
134
97
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
97
                    const auto* from_decimal_type =
136
97
                            check_and_get_data_type<FromDataType>(from_type.get());
137
97
                    from_precision =
138
97
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
97
                    from_scale = from_decimal_type->get_scale();
140
97
                }
141
142
97
                UInt32 to_max_digits = 0;
143
97
                UInt32 to_precision = 0;
144
97
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
97
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
97
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
97
                    to_precision = to_max_digits;
160
97
                }
161
162
97
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
97
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
97
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
97
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
97
                return narrow_integral || multiply_may_overflow;
171
97
            }
172
0
            return false;
173
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
120
554
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
554
            using Types2 = std::decay_t<decltype(types2)>;
122
554
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
554
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
554
                using FromFieldType = typename FromDataType::FieldType;
130
554
                using ToFieldType = typename ToDataType::FieldType;
131
554
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
554
                UInt32 from_scale = 0;
133
134
554
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
554
                    const auto* from_decimal_type =
136
554
                            check_and_get_data_type<FromDataType>(from_type.get());
137
554
                    from_precision =
138
554
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
554
                    from_scale = from_decimal_type->get_scale();
140
554
                }
141
142
554
                UInt32 to_max_digits = 0;
143
554
                UInt32 to_precision = 0;
144
554
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
554
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
554
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
554
                    to_precision = to_max_digits;
160
554
                }
161
162
554
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
554
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
554
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
554
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
554
                return narrow_integral || multiply_may_overflow;
171
554
            }
172
0
            return false;
173
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
120
39
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
39
            using Types2 = std::decay_t<decltype(types2)>;
122
39
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
39
            return false;
173
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
120
7.78k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.78k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.78k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7.78k
            return false;
173
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
120
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
162
            using Types2 = std::decay_t<decltype(types2)>;
122
162
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
162
            return false;
173
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
120
1.72k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.72k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.72k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
1.72k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
1.72k
                return false;
127
1.72k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.72k
            return false;
173
1.72k
        });
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
120
262
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
262
            using Types2 = std::decay_t<decltype(types2)>;
122
262
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
262
            return false;
173
262
        });
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
120
448
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
448
            using Types2 = std::decay_t<decltype(types2)>;
122
448
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
448
            return false;
173
448
        });
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
120
890
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
890
            using Types2 = std::decay_t<decltype(types2)>;
122
890
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
890
            return false;
173
890
        });
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
120
1.11k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.11k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.11k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.11k
            return false;
173
1.11k
        });
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
120
1.24k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.24k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.24k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.24k
            return false;
173
1.24k
        });
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
120
195
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
195
            using Types2 = std::decay_t<decltype(types2)>;
122
195
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
195
            return false;
173
195
        });
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
120
1.04k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.04k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.04k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1.04k
            return false;
173
1.04k
        });
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
120
401
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
401
            using Types2 = std::decay_t<decltype(types2)>;
122
401
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
401
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
401
                using FromFieldType = typename FromDataType::FieldType;
130
401
                using ToFieldType = typename ToDataType::FieldType;
131
401
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
401
                UInt32 from_scale = 0;
133
134
401
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
401
                    const auto* from_decimal_type =
136
401
                            check_and_get_data_type<FromDataType>(from_type.get());
137
401
                    from_precision =
138
401
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
401
                    from_scale = from_decimal_type->get_scale();
140
401
                }
141
142
401
                UInt32 to_max_digits = 0;
143
401
                UInt32 to_precision = 0;
144
401
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
401
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
401
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
401
                    to_precision = to_max_digits;
160
401
                }
161
162
401
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
401
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
401
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
401
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
401
                return narrow_integral || multiply_may_overflow;
171
401
            }
172
0
            return false;
173
401
        });
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
120
349
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
349
            using Types2 = std::decay_t<decltype(types2)>;
122
349
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
349
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
349
                using FromFieldType = typename FromDataType::FieldType;
130
349
                using ToFieldType = typename ToDataType::FieldType;
131
349
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
349
                UInt32 from_scale = 0;
133
134
349
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
349
                    const auto* from_decimal_type =
136
349
                            check_and_get_data_type<FromDataType>(from_type.get());
137
349
                    from_precision =
138
349
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
349
                    from_scale = from_decimal_type->get_scale();
140
349
                }
141
142
349
                UInt32 to_max_digits = 0;
143
349
                UInt32 to_precision = 0;
144
349
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
349
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
349
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
349
                    to_precision = to_max_digits;
160
349
                }
161
162
349
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
349
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
349
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
349
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
349
                return narrow_integral || multiply_may_overflow;
171
349
            }
172
0
            return false;
173
349
        });
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
120
56
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
56
            using Types2 = std::decay_t<decltype(types2)>;
122
56
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
56
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
56
                using FromFieldType = typename FromDataType::FieldType;
130
56
                using ToFieldType = typename ToDataType::FieldType;
131
56
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
56
                UInt32 from_scale = 0;
133
134
56
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
56
                    const auto* from_decimal_type =
136
56
                            check_and_get_data_type<FromDataType>(from_type.get());
137
56
                    from_precision =
138
56
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
56
                    from_scale = from_decimal_type->get_scale();
140
56
                }
141
142
56
                UInt32 to_max_digits = 0;
143
56
                UInt32 to_precision = 0;
144
56
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
56
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
56
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
56
                    to_precision = to_max_digits;
160
56
                }
161
162
56
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
56
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
56
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
56
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
56
                return narrow_integral || multiply_may_overflow;
171
56
            }
172
0
            return false;
173
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
120
781
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
781
            using Types2 = std::decay_t<decltype(types2)>;
122
781
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
781
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
781
                using FromFieldType = typename FromDataType::FieldType;
130
781
                using ToFieldType = typename ToDataType::FieldType;
131
781
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
781
                UInt32 from_scale = 0;
133
134
781
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
781
                    const auto* from_decimal_type =
136
781
                            check_and_get_data_type<FromDataType>(from_type.get());
137
781
                    from_precision =
138
781
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
781
                    from_scale = from_decimal_type->get_scale();
140
781
                }
141
142
781
                UInt32 to_max_digits = 0;
143
781
                UInt32 to_precision = 0;
144
781
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
781
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
781
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
781
                    to_precision = to_max_digits;
160
781
                }
161
162
781
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
781
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
781
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
781
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
783
                return narrow_integral || multiply_may_overflow;
171
781
            }
172
0
            return false;
173
781
        });
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
120
542
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
542
            using Types2 = std::decay_t<decltype(types2)>;
122
542
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
542
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
542
                using FromFieldType = typename FromDataType::FieldType;
130
542
                using ToFieldType = typename ToDataType::FieldType;
131
542
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
542
                UInt32 from_scale = 0;
133
134
542
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
542
                    const auto* from_decimal_type =
136
542
                            check_and_get_data_type<FromDataType>(from_type.get());
137
542
                    from_precision =
138
542
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
542
                    from_scale = from_decimal_type->get_scale();
140
542
                }
141
142
542
                UInt32 to_max_digits = 0;
143
542
                UInt32 to_precision = 0;
144
542
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
542
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
542
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
542
                    to_precision = to_max_digits;
160
542
                }
161
162
542
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
542
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
542
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
542
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
542
                return narrow_integral || multiply_may_overflow;
171
542
            }
172
0
            return false;
173
542
        });
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
120
57
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
57
            using Types2 = std::decay_t<decltype(types2)>;
122
57
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
57
            return false;
173
57
        });
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
120
7.80k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.80k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.80k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7.80k
            return false;
173
7.80k
        });
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
120
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
162
            using Types2 = std::decay_t<decltype(types2)>;
122
162
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
162
            return false;
173
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
120
6.08k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
6.08k
            using Types2 = std::decay_t<decltype(types2)>;
122
6.08k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
6.08k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
6.08k
                return false;
127
6.08k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
6.08k
            return false;
173
6.08k
        });
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
120
19
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
19
            using Types2 = std::decay_t<decltype(types2)>;
122
19
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
19
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
19
                using FromFieldType = typename FromDataType::FieldType;
130
19
                using ToFieldType = typename ToDataType::FieldType;
131
19
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
19
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
19
                UInt32 to_max_digits = 0;
143
19
                UInt32 to_precision = 0;
144
19
                UInt32 to_scale = 0;
145
146
19
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
19
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
19
                    const auto* to_decimal_type =
150
19
                            check_and_get_data_type<ToDataType>(to_type.get());
151
19
                    to_precision = to_decimal_type->get_precision();
152
19
                    ToDataType::check_type_precision(to_precision);
153
154
19
                    to_scale = to_decimal_type->get_scale();
155
19
                    ToDataType::check_type_scale(to_scale);
156
19
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
19
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
19
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
19
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
19
                if (to_scale > from_scale) {
167
18
                    multiply_may_overflow &=
168
18
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
18
                }
170
19
                return narrow_integral || multiply_may_overflow;
171
19
            }
172
0
            return false;
173
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
120
466
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
466
            using Types2 = std::decay_t<decltype(types2)>;
122
466
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
466
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
466
                using FromFieldType = typename FromDataType::FieldType;
130
466
                using ToFieldType = typename ToDataType::FieldType;
131
466
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
466
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
466
                UInt32 to_max_digits = 0;
143
466
                UInt32 to_precision = 0;
144
466
                UInt32 to_scale = 0;
145
146
466
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
466
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
466
                    const auto* to_decimal_type =
150
466
                            check_and_get_data_type<ToDataType>(to_type.get());
151
466
                    to_precision = to_decimal_type->get_precision();
152
466
                    ToDataType::check_type_precision(to_precision);
153
154
466
                    to_scale = to_decimal_type->get_scale();
155
466
                    ToDataType::check_type_scale(to_scale);
156
466
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
466
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
466
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
466
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
466
                if (to_scale > from_scale) {
167
264
                    multiply_may_overflow &=
168
264
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
264
                }
170
466
                return narrow_integral || multiply_may_overflow;
171
466
            }
172
0
            return false;
173
466
        });
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
120
501
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
501
            using Types2 = std::decay_t<decltype(types2)>;
122
501
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
501
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
501
                using FromFieldType = typename FromDataType::FieldType;
130
501
                using ToFieldType = typename ToDataType::FieldType;
131
501
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
501
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
501
                UInt32 to_max_digits = 0;
143
501
                UInt32 to_precision = 0;
144
501
                UInt32 to_scale = 0;
145
146
501
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
501
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
501
                    const auto* to_decimal_type =
150
501
                            check_and_get_data_type<ToDataType>(to_type.get());
151
501
                    to_precision = to_decimal_type->get_precision();
152
501
                    ToDataType::check_type_precision(to_precision);
153
154
501
                    to_scale = to_decimal_type->get_scale();
155
501
                    ToDataType::check_type_scale(to_scale);
156
501
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
501
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
501
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
501
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
501
                if (to_scale > from_scale) {
167
252
                    multiply_may_overflow &=
168
252
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
252
                }
170
501
                return narrow_integral || multiply_may_overflow;
171
501
            }
172
0
            return false;
173
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
120
553
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
553
            using Types2 = std::decay_t<decltype(types2)>;
122
553
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
553
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
553
                using FromFieldType = typename FromDataType::FieldType;
130
553
                using ToFieldType = typename ToDataType::FieldType;
131
553
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
553
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
553
                UInt32 to_max_digits = 0;
143
553
                UInt32 to_precision = 0;
144
553
                UInt32 to_scale = 0;
145
146
553
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
553
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
553
                    const auto* to_decimal_type =
150
553
                            check_and_get_data_type<ToDataType>(to_type.get());
151
553
                    to_precision = to_decimal_type->get_precision();
152
553
                    ToDataType::check_type_precision(to_precision);
153
154
553
                    to_scale = to_decimal_type->get_scale();
155
553
                    ToDataType::check_type_scale(to_scale);
156
553
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
553
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
553
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
553
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
553
                if (to_scale > from_scale) {
167
280
                    multiply_may_overflow &=
168
280
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
280
                }
170
553
                return narrow_integral || multiply_may_overflow;
171
553
            }
172
0
            return false;
173
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
120
611
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
611
            using Types2 = std::decay_t<decltype(types2)>;
122
611
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
611
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
611
                using FromFieldType = typename FromDataType::FieldType;
130
611
                using ToFieldType = typename ToDataType::FieldType;
131
611
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
611
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
611
                UInt32 to_max_digits = 0;
143
611
                UInt32 to_precision = 0;
144
611
                UInt32 to_scale = 0;
145
146
611
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
611
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
611
                    const auto* to_decimal_type =
150
611
                            check_and_get_data_type<ToDataType>(to_type.get());
151
611
                    to_precision = to_decimal_type->get_precision();
152
611
                    ToDataType::check_type_precision(to_precision);
153
154
611
                    to_scale = to_decimal_type->get_scale();
155
611
                    ToDataType::check_type_scale(to_scale);
156
611
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
611
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
611
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
611
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
611
                if (to_scale > from_scale) {
167
266
                    multiply_may_overflow &=
168
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
266
                }
170
611
                return narrow_integral || multiply_may_overflow;
171
611
            }
172
0
            return false;
173
611
        });
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
120
549
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
549
            using Types2 = std::decay_t<decltype(types2)>;
122
549
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
549
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
549
                using FromFieldType = typename FromDataType::FieldType;
130
549
                using ToFieldType = typename ToDataType::FieldType;
131
549
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
549
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
549
                UInt32 to_max_digits = 0;
143
549
                UInt32 to_precision = 0;
144
549
                UInt32 to_scale = 0;
145
146
549
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
549
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
549
                    const auto* to_decimal_type =
150
549
                            check_and_get_data_type<ToDataType>(to_type.get());
151
549
                    to_precision = to_decimal_type->get_precision();
152
549
                    ToDataType::check_type_precision(to_precision);
153
154
549
                    to_scale = to_decimal_type->get_scale();
155
549
                    ToDataType::check_type_scale(to_scale);
156
549
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
549
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
549
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
549
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
549
                if (to_scale > from_scale) {
167
278
                    multiply_may_overflow &=
168
278
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
278
                }
170
549
                return narrow_integral || multiply_may_overflow;
171
549
            }
172
0
            return false;
173
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
120
104
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
104
            using Types2 = std::decay_t<decltype(types2)>;
122
104
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
104
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
104
                using FromFieldType = typename FromDataType::FieldType;
130
104
                using ToFieldType = typename ToDataType::FieldType;
131
104
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
104
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
104
                UInt32 to_max_digits = 0;
143
104
                UInt32 to_precision = 0;
144
104
                UInt32 to_scale = 0;
145
146
104
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
104
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
104
                    const auto* to_decimal_type =
150
104
                            check_and_get_data_type<ToDataType>(to_type.get());
151
104
                    to_precision = to_decimal_type->get_precision();
152
104
                    ToDataType::check_type_precision(to_precision);
153
154
104
                    to_scale = to_decimal_type->get_scale();
155
104
                    ToDataType::check_type_scale(to_scale);
156
104
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
104
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
104
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
104
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
104
                if (to_scale > from_scale) {
167
68
                    multiply_may_overflow &=
168
68
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
68
                }
170
104
                return narrow_integral || multiply_may_overflow;
171
104
            }
172
0
            return false;
173
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
120
308
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
308
            using Types2 = std::decay_t<decltype(types2)>;
122
308
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
308
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
308
                using FromFieldType = typename FromDataType::FieldType;
130
308
                using ToFieldType = typename ToDataType::FieldType;
131
308
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
308
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
308
                UInt32 to_max_digits = 0;
143
308
                UInt32 to_precision = 0;
144
308
                UInt32 to_scale = 0;
145
146
308
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
308
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
308
                    const auto* to_decimal_type =
150
308
                            check_and_get_data_type<ToDataType>(to_type.get());
151
308
                    to_precision = to_decimal_type->get_precision();
152
308
                    ToDataType::check_type_precision(to_precision);
153
154
308
                    to_scale = to_decimal_type->get_scale();
155
308
                    ToDataType::check_type_scale(to_scale);
156
308
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
308
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
308
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
308
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
308
                if (to_scale > from_scale) {
167
258
                    multiply_may_overflow &=
168
258
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
258
                }
170
308
                return narrow_integral || multiply_may_overflow;
171
308
            }
172
0
            return false;
173
308
        });
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
120
387
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
387
            using Types2 = std::decay_t<decltype(types2)>;
122
387
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
387
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
387
                using FromFieldType = typename FromDataType::FieldType;
130
387
                using ToFieldType = typename ToDataType::FieldType;
131
387
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
387
                UInt32 from_scale = 0;
133
134
387
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
387
                    const auto* from_decimal_type =
136
387
                            check_and_get_data_type<FromDataType>(from_type.get());
137
387
                    from_precision =
138
387
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
387
                    from_scale = from_decimal_type->get_scale();
140
387
                }
141
142
387
                UInt32 to_max_digits = 0;
143
387
                UInt32 to_precision = 0;
144
387
                UInt32 to_scale = 0;
145
146
387
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
387
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
387
                    const auto* to_decimal_type =
150
387
                            check_and_get_data_type<ToDataType>(to_type.get());
151
387
                    to_precision = to_decimal_type->get_precision();
152
387
                    ToDataType::check_type_precision(to_precision);
153
154
387
                    to_scale = to_decimal_type->get_scale();
155
387
                    ToDataType::check_type_scale(to_scale);
156
387
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
387
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
387
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
387
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
387
                if (to_scale > from_scale) {
167
81
                    multiply_may_overflow &=
168
81
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
81
                }
170
387
                return narrow_integral || multiply_may_overflow;
171
387
            }
172
0
            return false;
173
387
        });
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
120
508
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
508
            using Types2 = std::decay_t<decltype(types2)>;
122
508
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
508
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
508
                using FromFieldType = typename FromDataType::FieldType;
130
508
                using ToFieldType = typename ToDataType::FieldType;
131
508
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
508
                UInt32 from_scale = 0;
133
134
508
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
508
                    const auto* from_decimal_type =
136
508
                            check_and_get_data_type<FromDataType>(from_type.get());
137
508
                    from_precision =
138
508
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
508
                    from_scale = from_decimal_type->get_scale();
140
508
                }
141
142
508
                UInt32 to_max_digits = 0;
143
508
                UInt32 to_precision = 0;
144
508
                UInt32 to_scale = 0;
145
146
508
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
508
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
508
                    const auto* to_decimal_type =
150
508
                            check_and_get_data_type<ToDataType>(to_type.get());
151
508
                    to_precision = to_decimal_type->get_precision();
152
508
                    ToDataType::check_type_precision(to_precision);
153
154
508
                    to_scale = to_decimal_type->get_scale();
155
508
                    ToDataType::check_type_scale(to_scale);
156
508
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
508
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
508
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
508
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
508
                if (to_scale > from_scale) {
167
86
                    multiply_may_overflow &=
168
86
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
86
                }
170
508
                return narrow_integral || multiply_may_overflow;
171
508
            }
172
0
            return false;
173
508
        });
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
120
230
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
230
            using Types2 = std::decay_t<decltype(types2)>;
122
230
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
230
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
230
                using FromFieldType = typename FromDataType::FieldType;
130
230
                using ToFieldType = typename ToDataType::FieldType;
131
230
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
230
                UInt32 from_scale = 0;
133
134
230
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
230
                    const auto* from_decimal_type =
136
230
                            check_and_get_data_type<FromDataType>(from_type.get());
137
230
                    from_precision =
138
230
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
230
                    from_scale = from_decimal_type->get_scale();
140
230
                }
141
142
230
                UInt32 to_max_digits = 0;
143
230
                UInt32 to_precision = 0;
144
230
                UInt32 to_scale = 0;
145
146
230
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
230
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
230
                    const auto* to_decimal_type =
150
230
                            check_and_get_data_type<ToDataType>(to_type.get());
151
230
                    to_precision = to_decimal_type->get_precision();
152
230
                    ToDataType::check_type_precision(to_precision);
153
154
230
                    to_scale = to_decimal_type->get_scale();
155
230
                    ToDataType::check_type_scale(to_scale);
156
230
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
230
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
230
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
230
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
230
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
230
                return narrow_integral || multiply_may_overflow;
171
230
            }
172
0
            return false;
173
230
        });
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
120
321
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
321
            using Types2 = std::decay_t<decltype(types2)>;
122
321
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
321
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
321
                using FromFieldType = typename FromDataType::FieldType;
130
321
                using ToFieldType = typename ToDataType::FieldType;
131
321
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
321
                UInt32 from_scale = 0;
133
134
321
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
321
                    const auto* from_decimal_type =
136
321
                            check_and_get_data_type<FromDataType>(from_type.get());
137
321
                    from_precision =
138
321
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
321
                    from_scale = from_decimal_type->get_scale();
140
321
                }
141
142
321
                UInt32 to_max_digits = 0;
143
321
                UInt32 to_precision = 0;
144
321
                UInt32 to_scale = 0;
145
146
321
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
321
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
321
                    const auto* to_decimal_type =
150
321
                            check_and_get_data_type<ToDataType>(to_type.get());
151
321
                    to_precision = to_decimal_type->get_precision();
152
321
                    ToDataType::check_type_precision(to_precision);
153
154
321
                    to_scale = to_decimal_type->get_scale();
155
321
                    ToDataType::check_type_scale(to_scale);
156
321
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
321
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
321
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
321
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
321
                if (to_scale > from_scale) {
167
83
                    multiply_may_overflow &=
168
83
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
83
                }
170
321
                return narrow_integral || multiply_may_overflow;
171
321
            }
172
0
            return false;
173
321
        });
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
120
303
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
303
            using Types2 = std::decay_t<decltype(types2)>;
122
303
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
303
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
303
                using FromFieldType = typename FromDataType::FieldType;
130
303
                using ToFieldType = typename ToDataType::FieldType;
131
303
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
303
                UInt32 from_scale = 0;
133
134
303
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
303
                    const auto* from_decimal_type =
136
303
                            check_and_get_data_type<FromDataType>(from_type.get());
137
303
                    from_precision =
138
303
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
303
                    from_scale = from_decimal_type->get_scale();
140
303
                }
141
142
303
                UInt32 to_max_digits = 0;
143
303
                UInt32 to_precision = 0;
144
303
                UInt32 to_scale = 0;
145
146
303
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
303
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
303
                    const auto* to_decimal_type =
150
303
                            check_and_get_data_type<ToDataType>(to_type.get());
151
303
                    to_precision = to_decimal_type->get_precision();
152
303
                    ToDataType::check_type_precision(to_precision);
153
154
303
                    to_scale = to_decimal_type->get_scale();
155
303
                    ToDataType::check_type_scale(to_scale);
156
303
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
303
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
303
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
303
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
303
                if (to_scale > from_scale) {
167
79
                    multiply_may_overflow &=
168
79
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
79
                }
170
303
                return narrow_integral || multiply_may_overflow;
171
303
            }
172
0
            return false;
173
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
120
2.89k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.89k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.89k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.89k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.89k
                return false;
127
2.89k
            }
128
2.89k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.89k
                using FromFieldType = typename FromDataType::FieldType;
130
2.89k
                using ToFieldType = typename ToDataType::FieldType;
131
2.89k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.89k
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
2.89k
                UInt32 to_max_digits = 0;
143
2.89k
                UInt32 to_precision = 0;
144
2.89k
                UInt32 to_scale = 0;
145
146
2.89k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.89k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.89k
                    const auto* to_decimal_type =
150
2.89k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.89k
                    to_precision = to_decimal_type->get_precision();
152
2.89k
                    ToDataType::check_type_precision(to_precision);
153
154
2.89k
                    to_scale = to_decimal_type->get_scale();
155
2.89k
                    ToDataType::check_type_scale(to_scale);
156
2.89k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
2.89k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.89k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.89k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.89k
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
2.89k
                return narrow_integral || multiply_may_overflow;
171
2.89k
            }
172
0
            return false;
173
2.89k
        });
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
120
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
17
            using Types2 = std::decay_t<decltype(types2)>;
122
17
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
17
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
17
                using FromFieldType = typename FromDataType::FieldType;
130
17
                using ToFieldType = typename ToDataType::FieldType;
131
17
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
17
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
17
                UInt32 to_max_digits = 0;
143
17
                UInt32 to_precision = 0;
144
17
                UInt32 to_scale = 0;
145
146
17
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
17
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
17
                    const auto* to_decimal_type =
150
17
                            check_and_get_data_type<ToDataType>(to_type.get());
151
17
                    to_precision = to_decimal_type->get_precision();
152
17
                    ToDataType::check_type_precision(to_precision);
153
154
17
                    to_scale = to_decimal_type->get_scale();
155
17
                    ToDataType::check_type_scale(to_scale);
156
17
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
17
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
17
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
17
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
17
                if (to_scale > from_scale) {
167
16
                    multiply_may_overflow &=
168
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
16
                }
170
17
                return narrow_integral || multiply_may_overflow;
171
17
            }
172
0
            return false;
173
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
120
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
72
            using Types2 = std::decay_t<decltype(types2)>;
122
72
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
72
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
72
                using FromFieldType = typename FromDataType::FieldType;
130
72
                using ToFieldType = typename ToDataType::FieldType;
131
72
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
72
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
72
                UInt32 to_max_digits = 0;
143
72
                UInt32 to_precision = 0;
144
72
                UInt32 to_scale = 0;
145
146
72
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
72
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
72
                    const auto* to_decimal_type =
150
72
                            check_and_get_data_type<ToDataType>(to_type.get());
151
72
                    to_precision = to_decimal_type->get_precision();
152
72
                    ToDataType::check_type_precision(to_precision);
153
154
72
                    to_scale = to_decimal_type->get_scale();
155
72
                    ToDataType::check_type_scale(to_scale);
156
72
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
72
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
72
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
72
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
72
                if (to_scale > from_scale) {
167
59
                    multiply_may_overflow &=
168
59
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
59
                }
170
72
                return narrow_integral || multiply_may_overflow;
171
72
            }
172
0
            return false;
173
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
120
49
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
49
            using Types2 = std::decay_t<decltype(types2)>;
122
49
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
49
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
49
                using FromFieldType = typename FromDataType::FieldType;
130
49
                using ToFieldType = typename ToDataType::FieldType;
131
49
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
49
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
49
                UInt32 to_max_digits = 0;
143
49
                UInt32 to_precision = 0;
144
49
                UInt32 to_scale = 0;
145
146
49
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
49
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
49
                    const auto* to_decimal_type =
150
49
                            check_and_get_data_type<ToDataType>(to_type.get());
151
49
                    to_precision = to_decimal_type->get_precision();
152
49
                    ToDataType::check_type_precision(to_precision);
153
154
49
                    to_scale = to_decimal_type->get_scale();
155
49
                    ToDataType::check_type_scale(to_scale);
156
49
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
49
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
49
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
49
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
49
                if (to_scale > from_scale) {
167
38
                    multiply_may_overflow &=
168
38
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
38
                }
170
49
                return narrow_integral || multiply_may_overflow;
171
49
            }
172
0
            return false;
173
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
120
454
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
454
            using Types2 = std::decay_t<decltype(types2)>;
122
454
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
454
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
454
                using FromFieldType = typename FromDataType::FieldType;
130
454
                using ToFieldType = typename ToDataType::FieldType;
131
454
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
454
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
454
                UInt32 to_max_digits = 0;
143
454
                UInt32 to_precision = 0;
144
454
                UInt32 to_scale = 0;
145
146
454
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
454
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
454
                    const auto* to_decimal_type =
150
454
                            check_and_get_data_type<ToDataType>(to_type.get());
151
454
                    to_precision = to_decimal_type->get_precision();
152
454
                    ToDataType::check_type_precision(to_precision);
153
154
454
                    to_scale = to_decimal_type->get_scale();
155
454
                    ToDataType::check_type_scale(to_scale);
156
454
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
454
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
454
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
454
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
454
                if (to_scale > from_scale) {
167
303
                    multiply_may_overflow &=
168
303
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
303
                }
170
454
                return narrow_integral || multiply_may_overflow;
171
454
            }
172
0
            return false;
173
454
        });
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
120
53
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
53
            using Types2 = std::decay_t<decltype(types2)>;
122
53
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
53
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
53
                using FromFieldType = typename FromDataType::FieldType;
130
53
                using ToFieldType = typename ToDataType::FieldType;
131
53
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
53
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
53
                UInt32 to_max_digits = 0;
143
53
                UInt32 to_precision = 0;
144
53
                UInt32 to_scale = 0;
145
146
53
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
53
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
53
                    const auto* to_decimal_type =
150
53
                            check_and_get_data_type<ToDataType>(to_type.get());
151
53
                    to_precision = to_decimal_type->get_precision();
152
53
                    ToDataType::check_type_precision(to_precision);
153
154
53
                    to_scale = to_decimal_type->get_scale();
155
53
                    ToDataType::check_type_scale(to_scale);
156
53
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
53
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
53
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
53
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
53
                if (to_scale > from_scale) {
167
32
                    multiply_may_overflow &=
168
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
32
                }
170
53
                return narrow_integral || multiply_may_overflow;
171
53
            }
172
0
            return false;
173
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
120
65
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
65
            using Types2 = std::decay_t<decltype(types2)>;
122
65
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
65
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
65
                using FromFieldType = typename FromDataType::FieldType;
130
65
                using ToFieldType = typename ToDataType::FieldType;
131
65
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
65
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
65
                UInt32 to_max_digits = 0;
143
65
                UInt32 to_precision = 0;
144
65
                UInt32 to_scale = 0;
145
146
65
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
65
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
65
                    const auto* to_decimal_type =
150
65
                            check_and_get_data_type<ToDataType>(to_type.get());
151
65
                    to_precision = to_decimal_type->get_precision();
152
65
                    ToDataType::check_type_precision(to_precision);
153
154
65
                    to_scale = to_decimal_type->get_scale();
155
65
                    ToDataType::check_type_scale(to_scale);
156
65
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
65
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
65
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
65
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
65
                if (to_scale > from_scale) {
167
39
                    multiply_may_overflow &=
168
39
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
39
                }
170
65
                return narrow_integral || multiply_may_overflow;
171
65
            }
172
0
            return false;
173
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
120
107
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
107
            using Types2 = std::decay_t<decltype(types2)>;
122
107
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
107
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
107
                using FromFieldType = typename FromDataType::FieldType;
130
107
                using ToFieldType = typename ToDataType::FieldType;
131
107
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
107
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
107
                UInt32 to_max_digits = 0;
143
107
                UInt32 to_precision = 0;
144
107
                UInt32 to_scale = 0;
145
146
107
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
107
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
107
                    const auto* to_decimal_type =
150
107
                            check_and_get_data_type<ToDataType>(to_type.get());
151
107
                    to_precision = to_decimal_type->get_precision();
152
107
                    ToDataType::check_type_precision(to_precision);
153
154
107
                    to_scale = to_decimal_type->get_scale();
155
107
                    ToDataType::check_type_scale(to_scale);
156
107
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
107
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
107
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
107
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
107
                if (to_scale > from_scale) {
167
65
                    multiply_may_overflow &=
168
65
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
65
                }
170
107
                return narrow_integral || multiply_may_overflow;
171
107
            }
172
0
            return false;
173
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
120
215
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
215
            using Types2 = std::decay_t<decltype(types2)>;
122
215
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
215
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
215
                using FromFieldType = typename FromDataType::FieldType;
130
215
                using ToFieldType = typename ToDataType::FieldType;
131
215
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
215
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
215
                UInt32 to_max_digits = 0;
143
215
                UInt32 to_precision = 0;
144
215
                UInt32 to_scale = 0;
145
146
215
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
215
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
215
                    const auto* to_decimal_type =
150
215
                            check_and_get_data_type<ToDataType>(to_type.get());
151
215
                    to_precision = to_decimal_type->get_precision();
152
215
                    ToDataType::check_type_precision(to_precision);
153
154
215
                    to_scale = to_decimal_type->get_scale();
155
215
                    ToDataType::check_type_scale(to_scale);
156
215
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
215
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
215
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
215
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
215
                if (to_scale > from_scale) {
167
182
                    multiply_may_overflow &=
168
182
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
182
                }
170
215
                return narrow_integral || multiply_may_overflow;
171
215
            }
172
0
            return false;
173
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
120
1.10k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.10k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.10k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1.10k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.10k
                using FromFieldType = typename FromDataType::FieldType;
130
1.10k
                using ToFieldType = typename ToDataType::FieldType;
131
1.10k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.10k
                UInt32 from_scale = 0;
133
134
1.10k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.10k
                    const auto* from_decimal_type =
136
1.10k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.10k
                    from_precision =
138
1.10k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.10k
                    from_scale = from_decimal_type->get_scale();
140
1.10k
                }
141
142
1.10k
                UInt32 to_max_digits = 0;
143
1.10k
                UInt32 to_precision = 0;
144
1.10k
                UInt32 to_scale = 0;
145
146
1.10k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.10k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.10k
                    const auto* to_decimal_type =
150
1.10k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.10k
                    to_precision = to_decimal_type->get_precision();
152
1.10k
                    ToDataType::check_type_precision(to_precision);
153
154
1.10k
                    to_scale = to_decimal_type->get_scale();
155
1.10k
                    ToDataType::check_type_scale(to_scale);
156
1.10k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
1.10k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.10k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.10k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.10k
                if (to_scale > from_scale) {
167
767
                    multiply_may_overflow &=
168
767
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
767
                }
170
1.10k
                return narrow_integral || multiply_may_overflow;
171
1.10k
            }
172
0
            return false;
173
1.10k
        });
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
120
757
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
757
            using Types2 = std::decay_t<decltype(types2)>;
122
757
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
757
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
757
                using FromFieldType = typename FromDataType::FieldType;
130
757
                using ToFieldType = typename ToDataType::FieldType;
131
757
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
757
                UInt32 from_scale = 0;
133
134
757
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
757
                    const auto* from_decimal_type =
136
757
                            check_and_get_data_type<FromDataType>(from_type.get());
137
757
                    from_precision =
138
757
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
757
                    from_scale = from_decimal_type->get_scale();
140
757
                }
141
142
757
                UInt32 to_max_digits = 0;
143
757
                UInt32 to_precision = 0;
144
757
                UInt32 to_scale = 0;
145
146
757
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
757
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
757
                    const auto* to_decimal_type =
150
757
                            check_and_get_data_type<ToDataType>(to_type.get());
151
757
                    to_precision = to_decimal_type->get_precision();
152
757
                    ToDataType::check_type_precision(to_precision);
153
154
757
                    to_scale = to_decimal_type->get_scale();
155
757
                    ToDataType::check_type_scale(to_scale);
156
757
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
757
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
757
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
757
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
757
                if (to_scale > from_scale) {
167
157
                    multiply_may_overflow &=
168
157
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
157
                }
170
757
                return narrow_integral || multiply_may_overflow;
171
757
            }
172
0
            return false;
173
757
        });
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
120
264
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
264
            using Types2 = std::decay_t<decltype(types2)>;
122
264
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
264
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
264
                using FromFieldType = typename FromDataType::FieldType;
130
264
                using ToFieldType = typename ToDataType::FieldType;
131
264
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
264
                UInt32 from_scale = 0;
133
134
264
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
264
                    const auto* from_decimal_type =
136
264
                            check_and_get_data_type<FromDataType>(from_type.get());
137
264
                    from_precision =
138
264
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
264
                    from_scale = from_decimal_type->get_scale();
140
264
                }
141
142
264
                UInt32 to_max_digits = 0;
143
264
                UInt32 to_precision = 0;
144
264
                UInt32 to_scale = 0;
145
146
264
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
264
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
264
                    const auto* to_decimal_type =
150
264
                            check_and_get_data_type<ToDataType>(to_type.get());
151
264
                    to_precision = to_decimal_type->get_precision();
152
264
                    ToDataType::check_type_precision(to_precision);
153
154
264
                    to_scale = to_decimal_type->get_scale();
155
264
                    ToDataType::check_type_scale(to_scale);
156
264
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
264
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
264
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
264
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
264
                if (to_scale > from_scale) {
167
50
                    multiply_may_overflow &=
168
50
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
50
                }
170
264
                return narrow_integral || multiply_may_overflow;
171
264
            }
172
0
            return false;
173
264
        });
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
120
426
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
426
            using Types2 = std::decay_t<decltype(types2)>;
122
426
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
426
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
426
                using FromFieldType = typename FromDataType::FieldType;
130
426
                using ToFieldType = typename ToDataType::FieldType;
131
426
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
426
                UInt32 from_scale = 0;
133
134
426
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
426
                    const auto* from_decimal_type =
136
426
                            check_and_get_data_type<FromDataType>(from_type.get());
137
426
                    from_precision =
138
426
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
426
                    from_scale = from_decimal_type->get_scale();
140
426
                }
141
142
426
                UInt32 to_max_digits = 0;
143
426
                UInt32 to_precision = 0;
144
426
                UInt32 to_scale = 0;
145
146
426
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
426
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
426
                    const auto* to_decimal_type =
150
426
                            check_and_get_data_type<ToDataType>(to_type.get());
151
426
                    to_precision = to_decimal_type->get_precision();
152
426
                    ToDataType::check_type_precision(to_precision);
153
154
426
                    to_scale = to_decimal_type->get_scale();
155
426
                    ToDataType::check_type_scale(to_scale);
156
426
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
426
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
426
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
426
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
426
                if (to_scale > from_scale) {
167
144
                    multiply_may_overflow &=
168
144
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
144
                }
170
426
                return narrow_integral || multiply_may_overflow;
171
426
            }
172
0
            return false;
173
426
        });
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
120
401
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
401
            using Types2 = std::decay_t<decltype(types2)>;
122
401
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
401
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
401
                using FromFieldType = typename FromDataType::FieldType;
130
401
                using ToFieldType = typename ToDataType::FieldType;
131
401
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
401
                UInt32 from_scale = 0;
133
134
401
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
401
                    const auto* from_decimal_type =
136
401
                            check_and_get_data_type<FromDataType>(from_type.get());
137
401
                    from_precision =
138
401
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
401
                    from_scale = from_decimal_type->get_scale();
140
401
                }
141
142
401
                UInt32 to_max_digits = 0;
143
401
                UInt32 to_precision = 0;
144
401
                UInt32 to_scale = 0;
145
146
401
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
401
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
401
                    const auto* to_decimal_type =
150
401
                            check_and_get_data_type<ToDataType>(to_type.get());
151
401
                    to_precision = to_decimal_type->get_precision();
152
401
                    ToDataType::check_type_precision(to_precision);
153
154
401
                    to_scale = to_decimal_type->get_scale();
155
401
                    ToDataType::check_type_scale(to_scale);
156
401
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
401
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
401
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
401
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
401
                if (to_scale > from_scale) {
167
137
                    multiply_may_overflow &=
168
137
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
137
                }
170
401
                return narrow_integral || multiply_may_overflow;
171
401
            }
172
0
            return false;
173
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
120
7.90k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.90k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.90k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
7.90k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
7.90k
                return false;
127
7.90k
            }
128
7.90k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
7.90k
                using FromFieldType = typename FromDataType::FieldType;
130
7.90k
                using ToFieldType = typename ToDataType::FieldType;
131
7.90k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
7.90k
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
7.90k
                UInt32 to_max_digits = 0;
143
7.90k
                UInt32 to_precision = 0;
144
7.90k
                UInt32 to_scale = 0;
145
146
7.90k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
7.90k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
7.90k
                    const auto* to_decimal_type =
150
7.90k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
7.90k
                    to_precision = to_decimal_type->get_precision();
152
7.90k
                    ToDataType::check_type_precision(to_precision);
153
154
7.90k
                    to_scale = to_decimal_type->get_scale();
155
7.90k
                    ToDataType::check_type_scale(to_scale);
156
7.90k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
7.90k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
7.90k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
7.90k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
7.90k
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
7.90k
                return narrow_integral || multiply_may_overflow;
171
7.90k
            }
172
0
            return false;
173
7.90k
        });
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
20
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
20
                using FromFieldType = typename FromDataType::FieldType;
130
20
                using ToFieldType = typename ToDataType::FieldType;
131
20
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
20
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
20
                UInt32 to_max_digits = 0;
143
20
                UInt32 to_precision = 0;
144
20
                UInt32 to_scale = 0;
145
146
20
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
20
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
20
                    const auto* to_decimal_type =
150
20
                            check_and_get_data_type<ToDataType>(to_type.get());
151
20
                    to_precision = to_decimal_type->get_precision();
152
20
                    ToDataType::check_type_precision(to_precision);
153
154
20
                    to_scale = to_decimal_type->get_scale();
155
20
                    ToDataType::check_type_scale(to_scale);
156
20
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
20
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
20
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
20
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
20
                if (to_scale > from_scale) {
167
20
                    multiply_may_overflow &=
168
20
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
20
                }
170
20
                return narrow_integral || multiply_may_overflow;
171
20
            }
172
0
            return false;
173
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
120
15
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
15
            using Types2 = std::decay_t<decltype(types2)>;
122
15
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
15
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
15
                using FromFieldType = typename FromDataType::FieldType;
130
15
                using ToFieldType = typename ToDataType::FieldType;
131
15
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
15
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
15
                UInt32 to_max_digits = 0;
143
15
                UInt32 to_precision = 0;
144
15
                UInt32 to_scale = 0;
145
146
15
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
15
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
15
                    const auto* to_decimal_type =
150
15
                            check_and_get_data_type<ToDataType>(to_type.get());
151
15
                    to_precision = to_decimal_type->get_precision();
152
15
                    ToDataType::check_type_precision(to_precision);
153
154
15
                    to_scale = to_decimal_type->get_scale();
155
15
                    ToDataType::check_type_scale(to_scale);
156
15
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
15
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
15
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
16
                if (to_scale > from_scale) {
167
16
                    multiply_may_overflow &=
168
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
16
                }
170
16
                return narrow_integral || multiply_may_overflow;
171
15
            }
172
0
            return false;
173
15
        });
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
120
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
16
            using Types2 = std::decay_t<decltype(types2)>;
122
16
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
16
                using FromFieldType = typename FromDataType::FieldType;
130
16
                using ToFieldType = typename ToDataType::FieldType;
131
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
16
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
16
                UInt32 to_max_digits = 0;
143
16
                UInt32 to_precision = 0;
144
16
                UInt32 to_scale = 0;
145
146
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
16
                    const auto* to_decimal_type =
150
16
                            check_and_get_data_type<ToDataType>(to_type.get());
151
16
                    to_precision = to_decimal_type->get_precision();
152
16
                    ToDataType::check_type_precision(to_precision);
153
154
16
                    to_scale = to_decimal_type->get_scale();
155
16
                    ToDataType::check_type_scale(to_scale);
156
16
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
16
                if (to_scale > from_scale) {
167
16
                    multiply_may_overflow &=
168
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
16
                }
170
16
                return narrow_integral || multiply_may_overflow;
171
16
            }
172
0
            return false;
173
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
120
15
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
15
            using Types2 = std::decay_t<decltype(types2)>;
122
15
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
15
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
15
                using FromFieldType = typename FromDataType::FieldType;
130
15
                using ToFieldType = typename ToDataType::FieldType;
131
15
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
15
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
15
                UInt32 to_max_digits = 0;
143
15
                UInt32 to_precision = 0;
144
15
                UInt32 to_scale = 0;
145
146
15
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
15
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
15
                    const auto* to_decimal_type =
150
15
                            check_and_get_data_type<ToDataType>(to_type.get());
151
15
                    to_precision = to_decimal_type->get_precision();
152
15
                    ToDataType::check_type_precision(to_precision);
153
154
15
                    to_scale = to_decimal_type->get_scale();
155
15
                    ToDataType::check_type_scale(to_scale);
156
15
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
15
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
15
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
15
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
15
                if (to_scale > from_scale) {
167
13
                    multiply_may_overflow &=
168
13
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
13
                }
170
15
                return narrow_integral || multiply_may_overflow;
171
15
            }
172
0
            return false;
173
15
        });
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
120
32
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
32
            using Types2 = std::decay_t<decltype(types2)>;
122
32
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
32
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
32
                using FromFieldType = typename FromDataType::FieldType;
130
32
                using ToFieldType = typename ToDataType::FieldType;
131
32
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
32
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
32
                UInt32 to_max_digits = 0;
143
32
                UInt32 to_precision = 0;
144
32
                UInt32 to_scale = 0;
145
146
32
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
32
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
32
                    const auto* to_decimal_type =
150
32
                            check_and_get_data_type<ToDataType>(to_type.get());
151
32
                    to_precision = to_decimal_type->get_precision();
152
32
                    ToDataType::check_type_precision(to_precision);
153
154
32
                    to_scale = to_decimal_type->get_scale();
155
32
                    ToDataType::check_type_scale(to_scale);
156
32
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
32
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
32
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
32
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
32
                if (to_scale > from_scale) {
167
31
                    multiply_may_overflow &=
168
31
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
31
                }
170
32
                return narrow_integral || multiply_may_overflow;
171
32
            }
172
0
            return false;
173
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
120
127
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
127
            using Types2 = std::decay_t<decltype(types2)>;
122
127
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
127
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
127
                using FromFieldType = typename FromDataType::FieldType;
130
127
                using ToFieldType = typename ToDataType::FieldType;
131
127
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
127
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
127
                UInt32 to_max_digits = 0;
143
127
                UInt32 to_precision = 0;
144
127
                UInt32 to_scale = 0;
145
146
127
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
127
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
127
                    const auto* to_decimal_type =
150
127
                            check_and_get_data_type<ToDataType>(to_type.get());
151
127
                    to_precision = to_decimal_type->get_precision();
152
127
                    ToDataType::check_type_precision(to_precision);
153
154
127
                    to_scale = to_decimal_type->get_scale();
155
127
                    ToDataType::check_type_scale(to_scale);
156
127
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
127
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
128
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
127
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
128
                if (to_scale > from_scale) {
167
128
                    multiply_may_overflow &=
168
128
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
128
                }
170
127
                return narrow_integral || multiply_may_overflow;
171
127
            }
172
0
            return false;
173
127
        });
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
120
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1
            using Types2 = std::decay_t<decltype(types2)>;
122
1
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
1
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
1
                return false;
127
1
            }
128
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1
                using FromFieldType = typename FromDataType::FieldType;
130
1
                using ToFieldType = typename ToDataType::FieldType;
131
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
1
                UInt32 to_max_digits = 0;
143
1
                UInt32 to_precision = 0;
144
1
                UInt32 to_scale = 0;
145
146
1
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1
                    const auto* to_decimal_type =
150
1
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1
                    to_precision = to_decimal_type->get_precision();
152
1
                    ToDataType::check_type_precision(to_precision);
153
154
1
                    to_scale = to_decimal_type->get_scale();
155
1
                    ToDataType::check_type_scale(to_scale);
156
1
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
1
                return narrow_integral || multiply_may_overflow;
171
1
            }
172
0
            return false;
173
1
        });
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21
                using FromFieldType = typename FromDataType::FieldType;
130
21
                using ToFieldType = typename ToDataType::FieldType;
131
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
21
                UInt32 to_max_digits = 0;
143
21
                UInt32 to_precision = 0;
144
21
                UInt32 to_scale = 0;
145
146
21
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
21
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
21
                    const auto* to_decimal_type =
150
21
                            check_and_get_data_type<ToDataType>(to_type.get());
151
21
                    to_precision = to_decimal_type->get_precision();
152
21
                    ToDataType::check_type_precision(to_precision);
153
154
21
                    to_scale = to_decimal_type->get_scale();
155
21
                    ToDataType::check_type_scale(to_scale);
156
21
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21
                if (to_scale > from_scale) {
167
21
                    multiply_may_overflow &=
168
21
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
21
                }
170
22
                return narrow_integral || multiply_may_overflow;
171
21
            }
172
0
            return false;
173
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
120
179
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
179
            using Types2 = std::decay_t<decltype(types2)>;
122
179
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
179
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
179
                using FromFieldType = typename FromDataType::FieldType;
130
179
                using ToFieldType = typename ToDataType::FieldType;
131
179
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
179
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
179
                UInt32 to_max_digits = 0;
143
179
                UInt32 to_precision = 0;
144
179
                UInt32 to_scale = 0;
145
146
179
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
179
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
179
                    const auto* to_decimal_type =
150
179
                            check_and_get_data_type<ToDataType>(to_type.get());
151
179
                    to_precision = to_decimal_type->get_precision();
152
179
                    ToDataType::check_type_precision(to_precision);
153
154
179
                    to_scale = to_decimal_type->get_scale();
155
179
                    ToDataType::check_type_scale(to_scale);
156
179
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
179
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
179
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
179
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
179
                if (to_scale > from_scale) {
167
128
                    multiply_may_overflow &=
168
128
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
128
                }
170
179
                return narrow_integral || multiply_may_overflow;
171
179
            }
172
0
            return false;
173
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
120
165
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
165
            using Types2 = std::decay_t<decltype(types2)>;
122
165
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
165
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
165
                using FromFieldType = typename FromDataType::FieldType;
130
165
                using ToFieldType = typename ToDataType::FieldType;
131
165
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
165
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
165
                UInt32 to_max_digits = 0;
143
165
                UInt32 to_precision = 0;
144
165
                UInt32 to_scale = 0;
145
146
165
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
165
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
165
                    const auto* to_decimal_type =
150
165
                            check_and_get_data_type<ToDataType>(to_type.get());
151
165
                    to_precision = to_decimal_type->get_precision();
152
165
                    ToDataType::check_type_precision(to_precision);
153
154
165
                    to_scale = to_decimal_type->get_scale();
155
165
                    ToDataType::check_type_scale(to_scale);
156
165
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
165
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
165
                if (to_scale > from_scale) {
167
115
                    multiply_may_overflow &=
168
115
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
115
                }
170
165
                return narrow_integral || multiply_may_overflow;
171
165
            }
172
0
            return false;
173
165
        });
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
120
442
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
442
            using Types2 = std::decay_t<decltype(types2)>;
122
442
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
442
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
442
                using FromFieldType = typename FromDataType::FieldType;
130
442
                using ToFieldType = typename ToDataType::FieldType;
131
442
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
442
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
442
                UInt32 to_max_digits = 0;
143
442
                UInt32 to_precision = 0;
144
442
                UInt32 to_scale = 0;
145
146
442
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
442
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
442
                    const auto* to_decimal_type =
150
442
                            check_and_get_data_type<ToDataType>(to_type.get());
151
442
                    to_precision = to_decimal_type->get_precision();
152
442
                    ToDataType::check_type_precision(to_precision);
153
154
442
                    to_scale = to_decimal_type->get_scale();
155
442
                    ToDataType::check_type_scale(to_scale);
156
442
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
442
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
442
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
442
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
442
                if (to_scale > from_scale) {
167
386
                    multiply_may_overflow &=
168
386
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
386
                }
170
442
                return narrow_integral || multiply_may_overflow;
171
442
            }
172
0
            return false;
173
442
        });
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
120
974
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
974
            using Types2 = std::decay_t<decltype(types2)>;
122
974
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
974
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
974
                using FromFieldType = typename FromDataType::FieldType;
130
974
                using ToFieldType = typename ToDataType::FieldType;
131
974
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
974
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
974
                UInt32 to_max_digits = 0;
143
974
                UInt32 to_precision = 0;
144
974
                UInt32 to_scale = 0;
145
146
974
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
974
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
974
                    const auto* to_decimal_type =
150
974
                            check_and_get_data_type<ToDataType>(to_type.get());
151
974
                    to_precision = to_decimal_type->get_precision();
152
974
                    ToDataType::check_type_precision(to_precision);
153
154
974
                    to_scale = to_decimal_type->get_scale();
155
974
                    ToDataType::check_type_scale(to_scale);
156
974
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
974
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
974
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
974
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
974
                if (to_scale > from_scale) {
167
407
                    multiply_may_overflow &=
168
407
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
407
                }
170
974
                return narrow_integral || multiply_may_overflow;
171
974
            }
172
0
            return false;
173
974
        });
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
120
364
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
364
            using Types2 = std::decay_t<decltype(types2)>;
122
364
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
364
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
364
                using FromFieldType = typename FromDataType::FieldType;
130
364
                using ToFieldType = typename ToDataType::FieldType;
131
364
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
364
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
364
                UInt32 to_max_digits = 0;
143
364
                UInt32 to_precision = 0;
144
364
                UInt32 to_scale = 0;
145
146
364
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
364
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
364
                    const auto* to_decimal_type =
150
364
                            check_and_get_data_type<ToDataType>(to_type.get());
151
364
                    to_precision = to_decimal_type->get_precision();
152
364
                    ToDataType::check_type_precision(to_precision);
153
154
364
                    to_scale = to_decimal_type->get_scale();
155
364
                    ToDataType::check_type_scale(to_scale);
156
364
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
364
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
364
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
364
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
364
                if (to_scale > from_scale) {
167
196
                    multiply_may_overflow &=
168
196
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
196
                }
170
364
                return narrow_integral || multiply_may_overflow;
171
364
            }
172
0
            return false;
173
364
        });
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
120
248
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
248
            using Types2 = std::decay_t<decltype(types2)>;
122
248
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
248
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
248
                using FromFieldType = typename FromDataType::FieldType;
130
248
                using ToFieldType = typename ToDataType::FieldType;
131
248
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
248
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
248
                UInt32 to_max_digits = 0;
143
248
                UInt32 to_precision = 0;
144
248
                UInt32 to_scale = 0;
145
146
248
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
248
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
248
                    const auto* to_decimal_type =
150
248
                            check_and_get_data_type<ToDataType>(to_type.get());
151
248
                    to_precision = to_decimal_type->get_precision();
152
248
                    ToDataType::check_type_precision(to_precision);
153
154
248
                    to_scale = to_decimal_type->get_scale();
155
248
                    ToDataType::check_type_scale(to_scale);
156
248
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
248
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
248
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
248
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
248
                if (to_scale > from_scale) {
167
130
                    multiply_may_overflow &=
168
130
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
130
                }
170
248
                return narrow_integral || multiply_may_overflow;
171
248
            }
172
0
            return false;
173
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
120
489
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
489
            using Types2 = std::decay_t<decltype(types2)>;
122
489
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
489
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
489
                using FromFieldType = typename FromDataType::FieldType;
130
489
                using ToFieldType = typename ToDataType::FieldType;
131
489
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
489
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
489
                UInt32 to_max_digits = 0;
143
489
                UInt32 to_precision = 0;
144
489
                UInt32 to_scale = 0;
145
146
489
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
489
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
489
                    const auto* to_decimal_type =
150
489
                            check_and_get_data_type<ToDataType>(to_type.get());
151
489
                    to_precision = to_decimal_type->get_precision();
152
489
                    ToDataType::check_type_precision(to_precision);
153
154
489
                    to_scale = to_decimal_type->get_scale();
155
489
                    ToDataType::check_type_scale(to_scale);
156
489
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
489
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
489
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
489
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
489
                if (to_scale > from_scale) {
167
379
                    multiply_may_overflow &=
168
379
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
379
                }
170
489
                return narrow_integral || multiply_may_overflow;
171
489
            }
172
0
            return false;
173
489
        });
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
120
743
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
743
            using Types2 = std::decay_t<decltype(types2)>;
122
743
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
743
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
743
                using FromFieldType = typename FromDataType::FieldType;
130
743
                using ToFieldType = typename ToDataType::FieldType;
131
743
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
743
                UInt32 from_scale = 0;
133
134
743
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
743
                    const auto* from_decimal_type =
136
743
                            check_and_get_data_type<FromDataType>(from_type.get());
137
743
                    from_precision =
138
743
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
743
                    from_scale = from_decimal_type->get_scale();
140
743
                }
141
142
743
                UInt32 to_max_digits = 0;
143
743
                UInt32 to_precision = 0;
144
743
                UInt32 to_scale = 0;
145
146
743
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
743
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
743
                    const auto* to_decimal_type =
150
743
                            check_and_get_data_type<ToDataType>(to_type.get());
151
743
                    to_precision = to_decimal_type->get_precision();
152
743
                    ToDataType::check_type_precision(to_precision);
153
154
743
                    to_scale = to_decimal_type->get_scale();
155
743
                    ToDataType::check_type_scale(to_scale);
156
743
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
743
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
743
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
743
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
743
                if (to_scale > from_scale) {
167
602
                    multiply_may_overflow &=
168
602
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
602
                }
170
743
                return narrow_integral || multiply_may_overflow;
171
743
            }
172
0
            return false;
173
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
120
1.05k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.05k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.05k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1.05k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.05k
                using FromFieldType = typename FromDataType::FieldType;
130
1.05k
                using ToFieldType = typename ToDataType::FieldType;
131
1.05k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.05k
                UInt32 from_scale = 0;
133
134
1.05k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.05k
                    const auto* from_decimal_type =
136
1.05k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.05k
                    from_precision =
138
1.05k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.05k
                    from_scale = from_decimal_type->get_scale();
140
1.05k
                }
141
142
1.05k
                UInt32 to_max_digits = 0;
143
1.05k
                UInt32 to_precision = 0;
144
1.05k
                UInt32 to_scale = 0;
145
146
1.05k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.05k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.05k
                    const auto* to_decimal_type =
150
1.05k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.05k
                    to_precision = to_decimal_type->get_precision();
152
1.05k
                    ToDataType::check_type_precision(to_precision);
153
154
1.05k
                    to_scale = to_decimal_type->get_scale();
155
1.05k
                    ToDataType::check_type_scale(to_scale);
156
1.05k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
1.05k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.05k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.05k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.05k
                if (to_scale > from_scale) {
167
718
                    multiply_may_overflow &=
168
718
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
718
                }
170
1.05k
                return narrow_integral || multiply_may_overflow;
171
1.05k
            }
172
0
            return false;
173
1.05k
        });
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
120
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
318
            using Types2 = std::decay_t<decltype(types2)>;
122
318
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
318
                using FromFieldType = typename FromDataType::FieldType;
130
318
                using ToFieldType = typename ToDataType::FieldType;
131
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
318
                UInt32 from_scale = 0;
133
134
318
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
318
                    const auto* from_decimal_type =
136
318
                            check_and_get_data_type<FromDataType>(from_type.get());
137
318
                    from_precision =
138
318
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
318
                    from_scale = from_decimal_type->get_scale();
140
318
                }
141
142
318
                UInt32 to_max_digits = 0;
143
318
                UInt32 to_precision = 0;
144
318
                UInt32 to_scale = 0;
145
146
318
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
318
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
318
                    const auto* to_decimal_type =
150
318
                            check_and_get_data_type<ToDataType>(to_type.get());
151
318
                    to_precision = to_decimal_type->get_precision();
152
318
                    ToDataType::check_type_precision(to_precision);
153
154
318
                    to_scale = to_decimal_type->get_scale();
155
318
                    ToDataType::check_type_scale(to_scale);
156
318
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
318
                if (to_scale > from_scale) {
167
71
                    multiply_may_overflow &=
168
71
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
71
                }
170
318
                return narrow_integral || multiply_may_overflow;
171
318
            }
172
0
            return false;
173
318
        });
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
120
1.51k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.51k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.51k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1.51k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.51k
                using FromFieldType = typename FromDataType::FieldType;
130
1.51k
                using ToFieldType = typename ToDataType::FieldType;
131
1.51k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.51k
                UInt32 from_scale = 0;
133
134
1.51k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.51k
                    const auto* from_decimal_type =
136
1.51k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.51k
                    from_precision =
138
1.51k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.51k
                    from_scale = from_decimal_type->get_scale();
140
1.51k
                }
141
142
1.51k
                UInt32 to_max_digits = 0;
143
1.51k
                UInt32 to_precision = 0;
144
1.51k
                UInt32 to_scale = 0;
145
146
1.51k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.51k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.51k
                    const auto* to_decimal_type =
150
1.51k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.51k
                    to_precision = to_decimal_type->get_precision();
152
1.51k
                    ToDataType::check_type_precision(to_precision);
153
154
1.51k
                    to_scale = to_decimal_type->get_scale();
155
1.51k
                    ToDataType::check_type_scale(to_scale);
156
1.51k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
1.51k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.51k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.51k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.51k
                if (to_scale > from_scale) {
167
706
                    multiply_may_overflow &=
168
706
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
706
                }
170
1.51k
                return narrow_integral || multiply_may_overflow;
171
1.51k
            }
172
0
            return false;
173
1.51k
        });
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
120
948
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
948
            using Types2 = std::decay_t<decltype(types2)>;
122
948
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
948
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
948
                using FromFieldType = typename FromDataType::FieldType;
130
948
                using ToFieldType = typename ToDataType::FieldType;
131
948
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
948
                UInt32 from_scale = 0;
133
134
948
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
948
                    const auto* from_decimal_type =
136
948
                            check_and_get_data_type<FromDataType>(from_type.get());
137
948
                    from_precision =
138
948
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
948
                    from_scale = from_decimal_type->get_scale();
140
948
                }
141
142
948
                UInt32 to_max_digits = 0;
143
948
                UInt32 to_precision = 0;
144
948
                UInt32 to_scale = 0;
145
146
948
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
948
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
948
                    const auto* to_decimal_type =
150
948
                            check_and_get_data_type<ToDataType>(to_type.get());
151
948
                    to_precision = to_decimal_type->get_precision();
152
948
                    ToDataType::check_type_precision(to_precision);
153
154
948
                    to_scale = to_decimal_type->get_scale();
155
948
                    ToDataType::check_type_scale(to_scale);
156
948
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
948
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
948
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
948
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
948
                if (to_scale > from_scale) {
167
394
                    multiply_may_overflow &=
168
394
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
394
                }
170
948
                return narrow_integral || multiply_may_overflow;
171
948
            }
172
0
            return false;
173
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
120
154k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
154k
            using Types2 = std::decay_t<decltype(types2)>;
122
154k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
154k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
154k
                return false;
127
154k
            }
128
154k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
154k
                using FromFieldType = typename FromDataType::FieldType;
130
154k
                using ToFieldType = typename ToDataType::FieldType;
131
154k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
154k
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
154k
                UInt32 to_max_digits = 0;
143
154k
                UInt32 to_precision = 0;
144
154k
                UInt32 to_scale = 0;
145
146
154k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
154k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
154k
                    const auto* to_decimal_type =
150
154k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
154k
                    to_precision = to_decimal_type->get_precision();
152
154k
                    ToDataType::check_type_precision(to_precision);
153
154
154k
                    to_scale = to_decimal_type->get_scale();
155
154k
                    ToDataType::check_type_scale(to_scale);
156
154k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
154k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
154k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
154k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
154k
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
154k
                return narrow_integral || multiply_may_overflow;
171
154k
            }
172
0
            return false;
173
154k
        });
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
7
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
7
                using FromFieldType = typename FromDataType::FieldType;
130
7
                using ToFieldType = typename ToDataType::FieldType;
131
7
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
7
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
7
                UInt32 to_max_digits = 0;
143
7
                UInt32 to_precision = 0;
144
7
                UInt32 to_scale = 0;
145
146
7
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
7
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
7
                    const auto* to_decimal_type =
150
7
                            check_and_get_data_type<ToDataType>(to_type.get());
151
7
                    to_precision = to_decimal_type->get_precision();
152
7
                    ToDataType::check_type_precision(to_precision);
153
154
7
                    to_scale = to_decimal_type->get_scale();
155
7
                    ToDataType::check_type_scale(to_scale);
156
7
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
7
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
7
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
7
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
7
                if (to_scale > from_scale) {
167
6
                    multiply_may_overflow &=
168
6
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
6
                }
170
7
                return narrow_integral || multiply_may_overflow;
171
7
            }
172
0
            return false;
173
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
120
160
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
160
            using Types2 = std::decay_t<decltype(types2)>;
122
160
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
160
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
160
                using FromFieldType = typename FromDataType::FieldType;
130
160
                using ToFieldType = typename ToDataType::FieldType;
131
160
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
160
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
160
                UInt32 to_max_digits = 0;
143
160
                UInt32 to_precision = 0;
144
160
                UInt32 to_scale = 0;
145
146
160
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
160
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
160
                    const auto* to_decimal_type =
150
160
                            check_and_get_data_type<ToDataType>(to_type.get());
151
160
                    to_precision = to_decimal_type->get_precision();
152
160
                    ToDataType::check_type_precision(to_precision);
153
154
160
                    to_scale = to_decimal_type->get_scale();
155
160
                    ToDataType::check_type_scale(to_scale);
156
160
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
160
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
160
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
160
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
160
                if (to_scale > from_scale) {
167
109
                    multiply_may_overflow &=
168
109
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
109
                }
170
160
                return narrow_integral || multiply_may_overflow;
171
160
            }
172
0
            return false;
173
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
120
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
158
            using Types2 = std::decay_t<decltype(types2)>;
122
158
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
158
                using FromFieldType = typename FromDataType::FieldType;
130
158
                using ToFieldType = typename ToDataType::FieldType;
131
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
158
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
158
                UInt32 to_max_digits = 0;
143
158
                UInt32 to_precision = 0;
144
158
                UInt32 to_scale = 0;
145
146
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
158
                    const auto* to_decimal_type =
150
158
                            check_and_get_data_type<ToDataType>(to_type.get());
151
158
                    to_precision = to_decimal_type->get_precision();
152
158
                    ToDataType::check_type_precision(to_precision);
153
154
158
                    to_scale = to_decimal_type->get_scale();
155
158
                    ToDataType::check_type_scale(to_scale);
156
158
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
158
                if (to_scale > from_scale) {
167
107
                    multiply_may_overflow &=
168
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
107
                }
170
158
                return narrow_integral || multiply_may_overflow;
171
158
            }
172
0
            return false;
173
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
120
176
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
176
            using Types2 = std::decay_t<decltype(types2)>;
122
176
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
176
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
176
                using FromFieldType = typename FromDataType::FieldType;
130
176
                using ToFieldType = typename ToDataType::FieldType;
131
176
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
176
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
176
                UInt32 to_max_digits = 0;
143
176
                UInt32 to_precision = 0;
144
176
                UInt32 to_scale = 0;
145
146
176
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
176
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
176
                    const auto* to_decimal_type =
150
176
                            check_and_get_data_type<ToDataType>(to_type.get());
151
176
                    to_precision = to_decimal_type->get_precision();
152
176
                    ToDataType::check_type_precision(to_precision);
153
154
176
                    to_scale = to_decimal_type->get_scale();
155
176
                    ToDataType::check_type_scale(to_scale);
156
176
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
176
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
176
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
176
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
176
                if (to_scale > from_scale) {
167
120
                    multiply_may_overflow &=
168
120
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
120
                }
170
176
                return narrow_integral || multiply_may_overflow;
171
176
            }
172
0
            return false;
173
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
120
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
158
            using Types2 = std::decay_t<decltype(types2)>;
122
158
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
158
                using FromFieldType = typename FromDataType::FieldType;
130
158
                using ToFieldType = typename ToDataType::FieldType;
131
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
158
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
158
                UInt32 to_max_digits = 0;
143
158
                UInt32 to_precision = 0;
144
158
                UInt32 to_scale = 0;
145
146
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
158
                    const auto* to_decimal_type =
150
158
                            check_and_get_data_type<ToDataType>(to_type.get());
151
158
                    to_precision = to_decimal_type->get_precision();
152
158
                    ToDataType::check_type_precision(to_precision);
153
154
158
                    to_scale = to_decimal_type->get_scale();
155
158
                    ToDataType::check_type_scale(to_scale);
156
158
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
158
                if (to_scale > from_scale) {
167
107
                    multiply_may_overflow &=
168
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
107
                }
170
158
                return narrow_integral || multiply_may_overflow;
171
158
            }
172
0
            return false;
173
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
120
232
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
232
            using Types2 = std::decay_t<decltype(types2)>;
122
232
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
232
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
232
                using FromFieldType = typename FromDataType::FieldType;
130
232
                using ToFieldType = typename ToDataType::FieldType;
131
232
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
232
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
232
                UInt32 to_max_digits = 0;
143
232
                UInt32 to_precision = 0;
144
232
                UInt32 to_scale = 0;
145
146
232
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
232
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
232
                    const auto* to_decimal_type =
150
232
                            check_and_get_data_type<ToDataType>(to_type.get());
151
232
                    to_precision = to_decimal_type->get_precision();
152
232
                    ToDataType::check_type_precision(to_precision);
153
154
232
                    to_scale = to_decimal_type->get_scale();
155
232
                    ToDataType::check_type_scale(to_scale);
156
232
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
232
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
232
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
232
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
232
                if (to_scale > from_scale) {
167
170
                    multiply_may_overflow &=
168
170
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
170
                }
170
232
                return narrow_integral || multiply_may_overflow;
171
232
            }
172
0
            return false;
173
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
120
224
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
224
            using Types2 = std::decay_t<decltype(types2)>;
122
224
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
224
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
224
                using FromFieldType = typename FromDataType::FieldType;
130
224
                using ToFieldType = typename ToDataType::FieldType;
131
224
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
224
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
224
                UInt32 to_max_digits = 0;
143
224
                UInt32 to_precision = 0;
144
224
                UInt32 to_scale = 0;
145
146
224
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
224
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
224
                    const auto* to_decimal_type =
150
224
                            check_and_get_data_type<ToDataType>(to_type.get());
151
224
                    to_precision = to_decimal_type->get_precision();
152
224
                    ToDataType::check_type_precision(to_precision);
153
154
224
                    to_scale = to_decimal_type->get_scale();
155
224
                    ToDataType::check_type_scale(to_scale);
156
224
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
224
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
224
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
224
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
224
                if (to_scale > from_scale) {
167
126
                    multiply_may_overflow &=
168
126
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
126
                }
170
224
                return narrow_integral || multiply_may_overflow;
171
224
            }
172
0
            return false;
173
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
120
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
318
            using Types2 = std::decay_t<decltype(types2)>;
122
318
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
318
                using FromFieldType = typename FromDataType::FieldType;
130
318
                using ToFieldType = typename ToDataType::FieldType;
131
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
318
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
318
                UInt32 to_max_digits = 0;
143
318
                UInt32 to_precision = 0;
144
318
                UInt32 to_scale = 0;
145
146
318
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
318
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
318
                    const auto* to_decimal_type =
150
318
                            check_and_get_data_type<ToDataType>(to_type.get());
151
318
                    to_precision = to_decimal_type->get_precision();
152
318
                    ToDataType::check_type_precision(to_precision);
153
154
318
                    to_scale = to_decimal_type->get_scale();
155
318
                    ToDataType::check_type_scale(to_scale);
156
318
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
318
                if (to_scale > from_scale) {
167
208
                    multiply_may_overflow &=
168
208
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
208
                }
170
318
                return narrow_integral || multiply_may_overflow;
171
318
            }
172
0
            return false;
173
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
120
567
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
567
            using Types2 = std::decay_t<decltype(types2)>;
122
567
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
567
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
567
                using FromFieldType = typename FromDataType::FieldType;
130
567
                using ToFieldType = typename ToDataType::FieldType;
131
567
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
567
                UInt32 from_scale = 0;
133
134
567
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
567
                    const auto* from_decimal_type =
136
567
                            check_and_get_data_type<FromDataType>(from_type.get());
137
567
                    from_precision =
138
567
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
567
                    from_scale = from_decimal_type->get_scale();
140
567
                }
141
142
567
                UInt32 to_max_digits = 0;
143
567
                UInt32 to_precision = 0;
144
567
                UInt32 to_scale = 0;
145
146
567
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
567
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
567
                    const auto* to_decimal_type =
150
567
                            check_and_get_data_type<ToDataType>(to_type.get());
151
567
                    to_precision = to_decimal_type->get_precision();
152
567
                    ToDataType::check_type_precision(to_precision);
153
154
567
                    to_scale = to_decimal_type->get_scale();
155
567
                    ToDataType::check_type_scale(to_scale);
156
567
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
567
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
567
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
567
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
567
                if (to_scale > from_scale) {
167
499
                    multiply_may_overflow &=
168
499
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
499
                }
170
567
                return narrow_integral || multiply_may_overflow;
171
567
            }
172
0
            return false;
173
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
120
919
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
919
            using Types2 = std::decay_t<decltype(types2)>;
122
919
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
919
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
919
                using FromFieldType = typename FromDataType::FieldType;
130
919
                using ToFieldType = typename ToDataType::FieldType;
131
919
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
919
                UInt32 from_scale = 0;
133
134
919
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
919
                    const auto* from_decimal_type =
136
919
                            check_and_get_data_type<FromDataType>(from_type.get());
137
919
                    from_precision =
138
919
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
919
                    from_scale = from_decimal_type->get_scale();
140
919
                }
141
142
919
                UInt32 to_max_digits = 0;
143
919
                UInt32 to_precision = 0;
144
919
                UInt32 to_scale = 0;
145
146
919
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
919
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
919
                    const auto* to_decimal_type =
150
919
                            check_and_get_data_type<ToDataType>(to_type.get());
151
919
                    to_precision = to_decimal_type->get_precision();
152
919
                    ToDataType::check_type_precision(to_precision);
153
154
919
                    to_scale = to_decimal_type->get_scale();
155
919
                    ToDataType::check_type_scale(to_scale);
156
919
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
919
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
919
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
919
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
919
                if (to_scale > from_scale) {
167
792
                    multiply_may_overflow &=
168
792
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
792
                }
170
919
                return narrow_integral || multiply_may_overflow;
171
919
            }
172
0
            return false;
173
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
120
148
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
148
            using Types2 = std::decay_t<decltype(types2)>;
122
148
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
148
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
148
                using FromFieldType = typename FromDataType::FieldType;
130
148
                using ToFieldType = typename ToDataType::FieldType;
131
148
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
148
                UInt32 from_scale = 0;
133
134
148
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
148
                    const auto* from_decimal_type =
136
148
                            check_and_get_data_type<FromDataType>(from_type.get());
137
148
                    from_precision =
138
148
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
148
                    from_scale = from_decimal_type->get_scale();
140
148
                }
141
142
148
                UInt32 to_max_digits = 0;
143
148
                UInt32 to_precision = 0;
144
148
                UInt32 to_scale = 0;
145
146
148
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
148
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
148
                    const auto* to_decimal_type =
150
148
                            check_and_get_data_type<ToDataType>(to_type.get());
151
148
                    to_precision = to_decimal_type->get_precision();
152
148
                    ToDataType::check_type_precision(to_precision);
153
154
148
                    to_scale = to_decimal_type->get_scale();
155
148
                    ToDataType::check_type_scale(to_scale);
156
148
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
148
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
148
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
148
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
148
                if (to_scale > from_scale) {
167
84
                    multiply_may_overflow &=
168
84
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
84
                }
170
148
                return narrow_integral || multiply_may_overflow;
171
148
            }
172
0
            return false;
173
148
        });
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
120
1.20k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.20k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.20k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1.20k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.20k
                using FromFieldType = typename FromDataType::FieldType;
130
1.20k
                using ToFieldType = typename ToDataType::FieldType;
131
1.20k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.20k
                UInt32 from_scale = 0;
133
134
1.20k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.20k
                    const auto* from_decimal_type =
136
1.20k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.20k
                    from_precision =
138
1.20k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.20k
                    from_scale = from_decimal_type->get_scale();
140
1.20k
                }
141
142
1.20k
                UInt32 to_max_digits = 0;
143
1.20k
                UInt32 to_precision = 0;
144
1.20k
                UInt32 to_scale = 0;
145
146
1.20k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.20k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.20k
                    const auto* to_decimal_type =
150
1.20k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.20k
                    to_precision = to_decimal_type->get_precision();
152
1.20k
                    ToDataType::check_type_precision(to_precision);
153
154
1.20k
                    to_scale = to_decimal_type->get_scale();
155
1.20k
                    ToDataType::check_type_scale(to_scale);
156
1.20k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
1.20k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.20k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.20k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.20k
                if (to_scale > from_scale) {
167
727
                    multiply_may_overflow &=
168
727
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
727
                }
170
1.20k
                return narrow_integral || multiply_may_overflow;
171
1.20k
            }
172
0
            return false;
173
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
120
902
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
902
            using Types2 = std::decay_t<decltype(types2)>;
122
902
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
902
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
902
                using FromFieldType = typename FromDataType::FieldType;
130
902
                using ToFieldType = typename ToDataType::FieldType;
131
902
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
902
                UInt32 from_scale = 0;
133
134
902
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
902
                    const auto* from_decimal_type =
136
902
                            check_and_get_data_type<FromDataType>(from_type.get());
137
902
                    from_precision =
138
902
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
902
                    from_scale = from_decimal_type->get_scale();
140
902
                }
141
142
902
                UInt32 to_max_digits = 0;
143
902
                UInt32 to_precision = 0;
144
902
                UInt32 to_scale = 0;
145
146
902
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
902
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
902
                    const auto* to_decimal_type =
150
902
                            check_and_get_data_type<ToDataType>(to_type.get());
151
902
                    to_precision = to_decimal_type->get_precision();
152
902
                    ToDataType::check_type_precision(to_precision);
153
154
902
                    to_scale = to_decimal_type->get_scale();
155
902
                    ToDataType::check_type_scale(to_scale);
156
902
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
902
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
902
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
902
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
902
                if (to_scale > from_scale) {
167
452
                    multiply_may_overflow &=
168
452
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
452
                }
170
902
                return narrow_integral || multiply_may_overflow;
171
902
            }
172
0
            return false;
173
902
        });
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
120
5.67k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5.67k
            using Types2 = std::decay_t<decltype(types2)>;
122
5.67k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
5.67k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
5.67k
                return false;
127
5.67k
            }
128
5.67k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5.67k
                using FromFieldType = typename FromDataType::FieldType;
130
5.67k
                using ToFieldType = typename ToDataType::FieldType;
131
5.67k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5.67k
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
5.67k
                UInt32 to_max_digits = 0;
143
5.67k
                UInt32 to_precision = 0;
144
5.67k
                UInt32 to_scale = 0;
145
146
5.67k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
5.67k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
5.67k
                    const auto* to_decimal_type =
150
5.67k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
5.67k
                    to_precision = to_decimal_type->get_precision();
152
5.67k
                    ToDataType::check_type_precision(to_precision);
153
154
5.67k
                    to_scale = to_decimal_type->get_scale();
155
5.67k
                    ToDataType::check_type_scale(to_scale);
156
5.67k
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
5.67k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5.67k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5.67k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5.67k
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
5.67k
                return narrow_integral || multiply_may_overflow;
171
5.67k
            }
172
0
            return false;
173
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
120
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1
            using Types2 = std::decay_t<decltype(types2)>;
122
1
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1
            return false;
173
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
120
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
3
            using Types2 = std::decay_t<decltype(types2)>;
122
3
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
3
            return false;
173
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
120
28
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
28
            using Types2 = std::decay_t<decltype(types2)>;
122
28
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
28
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
28
                return false;
127
28
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
28
            return false;
173
28
        });
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
120
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10
            using Types2 = std::decay_t<decltype(types2)>;
122
10
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
10
            return false;
173
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2
                using FromFieldType = typename FromDataType::FieldType;
130
2
                using ToFieldType = typename ToDataType::FieldType;
131
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2
                UInt32 from_scale = 0;
133
134
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2
                    const auto* from_decimal_type =
136
2
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2
                    from_precision =
138
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2
                    from_scale = from_decimal_type->get_scale();
140
2
                }
141
142
2
                UInt32 to_max_digits = 0;
143
2
                UInt32 to_precision = 0;
144
2
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
2
                return narrow_integral || multiply_may_overflow;
171
2
            }
172
0
            return false;
173
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
120
351
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
351
            using Types2 = std::decay_t<decltype(types2)>;
122
351
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
351
            return false;
173
351
        });
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
120
220
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
220
            using Types2 = std::decay_t<decltype(types2)>;
122
220
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
220
            return false;
173
220
        });
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
120
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1
            using Types2 = std::decay_t<decltype(types2)>;
122
1
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
1
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
2
            return false;
173
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
120
161k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
161k
            using Types2 = std::decay_t<decltype(types2)>;
122
161k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
161k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
161k
                return false;
127
161k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
161k
            return false;
173
161k
        });
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
120
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
13
            using Types2 = std::decay_t<decltype(types2)>;
122
13
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
13
            return false;
173
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
120
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
33
            using Types2 = std::decay_t<decltype(types2)>;
122
33
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
33
            return false;
173
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
120
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
12
            using Types2 = std::decay_t<decltype(types2)>;
122
12
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
12
            return false;
173
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
120
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
12
            using Types2 = std::decay_t<decltype(types2)>;
122
12
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
12
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
12
                using FromFieldType = typename FromDataType::FieldType;
130
12
                using ToFieldType = typename ToDataType::FieldType;
131
12
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
12
                UInt32 from_scale = 0;
133
134
12
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
12
                    const auto* from_decimal_type =
136
12
                            check_and_get_data_type<FromDataType>(from_type.get());
137
12
                    from_precision =
138
12
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
12
                    from_scale = from_decimal_type->get_scale();
140
12
                }
141
142
12
                UInt32 to_max_digits = 0;
143
12
                UInt32 to_precision = 0;
144
12
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
12
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
12
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
12
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
12
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
12
                return narrow_integral || multiply_may_overflow;
171
12
            }
172
0
            return false;
173
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
120
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
4
            using Types2 = std::decay_t<decltype(types2)>;
122
4
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
4
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
4
                using FromFieldType = typename FromDataType::FieldType;
130
4
                using ToFieldType = typename ToDataType::FieldType;
131
4
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
4
                UInt32 from_scale = 0;
133
134
4
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
4
                    const auto* from_decimal_type =
136
4
                            check_and_get_data_type<FromDataType>(from_type.get());
137
4
                    from_precision =
138
4
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
4
                    from_scale = from_decimal_type->get_scale();
140
4
                }
141
142
4
                UInt32 to_max_digits = 0;
143
4
                UInt32 to_precision = 0;
144
4
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
4
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
4
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
4
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
4
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
4
                return narrow_integral || multiply_may_overflow;
171
4
            }
172
0
            return false;
173
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
120
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5
            using Types2 = std::decay_t<decltype(types2)>;
122
5
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5
                using FromFieldType = typename FromDataType::FieldType;
130
5
                using ToFieldType = typename ToDataType::FieldType;
131
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5
                UInt32 from_scale = 0;
133
134
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
5
                    const auto* from_decimal_type =
136
5
                            check_and_get_data_type<FromDataType>(from_type.get());
137
5
                    from_precision =
138
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
5
                    from_scale = from_decimal_type->get_scale();
140
5
                }
141
142
5
                UInt32 to_max_digits = 0;
143
5
                UInt32 to_precision = 0;
144
5
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
5
                return narrow_integral || multiply_may_overflow;
171
5
            }
172
0
            return false;
173
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_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
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
120
386
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
386
            using Types2 = std::decay_t<decltype(types2)>;
122
386
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
386
            return false;
173
386
        });
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
120
243
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
243
            using Types2 = std::decay_t<decltype(types2)>;
122
243
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
243
            return false;
173
243
        });
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
120
278
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
278
            using Types2 = std::decay_t<decltype(types2)>;
122
278
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
278
            return false;
173
278
        });
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
120
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
4
            using Types2 = std::decay_t<decltype(types2)>;
122
4
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
4
            return false;
173
4
        });
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
120
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
20
            using Types2 = std::decay_t<decltype(types2)>;
122
20
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
20
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
20
                return false;
127
20
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
20
            return false;
173
20
        });
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
120
148k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
148k
            using Types2 = std::decay_t<decltype(types2)>;
122
148k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
148k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
148k
                return false;
127
148k
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
148k
            return false;
173
148k
        });
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_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
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
120
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
26
            using Types2 = std::decay_t<decltype(types2)>;
122
26
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
26
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
26
                return false;
127
26
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
26
            return false;
173
26
        });
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
120
28
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
28
            using Types2 = std::decay_t<decltype(types2)>;
122
28
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
28
            return false;
173
28
        });
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
120
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21
            using Types2 = std::decay_t<decltype(types2)>;
122
21
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
21
            return false;
173
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
120
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
33
            using Types2 = std::decay_t<decltype(types2)>;
122
33
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
33
            return false;
173
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
120
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
9
            using Types2 = std::decay_t<decltype(types2)>;
122
9
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
9
            return false;
173
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
120
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
3
            using Types2 = std::decay_t<decltype(types2)>;
122
3
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
3
            return false;
173
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
120
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7
            using Types2 = std::decay_t<decltype(types2)>;
122
7
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
7
            return false;
173
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
120
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
18
            using Types2 = std::decay_t<decltype(types2)>;
122
18
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
18
            return false;
173
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
120
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2
            using Types2 = std::decay_t<decltype(types2)>;
122
2
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2
                using FromFieldType = typename FromDataType::FieldType;
130
2
                using ToFieldType = typename ToDataType::FieldType;
131
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2
                UInt32 from_scale = 0;
133
134
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2
                    const auto* from_decimal_type =
136
2
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2
                    from_precision =
138
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2
                    from_scale = from_decimal_type->get_scale();
140
2
                }
141
142
2
                UInt32 to_max_digits = 0;
143
2
                UInt32 to_precision = 0;
144
2
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
2
                    to_precision = to_max_digits;
160
2
                }
161
162
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
2
                return narrow_integral || multiply_may_overflow;
171
2
            }
172
0
            return false;
173
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
120
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1
            using Types2 = std::decay_t<decltype(types2)>;
122
1
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1
                using FromFieldType = typename FromDataType::FieldType;
130
1
                using ToFieldType = typename ToDataType::FieldType;
131
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1
                UInt32 from_scale = 0;
133
134
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1
                    const auto* from_decimal_type =
136
1
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1
                    from_precision =
138
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1
                    from_scale = from_decimal_type->get_scale();
140
1
                }
141
142
1
                UInt32 to_max_digits = 0;
143
1
                UInt32 to_precision = 0;
144
1
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
1
                    to_precision = to_max_digits;
160
1
                }
161
162
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
1
                return narrow_integral || multiply_may_overflow;
171
1
            }
172
0
            return false;
173
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
120
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1
            using Types2 = std::decay_t<decltype(types2)>;
122
1
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1
                using FromFieldType = typename FromDataType::FieldType;
130
1
                using ToFieldType = typename ToDataType::FieldType;
131
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1
                UInt32 from_scale = 0;
133
134
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1
                    const auto* from_decimal_type =
136
1
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1
                    from_precision =
138
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1
                    from_scale = from_decimal_type->get_scale();
140
1
                }
141
142
1
                UInt32 to_max_digits = 0;
143
1
                UInt32 to_precision = 0;
144
1
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
1
                    to_precision = to_max_digits;
160
1
                }
161
162
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
1
                return narrow_integral || multiply_may_overflow;
171
1
            }
172
0
            return false;
173
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
120
11
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
11
            using Types2 = std::decay_t<decltype(types2)>;
122
11
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
11
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
11
                using FromFieldType = typename FromDataType::FieldType;
130
11
                using ToFieldType = typename ToDataType::FieldType;
131
11
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
11
                UInt32 from_scale = 0;
133
134
11
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
11
                    const auto* from_decimal_type =
136
11
                            check_and_get_data_type<FromDataType>(from_type.get());
137
11
                    from_precision =
138
11
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
11
                    from_scale = from_decimal_type->get_scale();
140
11
                }
141
142
11
                UInt32 to_max_digits = 0;
143
11
                UInt32 to_precision = 0;
144
11
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
11
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
11
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
11
                    to_precision = to_max_digits;
160
11
                }
161
162
11
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
11
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
11
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
11
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
11
                return narrow_integral || multiply_may_overflow;
171
11
            }
172
0
            return false;
173
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
120
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8
            using Types2 = std::decay_t<decltype(types2)>;
122
8
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
8
            return false;
173
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
120
19
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
19
            using Types2 = std::decay_t<decltype(types2)>;
122
19
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
                return false;
127
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
19
            return false;
173
19
        });
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
120
299
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
299
            using Types2 = std::decay_t<decltype(types2)>;
122
299
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
299
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
299
                return false;
127
299
            }
128
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
                using FromFieldType = typename FromDataType::FieldType;
130
                using ToFieldType = typename ToDataType::FieldType;
131
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
                UInt32 from_scale = 0;
133
134
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
                    const auto* from_decimal_type =
136
                            check_and_get_data_type<FromDataType>(from_type.get());
137
                    from_precision =
138
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
                    from_scale = from_decimal_type->get_scale();
140
                }
141
142
                UInt32 to_max_digits = 0;
143
                UInt32 to_precision = 0;
144
                UInt32 to_scale = 0;
145
146
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
                    const auto* to_decimal_type =
150
                            check_and_get_data_type<ToDataType>(to_type.get());
151
                    to_precision = to_decimal_type->get_precision();
152
                    ToDataType::check_type_precision(to_precision);
153
154
                    to_scale = to_decimal_type->get_scale();
155
                    ToDataType::check_type_scale(to_scale);
156
                }
157
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
                    to_precision = to_max_digits;
160
                }
161
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
                if (to_scale > from_scale) {
167
                    multiply_may_overflow &=
168
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
                }
170
                return narrow_integral || multiply_may_overflow;
171
            }
172
299
            return false;
173
299
        });
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_
174
1.17M
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_
Line
Count
Source
110
2.46k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
2.46k
        using Types = std::decay_t<decltype(types)>;
112
2.46k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
2.46k
        return call_on_index_and_data_type<
120
2.46k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.46k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.46k
            using FromDataType = typename Types2::LeftType;
123
2.46k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
2.46k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.46k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.46k
                return false;
127
2.46k
            }
128
2.46k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.46k
                using FromFieldType = typename FromDataType::FieldType;
130
2.46k
                using ToFieldType = typename ToDataType::FieldType;
131
2.46k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.46k
                UInt32 from_scale = 0;
133
134
2.46k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2.46k
                    const auto* from_decimal_type =
136
2.46k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2.46k
                    from_precision =
138
2.46k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2.46k
                    from_scale = from_decimal_type->get_scale();
140
2.46k
                }
141
142
2.46k
                UInt32 to_max_digits = 0;
143
2.46k
                UInt32 to_precision = 0;
144
2.46k
                UInt32 to_scale = 0;
145
146
2.46k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.46k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.46k
                    const auto* to_decimal_type =
150
2.46k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.46k
                    to_precision = to_decimal_type->get_precision();
152
2.46k
                    ToDataType::check_type_precision(to_precision);
153
154
2.46k
                    to_scale = to_decimal_type->get_scale();
155
2.46k
                    ToDataType::check_type_scale(to_scale);
156
2.46k
                }
157
2.46k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
2.46k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
2.46k
                    to_precision = to_max_digits;
160
2.46k
                }
161
162
2.46k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.46k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.46k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.46k
                if (to_scale > from_scale) {
167
2.46k
                    multiply_may_overflow &=
168
2.46k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
2.46k
                }
170
2.46k
                return narrow_integral || multiply_may_overflow;
171
2.46k
            }
172
2.46k
            return false;
173
2.46k
        });
174
2.46k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_
Line
Count
Source
110
4.26k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
4.26k
        using Types = std::decay_t<decltype(types)>;
112
4.26k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
4.26k
        return call_on_index_and_data_type<
120
4.26k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
4.26k
            using Types2 = std::decay_t<decltype(types2)>;
122
4.26k
            using FromDataType = typename Types2::LeftType;
123
4.26k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
4.26k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
4.26k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
4.26k
                return false;
127
4.26k
            }
128
4.26k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
4.26k
                using FromFieldType = typename FromDataType::FieldType;
130
4.26k
                using ToFieldType = typename ToDataType::FieldType;
131
4.26k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
4.26k
                UInt32 from_scale = 0;
133
134
4.26k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
4.26k
                    const auto* from_decimal_type =
136
4.26k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
4.26k
                    from_precision =
138
4.26k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
4.26k
                    from_scale = from_decimal_type->get_scale();
140
4.26k
                }
141
142
4.26k
                UInt32 to_max_digits = 0;
143
4.26k
                UInt32 to_precision = 0;
144
4.26k
                UInt32 to_scale = 0;
145
146
4.26k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
4.26k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
4.26k
                    const auto* to_decimal_type =
150
4.26k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
4.26k
                    to_precision = to_decimal_type->get_precision();
152
4.26k
                    ToDataType::check_type_precision(to_precision);
153
154
4.26k
                    to_scale = to_decimal_type->get_scale();
155
4.26k
                    ToDataType::check_type_scale(to_scale);
156
4.26k
                }
157
4.26k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
4.26k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
4.26k
                    to_precision = to_max_digits;
160
4.26k
                }
161
162
4.26k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
4.26k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
4.26k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
4.26k
                if (to_scale > from_scale) {
167
4.26k
                    multiply_may_overflow &=
168
4.26k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
4.26k
                }
170
4.26k
                return narrow_integral || multiply_may_overflow;
171
4.26k
            }
172
4.26k
            return false;
173
4.26k
        });
174
4.26k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_
Line
Count
Source
110
5.41k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
5.41k
        using Types = std::decay_t<decltype(types)>;
112
5.41k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
5.41k
        return call_on_index_and_data_type<
120
5.41k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5.41k
            using Types2 = std::decay_t<decltype(types2)>;
122
5.41k
            using FromDataType = typename Types2::LeftType;
123
5.41k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
5.41k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
5.41k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
5.41k
                return false;
127
5.41k
            }
128
5.41k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5.41k
                using FromFieldType = typename FromDataType::FieldType;
130
5.41k
                using ToFieldType = typename ToDataType::FieldType;
131
5.41k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5.41k
                UInt32 from_scale = 0;
133
134
5.41k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
5.41k
                    const auto* from_decimal_type =
136
5.41k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
5.41k
                    from_precision =
138
5.41k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
5.41k
                    from_scale = from_decimal_type->get_scale();
140
5.41k
                }
141
142
5.41k
                UInt32 to_max_digits = 0;
143
5.41k
                UInt32 to_precision = 0;
144
5.41k
                UInt32 to_scale = 0;
145
146
5.41k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
5.41k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
5.41k
                    const auto* to_decimal_type =
150
5.41k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
5.41k
                    to_precision = to_decimal_type->get_precision();
152
5.41k
                    ToDataType::check_type_precision(to_precision);
153
154
5.41k
                    to_scale = to_decimal_type->get_scale();
155
5.41k
                    ToDataType::check_type_scale(to_scale);
156
5.41k
                }
157
5.41k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
5.41k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
5.41k
                    to_precision = to_max_digits;
160
5.41k
                }
161
162
5.41k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5.41k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5.41k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5.41k
                if (to_scale > from_scale) {
167
5.41k
                    multiply_may_overflow &=
168
5.41k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
5.41k
                }
170
5.41k
                return narrow_integral || multiply_may_overflow;
171
5.41k
            }
172
5.41k
            return false;
173
5.41k
        });
174
5.41k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_
Line
Count
Source
110
161k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
161k
        using Types = std::decay_t<decltype(types)>;
112
161k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
161k
        return call_on_index_and_data_type<
120
161k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
161k
            using Types2 = std::decay_t<decltype(types2)>;
122
161k
            using FromDataType = typename Types2::LeftType;
123
161k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
161k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
161k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
161k
                return false;
127
161k
            }
128
161k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
161k
                using FromFieldType = typename FromDataType::FieldType;
130
161k
                using ToFieldType = typename ToDataType::FieldType;
131
161k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
161k
                UInt32 from_scale = 0;
133
134
161k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
161k
                    const auto* from_decimal_type =
136
161k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
161k
                    from_precision =
138
161k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
161k
                    from_scale = from_decimal_type->get_scale();
140
161k
                }
141
142
161k
                UInt32 to_max_digits = 0;
143
161k
                UInt32 to_precision = 0;
144
161k
                UInt32 to_scale = 0;
145
146
161k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
161k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
161k
                    const auto* to_decimal_type =
150
161k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
161k
                    to_precision = to_decimal_type->get_precision();
152
161k
                    ToDataType::check_type_precision(to_precision);
153
154
161k
                    to_scale = to_decimal_type->get_scale();
155
161k
                    ToDataType::check_type_scale(to_scale);
156
161k
                }
157
161k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
161k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
161k
                    to_precision = to_max_digits;
160
161k
                }
161
162
161k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
161k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
161k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
161k
                if (to_scale > from_scale) {
167
161k
                    multiply_may_overflow &=
168
161k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
161k
                }
170
161k
                return narrow_integral || multiply_may_overflow;
171
161k
            }
172
161k
            return false;
173
161k
        });
174
161k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_
Line
Count
Source
110
40.1k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
40.1k
        using Types = std::decay_t<decltype(types)>;
112
40.1k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
40.1k
        return call_on_index_and_data_type<
120
40.1k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
40.1k
            using Types2 = std::decay_t<decltype(types2)>;
122
40.1k
            using FromDataType = typename Types2::LeftType;
123
40.1k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
40.1k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
40.1k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
40.1k
                return false;
127
40.1k
            }
128
40.1k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
40.1k
                using FromFieldType = typename FromDataType::FieldType;
130
40.1k
                using ToFieldType = typename ToDataType::FieldType;
131
40.1k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
40.1k
                UInt32 from_scale = 0;
133
134
40.1k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
40.1k
                    const auto* from_decimal_type =
136
40.1k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
40.1k
                    from_precision =
138
40.1k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
40.1k
                    from_scale = from_decimal_type->get_scale();
140
40.1k
                }
141
142
40.1k
                UInt32 to_max_digits = 0;
143
40.1k
                UInt32 to_precision = 0;
144
40.1k
                UInt32 to_scale = 0;
145
146
40.1k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
40.1k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
40.1k
                    const auto* to_decimal_type =
150
40.1k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
40.1k
                    to_precision = to_decimal_type->get_precision();
152
40.1k
                    ToDataType::check_type_precision(to_precision);
153
154
40.1k
                    to_scale = to_decimal_type->get_scale();
155
40.1k
                    ToDataType::check_type_scale(to_scale);
156
40.1k
                }
157
40.1k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
40.1k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
40.1k
                    to_precision = to_max_digits;
160
40.1k
                }
161
162
40.1k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
40.1k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
40.1k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
40.1k
                if (to_scale > from_scale) {
167
40.1k
                    multiply_may_overflow &=
168
40.1k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
40.1k
                }
170
40.1k
                return narrow_integral || multiply_may_overflow;
171
40.1k
            }
172
40.1k
            return false;
173
40.1k
        });
174
40.1k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_
Line
Count
Source
110
70.2k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
70.2k
        using Types = std::decay_t<decltype(types)>;
112
70.2k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
70.2k
        return call_on_index_and_data_type<
120
70.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
70.2k
            using Types2 = std::decay_t<decltype(types2)>;
122
70.2k
            using FromDataType = typename Types2::LeftType;
123
70.2k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
70.2k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
70.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
70.2k
                return false;
127
70.2k
            }
128
70.2k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
70.2k
                using FromFieldType = typename FromDataType::FieldType;
130
70.2k
                using ToFieldType = typename ToDataType::FieldType;
131
70.2k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
70.2k
                UInt32 from_scale = 0;
133
134
70.2k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
70.2k
                    const auto* from_decimal_type =
136
70.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
70.2k
                    from_precision =
138
70.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
70.2k
                    from_scale = from_decimal_type->get_scale();
140
70.2k
                }
141
142
70.2k
                UInt32 to_max_digits = 0;
143
70.2k
                UInt32 to_precision = 0;
144
70.2k
                UInt32 to_scale = 0;
145
146
70.2k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
70.2k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
70.2k
                    const auto* to_decimal_type =
150
70.2k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
70.2k
                    to_precision = to_decimal_type->get_precision();
152
70.2k
                    ToDataType::check_type_precision(to_precision);
153
154
70.2k
                    to_scale = to_decimal_type->get_scale();
155
70.2k
                    ToDataType::check_type_scale(to_scale);
156
70.2k
                }
157
70.2k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
70.2k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
70.2k
                    to_precision = to_max_digits;
160
70.2k
                }
161
162
70.2k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
70.2k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
70.2k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
70.2k
                if (to_scale > from_scale) {
167
70.2k
                    multiply_may_overflow &=
168
70.2k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
70.2k
                }
170
70.2k
                return narrow_integral || multiply_may_overflow;
171
70.2k
            }
172
70.2k
            return false;
173
70.2k
        });
174
70.2k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_
Line
Count
Source
110
10.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
10.9k
        using Types = std::decay_t<decltype(types)>;
112
10.9k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
10.9k
        return call_on_index_and_data_type<
120
10.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10.9k
            using Types2 = std::decay_t<decltype(types2)>;
122
10.9k
            using FromDataType = typename Types2::LeftType;
123
10.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
10.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
10.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
10.9k
                return false;
127
10.9k
            }
128
10.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
10.9k
                using FromFieldType = typename FromDataType::FieldType;
130
10.9k
                using ToFieldType = typename ToDataType::FieldType;
131
10.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
10.9k
                UInt32 from_scale = 0;
133
134
10.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
10.9k
                    const auto* from_decimal_type =
136
10.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
10.9k
                    from_precision =
138
10.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
10.9k
                    from_scale = from_decimal_type->get_scale();
140
10.9k
                }
141
142
10.9k
                UInt32 to_max_digits = 0;
143
10.9k
                UInt32 to_precision = 0;
144
10.9k
                UInt32 to_scale = 0;
145
146
10.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
10.9k
                    const auto* to_decimal_type =
150
10.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
10.9k
                    to_precision = to_decimal_type->get_precision();
152
10.9k
                    ToDataType::check_type_precision(to_precision);
153
154
10.9k
                    to_scale = to_decimal_type->get_scale();
155
10.9k
                    ToDataType::check_type_scale(to_scale);
156
10.9k
                }
157
10.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
10.9k
                    to_precision = to_max_digits;
160
10.9k
                }
161
162
10.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
10.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
10.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
10.9k
                if (to_scale > from_scale) {
167
10.9k
                    multiply_may_overflow &=
168
10.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
10.9k
                }
170
10.9k
                return narrow_integral || multiply_may_overflow;
171
10.9k
            }
172
10.9k
            return false;
173
10.9k
        });
174
10.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_
Line
Count
Source
110
27.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
27.9k
        using Types = std::decay_t<decltype(types)>;
112
27.9k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
27.9k
        return call_on_index_and_data_type<
120
27.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
27.9k
            using Types2 = std::decay_t<decltype(types2)>;
122
27.9k
            using FromDataType = typename Types2::LeftType;
123
27.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
27.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
27.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
27.9k
                return false;
127
27.9k
            }
128
27.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
27.9k
                using FromFieldType = typename FromDataType::FieldType;
130
27.9k
                using ToFieldType = typename ToDataType::FieldType;
131
27.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
27.9k
                UInt32 from_scale = 0;
133
134
27.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
27.9k
                    const auto* from_decimal_type =
136
27.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
27.9k
                    from_precision =
138
27.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
27.9k
                    from_scale = from_decimal_type->get_scale();
140
27.9k
                }
141
142
27.9k
                UInt32 to_max_digits = 0;
143
27.9k
                UInt32 to_precision = 0;
144
27.9k
                UInt32 to_scale = 0;
145
146
27.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
27.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
27.9k
                    const auto* to_decimal_type =
150
27.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
27.9k
                    to_precision = to_decimal_type->get_precision();
152
27.9k
                    ToDataType::check_type_precision(to_precision);
153
154
27.9k
                    to_scale = to_decimal_type->get_scale();
155
27.9k
                    ToDataType::check_type_scale(to_scale);
156
27.9k
                }
157
27.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
27.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
27.9k
                    to_precision = to_max_digits;
160
27.9k
                }
161
162
27.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
27.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
27.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
27.9k
                if (to_scale > from_scale) {
167
27.9k
                    multiply_may_overflow &=
168
27.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
27.9k
                }
170
27.9k
                return narrow_integral || multiply_may_overflow;
171
27.9k
            }
172
27.9k
            return false;
173
27.9k
        });
174
27.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_
Line
Count
Source
110
7.76k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
7.76k
        using Types = std::decay_t<decltype(types)>;
112
7.76k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
7.76k
        return call_on_index_and_data_type<
120
7.76k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.76k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.76k
            using FromDataType = typename Types2::LeftType;
123
7.76k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
7.76k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
7.76k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
7.76k
                return false;
127
7.76k
            }
128
7.76k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
7.76k
                using FromFieldType = typename FromDataType::FieldType;
130
7.76k
                using ToFieldType = typename ToDataType::FieldType;
131
7.76k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
7.76k
                UInt32 from_scale = 0;
133
134
7.76k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
7.76k
                    const auto* from_decimal_type =
136
7.76k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
7.76k
                    from_precision =
138
7.76k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
7.76k
                    from_scale = from_decimal_type->get_scale();
140
7.76k
                }
141
142
7.76k
                UInt32 to_max_digits = 0;
143
7.76k
                UInt32 to_precision = 0;
144
7.76k
                UInt32 to_scale = 0;
145
146
7.76k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
7.76k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
7.76k
                    const auto* to_decimal_type =
150
7.76k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
7.76k
                    to_precision = to_decimal_type->get_precision();
152
7.76k
                    ToDataType::check_type_precision(to_precision);
153
154
7.76k
                    to_scale = to_decimal_type->get_scale();
155
7.76k
                    ToDataType::check_type_scale(to_scale);
156
7.76k
                }
157
7.76k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
7.76k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
7.76k
                    to_precision = to_max_digits;
160
7.76k
                }
161
162
7.76k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
7.76k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
7.76k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
7.76k
                if (to_scale > from_scale) {
167
7.76k
                    multiply_may_overflow &=
168
7.76k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
7.76k
                }
170
7.76k
                return narrow_integral || multiply_may_overflow;
171
7.76k
            }
172
7.76k
            return false;
173
7.76k
        });
174
7.76k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_
Line
Count
Source
110
11.8k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
11.8k
        using Types = std::decay_t<decltype(types)>;
112
11.8k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
11.8k
        return call_on_index_and_data_type<
120
11.8k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
11.8k
            using Types2 = std::decay_t<decltype(types2)>;
122
11.8k
            using FromDataType = typename Types2::LeftType;
123
11.8k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
11.8k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
11.8k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
11.8k
                return false;
127
11.8k
            }
128
11.8k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
11.8k
                using FromFieldType = typename FromDataType::FieldType;
130
11.8k
                using ToFieldType = typename ToDataType::FieldType;
131
11.8k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
11.8k
                UInt32 from_scale = 0;
133
134
11.8k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
11.8k
                    const auto* from_decimal_type =
136
11.8k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
11.8k
                    from_precision =
138
11.8k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
11.8k
                    from_scale = from_decimal_type->get_scale();
140
11.8k
                }
141
142
11.8k
                UInt32 to_max_digits = 0;
143
11.8k
                UInt32 to_precision = 0;
144
11.8k
                UInt32 to_scale = 0;
145
146
11.8k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
11.8k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
11.8k
                    const auto* to_decimal_type =
150
11.8k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
11.8k
                    to_precision = to_decimal_type->get_precision();
152
11.8k
                    ToDataType::check_type_precision(to_precision);
153
154
11.8k
                    to_scale = to_decimal_type->get_scale();
155
11.8k
                    ToDataType::check_type_scale(to_scale);
156
11.8k
                }
157
11.8k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
11.8k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
11.8k
                    to_precision = to_max_digits;
160
11.8k
                }
161
162
11.8k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
11.8k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
11.8k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
11.8k
                if (to_scale > from_scale) {
167
11.8k
                    multiply_may_overflow &=
168
11.8k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
11.8k
                }
170
11.8k
                return narrow_integral || multiply_may_overflow;
171
11.8k
            }
172
11.8k
            return false;
173
11.8k
        });
174
11.8k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_
Line
Count
Source
110
227
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
227
        using Types = std::decay_t<decltype(types)>;
112
227
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
227
        return call_on_index_and_data_type<
120
227
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
227
            using Types2 = std::decay_t<decltype(types2)>;
122
227
            using FromDataType = typename Types2::LeftType;
123
227
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
227
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
227
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
227
                return false;
127
227
            }
128
227
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
227
                using FromFieldType = typename FromDataType::FieldType;
130
227
                using ToFieldType = typename ToDataType::FieldType;
131
227
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
227
                UInt32 from_scale = 0;
133
134
227
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
227
                    const auto* from_decimal_type =
136
227
                            check_and_get_data_type<FromDataType>(from_type.get());
137
227
                    from_precision =
138
227
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
227
                    from_scale = from_decimal_type->get_scale();
140
227
                }
141
142
227
                UInt32 to_max_digits = 0;
143
227
                UInt32 to_precision = 0;
144
227
                UInt32 to_scale = 0;
145
146
227
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
227
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
227
                    const auto* to_decimal_type =
150
227
                            check_and_get_data_type<ToDataType>(to_type.get());
151
227
                    to_precision = to_decimal_type->get_precision();
152
227
                    ToDataType::check_type_precision(to_precision);
153
154
227
                    to_scale = to_decimal_type->get_scale();
155
227
                    ToDataType::check_type_scale(to_scale);
156
227
                }
157
227
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
227
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
227
                    to_precision = to_max_digits;
160
227
                }
161
162
227
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
227
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
227
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
227
                if (to_scale > from_scale) {
167
227
                    multiply_may_overflow &=
168
227
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
227
                }
170
227
                return narrow_integral || multiply_may_overflow;
171
227
            }
172
227
            return false;
173
227
        });
174
227
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_
Line
Count
Source
110
162k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
162k
        using Types = std::decay_t<decltype(types)>;
112
162k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
162k
        return call_on_index_and_data_type<
120
162k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
162k
            using Types2 = std::decay_t<decltype(types2)>;
122
162k
            using FromDataType = typename Types2::LeftType;
123
162k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
162k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
162k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
162k
                return false;
127
162k
            }
128
162k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
162k
                using FromFieldType = typename FromDataType::FieldType;
130
162k
                using ToFieldType = typename ToDataType::FieldType;
131
162k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
162k
                UInt32 from_scale = 0;
133
134
162k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
162k
                    const auto* from_decimal_type =
136
162k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
162k
                    from_precision =
138
162k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
162k
                    from_scale = from_decimal_type->get_scale();
140
162k
                }
141
142
162k
                UInt32 to_max_digits = 0;
143
162k
                UInt32 to_precision = 0;
144
162k
                UInt32 to_scale = 0;
145
146
162k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
162k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
162k
                    const auto* to_decimal_type =
150
162k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
162k
                    to_precision = to_decimal_type->get_precision();
152
162k
                    ToDataType::check_type_precision(to_precision);
153
154
162k
                    to_scale = to_decimal_type->get_scale();
155
162k
                    ToDataType::check_type_scale(to_scale);
156
162k
                }
157
162k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
162k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
162k
                    to_precision = to_max_digits;
160
162k
                }
161
162
162k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
162k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
162k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
162k
                if (to_scale > from_scale) {
167
162k
                    multiply_may_overflow &=
168
162k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
162k
                }
170
162k
                return narrow_integral || multiply_may_overflow;
171
162k
            }
172
162k
            return false;
173
162k
        });
174
162k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_
Line
Count
Source
110
10.8k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
10.8k
        using Types = std::decay_t<decltype(types)>;
112
10.8k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
10.8k
        return call_on_index_and_data_type<
120
10.8k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10.8k
            using Types2 = std::decay_t<decltype(types2)>;
122
10.8k
            using FromDataType = typename Types2::LeftType;
123
10.8k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
10.8k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
10.8k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
10.8k
                return false;
127
10.8k
            }
128
10.8k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
10.8k
                using FromFieldType = typename FromDataType::FieldType;
130
10.8k
                using ToFieldType = typename ToDataType::FieldType;
131
10.8k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
10.8k
                UInt32 from_scale = 0;
133
134
10.8k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
10.8k
                    const auto* from_decimal_type =
136
10.8k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
10.8k
                    from_precision =
138
10.8k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
10.8k
                    from_scale = from_decimal_type->get_scale();
140
10.8k
                }
141
142
10.8k
                UInt32 to_max_digits = 0;
143
10.8k
                UInt32 to_precision = 0;
144
10.8k
                UInt32 to_scale = 0;
145
146
10.8k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
10.8k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
10.8k
                    const auto* to_decimal_type =
150
10.8k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
10.8k
                    to_precision = to_decimal_type->get_precision();
152
10.8k
                    ToDataType::check_type_precision(to_precision);
153
154
10.8k
                    to_scale = to_decimal_type->get_scale();
155
10.8k
                    ToDataType::check_type_scale(to_scale);
156
10.8k
                }
157
10.8k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
10.8k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
10.8k
                    to_precision = to_max_digits;
160
10.8k
                }
161
162
10.8k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
10.8k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
10.8k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
10.8k
                if (to_scale > from_scale) {
167
10.8k
                    multiply_may_overflow &=
168
10.8k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
10.8k
                }
170
10.8k
                return narrow_integral || multiply_may_overflow;
171
10.8k
            }
172
10.8k
            return false;
173
10.8k
        });
174
10.8k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_
Line
Count
Source
110
32
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
32
        using Types = std::decay_t<decltype(types)>;
112
32
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
32
        return call_on_index_and_data_type<
120
32
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
32
            using Types2 = std::decay_t<decltype(types2)>;
122
32
            using FromDataType = typename Types2::LeftType;
123
32
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
32
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
32
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
32
                return false;
127
32
            }
128
32
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
32
                using FromFieldType = typename FromDataType::FieldType;
130
32
                using ToFieldType = typename ToDataType::FieldType;
131
32
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
32
                UInt32 from_scale = 0;
133
134
32
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
32
                    const auto* from_decimal_type =
136
32
                            check_and_get_data_type<FromDataType>(from_type.get());
137
32
                    from_precision =
138
32
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
32
                    from_scale = from_decimal_type->get_scale();
140
32
                }
141
142
32
                UInt32 to_max_digits = 0;
143
32
                UInt32 to_precision = 0;
144
32
                UInt32 to_scale = 0;
145
146
32
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
32
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
32
                    const auto* to_decimal_type =
150
32
                            check_and_get_data_type<ToDataType>(to_type.get());
151
32
                    to_precision = to_decimal_type->get_precision();
152
32
                    ToDataType::check_type_precision(to_precision);
153
154
32
                    to_scale = to_decimal_type->get_scale();
155
32
                    ToDataType::check_type_scale(to_scale);
156
32
                }
157
32
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
32
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
32
                    to_precision = to_max_digits;
160
32
                }
161
162
32
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
32
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
32
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
32
                if (to_scale > from_scale) {
167
32
                    multiply_may_overflow &=
168
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
32
                }
170
32
                return narrow_integral || multiply_may_overflow;
171
32
            }
172
32
            return false;
173
32
        });
174
32
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_
Line
Count
Source
110
162k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
162k
        using Types = std::decay_t<decltype(types)>;
112
162k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
162k
        return call_on_index_and_data_type<
120
162k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
162k
            using Types2 = std::decay_t<decltype(types2)>;
122
162k
            using FromDataType = typename Types2::LeftType;
123
162k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
162k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
162k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
162k
                return false;
127
162k
            }
128
162k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
162k
                using FromFieldType = typename FromDataType::FieldType;
130
162k
                using ToFieldType = typename ToDataType::FieldType;
131
162k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
162k
                UInt32 from_scale = 0;
133
134
162k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
162k
                    const auto* from_decimal_type =
136
162k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
162k
                    from_precision =
138
162k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
162k
                    from_scale = from_decimal_type->get_scale();
140
162k
                }
141
142
162k
                UInt32 to_max_digits = 0;
143
162k
                UInt32 to_precision = 0;
144
162k
                UInt32 to_scale = 0;
145
146
162k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
162k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
162k
                    const auto* to_decimal_type =
150
162k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
162k
                    to_precision = to_decimal_type->get_precision();
152
162k
                    ToDataType::check_type_precision(to_precision);
153
154
162k
                    to_scale = to_decimal_type->get_scale();
155
162k
                    ToDataType::check_type_scale(to_scale);
156
162k
                }
157
162k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
162k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
162k
                    to_precision = to_max_digits;
160
162k
                }
161
162
162k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
162k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
162k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
162k
                if (to_scale > from_scale) {
167
162k
                    multiply_may_overflow &=
168
162k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
162k
                }
170
162k
                return narrow_integral || multiply_may_overflow;
171
162k
            }
172
162k
            return false;
173
162k
        });
174
162k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_
Line
Count
Source
110
149k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
149k
        using Types = std::decay_t<decltype(types)>;
112
149k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
149k
        return call_on_index_and_data_type<
120
149k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
149k
            using Types2 = std::decay_t<decltype(types2)>;
122
149k
            using FromDataType = typename Types2::LeftType;
123
149k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
149k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
149k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
149k
                return false;
127
149k
            }
128
149k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
149k
                using FromFieldType = typename FromDataType::FieldType;
130
149k
                using ToFieldType = typename ToDataType::FieldType;
131
149k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
149k
                UInt32 from_scale = 0;
133
134
149k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
149k
                    const auto* from_decimal_type =
136
149k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
149k
                    from_precision =
138
149k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
149k
                    from_scale = from_decimal_type->get_scale();
140
149k
                }
141
142
149k
                UInt32 to_max_digits = 0;
143
149k
                UInt32 to_precision = 0;
144
149k
                UInt32 to_scale = 0;
145
146
149k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
149k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
149k
                    const auto* to_decimal_type =
150
149k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
149k
                    to_precision = to_decimal_type->get_precision();
152
149k
                    ToDataType::check_type_precision(to_precision);
153
154
149k
                    to_scale = to_decimal_type->get_scale();
155
149k
                    ToDataType::check_type_scale(to_scale);
156
149k
                }
157
149k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
149k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
149k
                    to_precision = to_max_digits;
160
149k
                }
161
162
149k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
149k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
149k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
149k
                if (to_scale > from_scale) {
167
149k
                    multiply_may_overflow &=
168
149k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
149k
                }
170
149k
                return narrow_integral || multiply_may_overflow;
171
149k
            }
172
149k
            return false;
173
149k
        });
174
149k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_
Line
Count
Source
110
26
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
26
        using Types = std::decay_t<decltype(types)>;
112
26
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
26
        return call_on_index_and_data_type<
120
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
26
            using Types2 = std::decay_t<decltype(types2)>;
122
26
            using FromDataType = typename Types2::LeftType;
123
26
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
26
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
26
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
26
                return false;
127
26
            }
128
26
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
26
                using FromFieldType = typename FromDataType::FieldType;
130
26
                using ToFieldType = typename ToDataType::FieldType;
131
26
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
26
                UInt32 from_scale = 0;
133
134
26
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
26
                    const auto* from_decimal_type =
136
26
                            check_and_get_data_type<FromDataType>(from_type.get());
137
26
                    from_precision =
138
26
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
26
                    from_scale = from_decimal_type->get_scale();
140
26
                }
141
142
26
                UInt32 to_max_digits = 0;
143
26
                UInt32 to_precision = 0;
144
26
                UInt32 to_scale = 0;
145
146
26
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
26
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
26
                    const auto* to_decimal_type =
150
26
                            check_and_get_data_type<ToDataType>(to_type.get());
151
26
                    to_precision = to_decimal_type->get_precision();
152
26
                    ToDataType::check_type_precision(to_precision);
153
154
26
                    to_scale = to_decimal_type->get_scale();
155
26
                    ToDataType::check_type_scale(to_scale);
156
26
                }
157
26
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
26
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
26
                    to_precision = to_max_digits;
160
26
                }
161
162
26
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
26
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
26
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
26
                if (to_scale > from_scale) {
167
26
                    multiply_may_overflow &=
168
26
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
26
                }
170
26
                return narrow_integral || multiply_may_overflow;
171
26
            }
172
26
            return false;
173
26
        });
174
26
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_
Line
Count
Source
110
460
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
460
        using Types = std::decay_t<decltype(types)>;
112
460
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
            return false;
118
        }
119
460
        return call_on_index_and_data_type<
120
460
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
460
            using Types2 = std::decay_t<decltype(types2)>;
122
460
            using FromDataType = typename Types2::LeftType;
123
460
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
460
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
460
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
460
                return false;
127
460
            }
128
460
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
460
                using FromFieldType = typename FromDataType::FieldType;
130
460
                using ToFieldType = typename ToDataType::FieldType;
131
460
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
460
                UInt32 from_scale = 0;
133
134
460
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
460
                    const auto* from_decimal_type =
136
460
                            check_and_get_data_type<FromDataType>(from_type.get());
137
460
                    from_precision =
138
460
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
460
                    from_scale = from_decimal_type->get_scale();
140
460
                }
141
142
460
                UInt32 to_max_digits = 0;
143
460
                UInt32 to_precision = 0;
144
460
                UInt32 to_scale = 0;
145
146
460
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
460
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
460
                    const auto* to_decimal_type =
150
460
                            check_and_get_data_type<ToDataType>(to_type.get());
151
460
                    to_precision = to_decimal_type->get_precision();
152
460
                    ToDataType::check_type_precision(to_precision);
153
154
460
                    to_scale = to_decimal_type->get_scale();
155
460
                    ToDataType::check_type_scale(to_scale);
156
460
                }
157
460
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
460
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
460
                    to_precision = to_max_digits;
160
460
                }
161
162
460
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
460
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
460
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
460
                if (to_scale > from_scale) {
167
460
                    multiply_may_overflow &=
168
460
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
460
                }
170
460
                return narrow_integral || multiply_may_overflow;
171
460
            }
172
460
            return false;
173
460
        });
174
460
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_
Line
Count
Source
110
590
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
590
        using Types = std::decay_t<decltype(types)>;
112
590
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
590
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
590
            return false;
118
590
        }
119
0
        return call_on_index_and_data_type<
120
590
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
590
            using Types2 = std::decay_t<decltype(types2)>;
122
590
            using FromDataType = typename Types2::LeftType;
123
590
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
590
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
590
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
590
                return false;
127
590
            }
128
590
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
590
                using FromFieldType = typename FromDataType::FieldType;
130
590
                using ToFieldType = typename ToDataType::FieldType;
131
590
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
590
                UInt32 from_scale = 0;
133
134
590
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
590
                    const auto* from_decimal_type =
136
590
                            check_and_get_data_type<FromDataType>(from_type.get());
137
590
                    from_precision =
138
590
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
590
                    from_scale = from_decimal_type->get_scale();
140
590
                }
141
142
590
                UInt32 to_max_digits = 0;
143
590
                UInt32 to_precision = 0;
144
590
                UInt32 to_scale = 0;
145
146
590
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
590
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
590
                    const auto* to_decimal_type =
150
590
                            check_and_get_data_type<ToDataType>(to_type.get());
151
590
                    to_precision = to_decimal_type->get_precision();
152
590
                    ToDataType::check_type_precision(to_precision);
153
154
590
                    to_scale = to_decimal_type->get_scale();
155
590
                    ToDataType::check_type_scale(to_scale);
156
590
                }
157
590
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
590
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
590
                    to_precision = to_max_digits;
160
590
                }
161
162
590
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
590
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
590
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
590
                if (to_scale > from_scale) {
167
590
                    multiply_may_overflow &=
168
590
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
590
                }
170
590
                return narrow_integral || multiply_may_overflow;
171
590
            }
172
590
            return false;
173
590
        });
174
590
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_
Line
Count
Source
110
80.5k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
80.5k
        using Types = std::decay_t<decltype(types)>;
112
80.5k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
80.5k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
80.5k
            return false;
118
80.5k
        }
119
0
        return call_on_index_and_data_type<
120
80.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
80.5k
            using Types2 = std::decay_t<decltype(types2)>;
122
80.5k
            using FromDataType = typename Types2::LeftType;
123
80.5k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
80.5k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
80.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
80.5k
                return false;
127
80.5k
            }
128
80.5k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
80.5k
                using FromFieldType = typename FromDataType::FieldType;
130
80.5k
                using ToFieldType = typename ToDataType::FieldType;
131
80.5k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
80.5k
                UInt32 from_scale = 0;
133
134
80.5k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
80.5k
                    const auto* from_decimal_type =
136
80.5k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
80.5k
                    from_precision =
138
80.5k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
80.5k
                    from_scale = from_decimal_type->get_scale();
140
80.5k
                }
141
142
80.5k
                UInt32 to_max_digits = 0;
143
80.5k
                UInt32 to_precision = 0;
144
80.5k
                UInt32 to_scale = 0;
145
146
80.5k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
80.5k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
80.5k
                    const auto* to_decimal_type =
150
80.5k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
80.5k
                    to_precision = to_decimal_type->get_precision();
152
80.5k
                    ToDataType::check_type_precision(to_precision);
153
154
80.5k
                    to_scale = to_decimal_type->get_scale();
155
80.5k
                    ToDataType::check_type_scale(to_scale);
156
80.5k
                }
157
80.5k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
80.5k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
80.5k
                    to_precision = to_max_digits;
160
80.5k
                }
161
162
80.5k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
80.5k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
80.5k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
80.5k
                if (to_scale > from_scale) {
167
80.5k
                    multiply_may_overflow &=
168
80.5k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
80.5k
                }
170
80.5k
                return narrow_integral || multiply_may_overflow;
171
80.5k
            }
172
80.5k
            return false;
173
80.5k
        });
174
80.5k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_
Line
Count
Source
110
154k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
154k
        using Types = std::decay_t<decltype(types)>;
112
154k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
154k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
154k
            return false;
118
154k
        }
119
0
        return call_on_index_and_data_type<
120
154k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
154k
            using Types2 = std::decay_t<decltype(types2)>;
122
154k
            using FromDataType = typename Types2::LeftType;
123
154k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
154k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
154k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
154k
                return false;
127
154k
            }
128
154k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
154k
                using FromFieldType = typename FromDataType::FieldType;
130
154k
                using ToFieldType = typename ToDataType::FieldType;
131
154k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
154k
                UInt32 from_scale = 0;
133
134
154k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
154k
                    const auto* from_decimal_type =
136
154k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
154k
                    from_precision =
138
154k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
154k
                    from_scale = from_decimal_type->get_scale();
140
154k
                }
141
142
154k
                UInt32 to_max_digits = 0;
143
154k
                UInt32 to_precision = 0;
144
154k
                UInt32 to_scale = 0;
145
146
154k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
154k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
154k
                    const auto* to_decimal_type =
150
154k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
154k
                    to_precision = to_decimal_type->get_precision();
152
154k
                    ToDataType::check_type_precision(to_precision);
153
154
154k
                    to_scale = to_decimal_type->get_scale();
155
154k
                    ToDataType::check_type_scale(to_scale);
156
154k
                }
157
154k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
154k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
154k
                    to_precision = to_max_digits;
160
154k
                }
161
162
154k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
154k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
154k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
154k
                if (to_scale > from_scale) {
167
154k
                    multiply_may_overflow &=
168
154k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
154k
                }
170
154k
                return narrow_integral || multiply_may_overflow;
171
154k
            }
172
154k
            return false;
173
154k
        });
174
154k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_
Line
Count
Source
110
106k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
106k
        using Types = std::decay_t<decltype(types)>;
112
106k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
106k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
106k
            return false;
118
106k
        }
119
0
        return call_on_index_and_data_type<
120
106k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
106k
            using Types2 = std::decay_t<decltype(types2)>;
122
106k
            using FromDataType = typename Types2::LeftType;
123
106k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
106k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
106k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
106k
                return false;
127
106k
            }
128
106k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
106k
                using FromFieldType = typename FromDataType::FieldType;
130
106k
                using ToFieldType = typename ToDataType::FieldType;
131
106k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
106k
                UInt32 from_scale = 0;
133
134
106k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
106k
                    const auto* from_decimal_type =
136
106k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
106k
                    from_precision =
138
106k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
106k
                    from_scale = from_decimal_type->get_scale();
140
106k
                }
141
142
106k
                UInt32 to_max_digits = 0;
143
106k
                UInt32 to_precision = 0;
144
106k
                UInt32 to_scale = 0;
145
146
106k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
106k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
106k
                    const auto* to_decimal_type =
150
106k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
106k
                    to_precision = to_decimal_type->get_precision();
152
106k
                    ToDataType::check_type_precision(to_precision);
153
154
106k
                    to_scale = to_decimal_type->get_scale();
155
106k
                    ToDataType::check_type_scale(to_scale);
156
106k
                }
157
106k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
106k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
106k
                    to_precision = to_max_digits;
160
106k
                }
161
162
106k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
106k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
106k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
106k
                if (to_scale > from_scale) {
167
106k
                    multiply_may_overflow &=
168
106k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
106k
                }
170
106k
                return narrow_integral || multiply_may_overflow;
171
106k
            }
172
106k
            return false;
173
106k
        });
174
106k
    };
175
176
1.40M
    return call_on_index_and_data_type<void>(to_type->get_primitive_type(), make_default_wrapper);
177
1.47M
}
178
179
WrapperType prepare_remove_nullable(FunctionContext* context, const DataTypePtr& from_type,
180
1.49M
                                    const DataTypePtr& to_type) {
181
    /// Determine whether pre-processing and/or post-processing must take place during conversion.
182
1.49M
    bool result_is_nullable = to_type->is_nullable();
183
184
1.49M
    if (result_is_nullable) {
185
1.47M
        return [from_type, to_type](FunctionContext* context, Block& block,
186
1.47M
                                    const ColumnNumbers& arguments, uint32_t result,
187
1.47M
                                    size_t input_rows_count,
188
1.47M
                                    const NullMap::value_type* null_map = nullptr) {
189
1.47M
            auto from_type_not_nullable = remove_nullable(from_type);
190
1.47M
            auto to_type_not_nullable = remove_nullable(to_type);
191
192
1.47M
            bool replace_null_data_to_default = need_replace_null_data_to_default(
193
1.47M
                    context, from_type_not_nullable, to_type_not_nullable);
194
195
1.47M
            auto nested_result_index = block.columns();
196
1.47M
            block.insert(block.get_by_position(result).unnest_nullable());
197
1.47M
            auto nested_source_index = block.columns();
198
1.47M
            block.insert(block.get_by_position(arguments[0])
199
1.47M
                                 .unnest_nullable(replace_null_data_to_default));
200
201
1.47M
            const auto& arg_col = block.get_by_position(arguments[0]);
202
1.47M
            const NullMap::value_type* arg_null_map = nullptr;
203
1.47M
            if (const auto* nullable = check_and_get_column<ColumnNullable>(*arg_col.column)) {
204
1.42M
                arg_null_map = nullable->get_null_map_data().data();
205
1.42M
            }
206
1.47M
            RETURN_IF_ERROR(prepare_impl(context, from_type_not_nullable, to_type_not_nullable)(
207
1.47M
                    context, block, {nested_source_index}, nested_result_index, input_rows_count,
208
1.47M
                    arg_null_map));
209
210
1.44M
            block.get_by_position(result).column =
211
1.44M
                    wrap_in_nullable(block.get_by_position(nested_result_index).column, block,
212
1.44M
                                     arguments, input_rows_count);
213
214
1.44M
            block.erase(nested_source_index);
215
1.44M
            block.erase(nested_result_index);
216
1.44M
            return Status::OK();
217
1.47M
        };
218
1.47M
    } else {
219
22.8k
        return prepare_impl(context, from_type, to_type);
220
22.8k
    }
221
1.49M
}
222
223
/// 'from_type' and 'to_type' are nested types in case of Nullable.
224
/// 'requested_result_is_nullable' is true if CAST to Nullable type is requested.
225
WrapperType prepare_impl(FunctionContext* context, const DataTypePtr& origin_from_type,
226
1.51M
                         const DataTypePtr& origin_to_type) {
227
1.51M
    auto to_type = get_serialized_type(origin_to_type);
228
1.51M
    auto from_type = get_serialized_type(origin_from_type);
229
1.51M
    if (from_type->equals(*to_type)) {
230
80.9k
        return create_identity_wrapper(from_type);
231
80.9k
    }
232
233
    // variant needs to be judged first
234
1.43M
    if (to_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
235
11.8k
        return create_cast_to_variant_wrapper(from_type,
236
11.8k
                                              static_cast<const DataTypeVariant&>(*to_type));
237
11.8k
    }
238
1.42M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
239
19.6k
        return create_cast_from_variant_wrapper(static_cast<const DataTypeVariant&>(*from_type),
240
19.6k
                                                to_type);
241
19.6k
    }
242
243
1.40M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_JSONB) {
244
9.26k
        return create_cast_from_jsonb_wrapper(static_cast<const DataTypeJsonb&>(*from_type),
245
9.26k
                                              to_type,
246
18.4E
                                              context ? context->jsonb_string_as_string() : false);
247
9.26k
    }
248
249
1.39M
    switch (to_type->get_primitive_type()) {
250
1.08k
    case PrimitiveType::TYPE_BOOLEAN:
251
1.08k
        return create_boolean_wrapper(context, from_type);
252
4.36k
    case PrimitiveType::TYPE_TINYINT:
253
9.74k
    case PrimitiveType::TYPE_SMALLINT:
254
169k
    case PrimitiveType::TYPE_INT:
255
215k
    case PrimitiveType::TYPE_BIGINT:
256
285k
    case PrimitiveType::TYPE_LARGEINT:
257
285k
        return create_int_wrapper(context, from_type, to_type->get_primitive_type());
258
11.0k
    case PrimitiveType::TYPE_FLOAT:
259
36.8k
    case PrimitiveType::TYPE_DOUBLE:
260
36.8k
        return create_float_wrapper(context, from_type, to_type->get_primitive_type());
261
32
    case PrimitiveType::TYPE_DATE:
262
58
    case PrimitiveType::TYPE_DATETIME:
263
162k
    case PrimitiveType::TYPE_DATEV2:
264
312k
    case PrimitiveType::TYPE_DATETIMEV2:
265
313k
    case PrimitiveType::TYPE_TIMEV2:
266
313k
        return create_datelike_wrapper(context, from_type, to_type->get_primitive_type());
267
581
    case PrimitiveType::TYPE_TIMESTAMPTZ:
268
581
        return create_timestamptz_wrapper(context, from_type);
269
80.3k
    case PrimitiveType::TYPE_IPV4:
270
235k
    case PrimitiveType::TYPE_IPV6:
271
235k
        return create_ip_wrapper(context, from_type, to_type->get_primitive_type());
272
292
    case PrimitiveType::TYPE_DECIMALV2:
273
8.14k
    case PrimitiveType::TYPE_DECIMAL32:
274
22.9k
    case PrimitiveType::TYPE_DECIMAL64:
275
186k
    case PrimitiveType::TYPE_DECIMAL128I:
276
197k
    case PrimitiveType::TYPE_DECIMAL256:
277
197k
        return create_decimal_wrapper(context, from_type, to_type->get_primitive_type());
278
20
    case PrimitiveType::TYPE_CHAR:
279
4.47k
    case PrimitiveType::TYPE_VARCHAR:
280
102k
    case PrimitiveType::TYPE_STRING:
281
102k
        return create_string_wrapper(from_type);
282
156k
    case PrimitiveType::TYPE_ARRAY:
283
156k
        return create_array_wrapper(context, from_type,
284
156k
                                    static_cast<const DataTypeArray&>(*to_type));
285
1.75k
    case PrimitiveType::TYPE_STRUCT:
286
1.75k
        return create_struct_wrapper(context, from_type,
287
1.75k
                                     static_cast<const DataTypeStruct&>(*to_type));
288
1.32k
    case PrimitiveType::TYPE_MAP:
289
1.32k
        return create_map_wrapper(context, from_type, static_cast<const DataTypeMap&>(*to_type));
290
0
    case PrimitiveType::TYPE_HLL:
291
0
        return create_hll_wrapper(context, from_type, static_cast<const DataTypeHLL&>(*to_type));
292
1
    case PrimitiveType::TYPE_BITMAP:
293
1
        return create_bitmap_wrapper(context, from_type,
294
1
                                     static_cast<const DataTypeBitMap&>(*to_type));
295
0
    case PrimitiveType::TYPE_QUANTILE_STATE:
296
0
        return create_quantile_state_wrapper(context, from_type,
297
0
                                             static_cast<const DataTypeQuantileState&>(*to_type));
298
59.4k
    case PrimitiveType::TYPE_JSONB:
299
59.4k
        return create_cast_to_jsonb_wrapper(from_type, static_cast<const DataTypeJsonb&>(*to_type),
300
59.4k
                                            context ? context->string_as_jsonb_string() : false);
301
2
    case PrimitiveType::TYPE_VARBINARY:
302
2
        return create_varbinary_wrapper(from_type);
303
0
    default:
304
0
        break;
305
1.39M
    }
306
307
0
    return create_unsupport_wrapper(from_type->get_name(), to_type->get_name());
308
1.39M
}
309
310
} // namespace CastWrapper
311
312
class PreparedFunctionCast : public PreparedFunctionImpl {
313
public:
314
    explicit PreparedFunctionCast(CastWrapper::WrapperType&& wrapper_function_, const char* name_)
315
1.33M
            : wrapper_function(std::move(wrapper_function_)), name(name_) {}
316
317
0
    String get_name() const override { return name; }
318
319
protected:
320
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
321
1.33M
                        uint32_t result, size_t input_rows_count) const override {
322
1.33M
        return wrapper_function(context, block, arguments, result, input_rows_count, nullptr);
323
1.33M
    }
324
325
1.33M
    bool use_default_implementation_for_nulls() const override { return false; }
326
1.33M
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
327
328
private:
329
    CastWrapper::WrapperType wrapper_function;
330
    const char* name;
331
};
332
333
class FunctionCast final : public IFunctionBase {
334
public:
335
    FunctionCast(const char* name_, DataTypes argument_types_, DataTypePtr return_type_)
336
1.23M
            : name(name_),
337
1.23M
              argument_types(std::move(argument_types_)),
338
1.23M
              return_type(std::move(return_type_)) {}
339
340
1.33M
    const DataTypes& get_argument_types() const override { return argument_types; }
341
1.33M
    const DataTypePtr& get_return_type() const override { return return_type; }
342
343
    PreparedFunctionPtr prepare(FunctionContext* context, const Block& /*sample_block*/,
344
                                const ColumnNumbers& /*arguments*/,
345
1.33M
                                uint32_t /*result*/) const override {
346
1.33M
        return std::make_shared<PreparedFunctionCast>(
347
1.33M
                CastWrapper::prepare_unpack_dictionaries(context, get_argument_types()[0],
348
1.33M
                                                         get_return_type()),
349
1.33M
                name);
350
1.33M
    }
351
352
0
    String get_name() const override { return name; }
353
354
0
    bool is_use_default_implementation_for_constants() const override { return true; }
355
356
private:
357
    const char* name = nullptr;
358
359
    DataTypes argument_types;
360
    DataTypePtr return_type;
361
};
362
363
class FunctionBuilderCast : public FunctionBuilderImpl {
364
public:
365
    static constexpr auto name = "CAST";
366
1.23M
    static FunctionBuilderPtr create() { return std::make_shared<FunctionBuilderCast>(); }
367
368
1.23M
    FunctionBuilderCast() = default;
369
370
1
    String get_name() const override { return name; }
371
372
0
    size_t get_number_of_arguments() const override { return 2; }
373
374
0
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
375
376
protected:
377
    FunctionBasePtr build_impl(const ColumnsWithTypeAndName& arguments,
378
1.23M
                               const DataTypePtr& return_type) const override {
379
1.23M
        DataTypes data_types(arguments.size());
380
381
3.71M
        for (size_t i = 0; i < arguments.size(); ++i) {
382
2.47M
            data_types[i] = arguments[i].type;
383
2.47M
        }
384
385
1.23M
        return std::make_shared<FunctionCast>(name, data_types, return_type);
386
1.23M
    }
387
388
1.23M
    bool skip_return_type_check() const override { return true; }
389
0
    DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) const override {
390
0
        return nullptr;
391
0
    }
392
393
0
    bool use_default_implementation_for_nulls() const override { return false; }
394
};
395
396
7
void register_function_cast(SimpleFunctionFactory& factory) {
397
7
    factory.register_function<FunctionBuilderCast>();
398
7
}
399
} // namespace doris