Coverage Report

Created: 2026-06-29 12:35

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
6
                               const DataTypeHLL& to_type) {
39
    /// Conversion from String through parsing.
40
6
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
41
6
        return cast_from_string_to_generic;
42
6
    }
43
44
0
    return CastWrapper::create_unsupport_wrapper("Cast to HLL only support from String type");
45
6
}
46
47
WrapperType create_bitmap_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
48
5
                                  const DataTypeBitMap& to_type) {
49
    /// Conversion from String through parsing.
50
5
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
51
5
        return cast_from_string_to_generic;
52
5
    }
53
54
0
    return CastWrapper::create_unsupport_wrapper("Cast to BitMap only support from String type");
55
5
}
56
57
WrapperType create_quantile_state_wrapper(FunctionContext* context,
58
                                          const DataTypePtr& from_type_untyped,
59
2
                                          const DataTypeQuantileState& to_type) {
60
    /// Conversion from String through parsing.
61
2
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
62
2
        return cast_from_string_to_generic;
63
2
    }
64
65
0
    return CastWrapper::create_unsupport_wrapper(
66
0
            "Cast to QuantileState only support from String type");
67
2
}
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.50M
                                        const DataTypePtr& to_type) {
80
1.50M
    const auto& from_nested = from_type;
81
1.50M
    const auto& to_nested = to_type;
82
83
1.50M
    if (from_type->is_null_literal()) {
84
2.16k
        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
2.16k
        return [](FunctionContext* context, Block& block, const ColumnNumbers&, uint32_t result,
90
2.16k
                  size_t input_rows_count, const NullMap::value_type* null_map = nullptr) {
91
            /// TODO: remove this in the future.
92
2.16k
            auto& res = block.get_by_position(result);
93
2.16k
            res.column = res.type->create_column_const_with_default_value(input_rows_count)
94
2.16k
                                 ->convert_to_full_column_if_const();
95
2.16k
            return Status::OK();
96
2.16k
        };
97
2.16k
    }
98
99
1.50M
    auto wrapper = prepare_remove_nullable(context, from_nested, to_nested);
100
101
1.50M
    return wrapper;
102
1.50M
}
103
104
bool need_replace_null_data_to_default(FunctionContext* context, const DataTypePtr& from_type,
105
1.46M
                                       const DataTypePtr& to_type) {
106
1.46M
    if (from_type->equals(*to_type)) {
107
88.7k
        return false;
108
88.7k
    }
109
110
1.38M
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
1.15M
        using Types = std::decay_t<decltype(types)>;
112
1.15M
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
330k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
330k
            return false;
118
330k
        }
119
0
        return call_on_index_and_data_type<
120
1.15M
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
802k
            using Types2 = std::decay_t<decltype(types2)>;
122
802k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
581k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
581k
                return false;
127
581k
            }
128
206k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
206k
                using FromFieldType = typename FromDataType::FieldType;
130
206k
                using ToFieldType = typename ToDataType::FieldType;
131
206k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
206k
                UInt32 from_scale = 0;
133
134
206k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
29.3k
                    const auto* from_decimal_type =
136
29.3k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
29.3k
                    from_precision =
138
29.3k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
29.3k
                    from_scale = from_decimal_type->get_scale();
140
29.3k
                }
141
142
206k
                UInt32 to_max_digits = 0;
143
206k
                UInt32 to_precision = 0;
144
206k
                UInt32 to_scale = 0;
145
146
206k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
200k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
200k
                    const auto* to_decimal_type =
150
200k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
200k
                    to_precision = to_decimal_type->get_precision();
152
200k
                    ToDataType::check_type_precision(to_precision);
153
154
200k
                    to_scale = to_decimal_type->get_scale();
155
200k
                    ToDataType::check_type_scale(to_scale);
156
200k
                }
157
206k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
6.05k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
6.05k
                    to_precision = to_max_digits;
160
6.05k
                }
161
162
206k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
206k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
206k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
206k
                if (to_scale > from_scale) {
167
12.3k
                    multiply_may_overflow &=
168
12.3k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
12.3k
                }
170
206k
                return narrow_integral || multiply_may_overflow;
171
206k
            }
172
0
            return false;
173
802k
        });
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
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
        });
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
827
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
827
            using Types2 = std::decay_t<decltype(types2)>;
122
827
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
827
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
827
                return false;
127
827
            }
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
827
            return false;
173
827
        });
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
2.57k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.57k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.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
2.57k
            return false;
173
2.57k
        });
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
143
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
143
            using Types2 = std::decay_t<decltype(types2)>;
122
143
            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
143
            return false;
173
143
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
120
217
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
217
            using Types2 = std::decay_t<decltype(types2)>;
122
217
            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
217
            return false;
173
217
        });
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
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
20
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
20
                    const auto* from_decimal_type =
136
20
                            check_and_get_data_type<FromDataType>(from_type.get());
137
20
                    from_precision =
138
20
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
20
                    from_scale = from_decimal_type->get_scale();
140
20
                }
141
142
20
                UInt32 to_max_digits = 0;
143
20
                UInt32 to_precision = 0;
144
20
                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
20
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
20
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
20
                    to_precision = to_max_digits;
160
20
                }
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
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
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_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_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_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
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_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
6.28k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
6.28k
            using Types2 = std::decay_t<decltype(types2)>;
122
6.28k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
6.28k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
6.28k
                return false;
127
6.28k
            }
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.28k
            return false;
173
6.28k
        });
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
306
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
306
            using Types2 = std::decay_t<decltype(types2)>;
122
306
            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
306
            return false;
173
306
        });
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.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
        });
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
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
        });
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.91k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.91k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.91k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.91k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.91k
                return false;
127
2.91k
            }
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.91k
            return false;
173
2.91k
        });
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
3.52k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
3.52k
            using Types2 = std::decay_t<decltype(types2)>;
122
3.52k
            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.52k
            return false;
173
3.52k
        });
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
352
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
352
            using Types2 = std::decay_t<decltype(types2)>;
122
352
            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
352
            return false;
173
352
        });
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
125k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
125k
            using Types2 = std::decay_t<decltype(types2)>;
122
125k
            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
125k
            return false;
173
125k
        });
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
133
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
133
            using Types2 = std::decay_t<decltype(types2)>;
122
133
            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
133
            return false;
173
133
        });
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
37
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
37
            using Types2 = std::decay_t<decltype(types2)>;
122
37
            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
37
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
37
                using FromFieldType = typename FromDataType::FieldType;
130
37
                using ToFieldType = typename ToDataType::FieldType;
131
37
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
37
                UInt32 from_scale = 0;
133
134
37
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
37
                    const auto* from_decimal_type =
136
37
                            check_and_get_data_type<FromDataType>(from_type.get());
137
37
                    from_precision =
138
37
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
37
                    from_scale = from_decimal_type->get_scale();
140
37
                }
141
142
37
                UInt32 to_max_digits = 0;
143
37
                UInt32 to_precision = 0;
144
37
                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
37
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
37
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
37
                    to_precision = to_max_digits;
160
37
                }
161
162
37
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
37
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
37
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
37
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
37
                return narrow_integral || multiply_may_overflow;
171
37
            }
172
0
            return false;
173
37
        });
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
250
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
250
            using Types2 = std::decay_t<decltype(types2)>;
122
250
            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
250
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
250
                using FromFieldType = typename FromDataType::FieldType;
130
250
                using ToFieldType = typename ToDataType::FieldType;
131
250
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
250
                UInt32 from_scale = 0;
133
134
250
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
250
                    const auto* from_decimal_type =
136
250
                            check_and_get_data_type<FromDataType>(from_type.get());
137
250
                    from_precision =
138
250
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
250
                    from_scale = from_decimal_type->get_scale();
140
250
                }
141
142
250
                UInt32 to_max_digits = 0;
143
250
                UInt32 to_precision = 0;
144
250
                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
250
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
250
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
250
                    to_precision = to_max_digits;
160
250
                }
161
162
250
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
250
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
250
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
250
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
250
                return narrow_integral || multiply_may_overflow;
171
250
            }
172
0
            return false;
173
250
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
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_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
22.4k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
22.4k
            using Types2 = std::decay_t<decltype(types2)>;
122
22.4k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
22.4k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
22.4k
                return false;
127
22.4k
            }
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
22.4k
            return false;
173
22.4k
        });
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
570
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
570
            using Types2 = std::decay_t<decltype(types2)>;
122
570
            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
570
            return false;
173
570
        });
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.28k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.28k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.28k
            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.28k
            return false;
173
1.28k
        });
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
658
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
658
            using Types2 = std::decay_t<decltype(types2)>;
122
658
            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
658
            return false;
173
658
        });
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
12.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
12.0k
            using Types2 = std::decay_t<decltype(types2)>;
122
12.0k
            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.0k
            return false;
173
12.0k
        });
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
314
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
314
            using Types2 = std::decay_t<decltype(types2)>;
122
314
            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
314
            return false;
173
314
        });
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
642
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
642
            using Types2 = std::decay_t<decltype(types2)>;
122
642
            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
642
            return false;
173
642
        });
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.33k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.33k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.33k
            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.33k
            return false;
173
2.33k
        });
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
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
                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
318
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
318
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
318
                    to_precision = to_max_digits;
160
318
                }
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
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
318
            }
172
0
            return false;
173
318
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
120
304
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
304
            using Types2 = std::decay_t<decltype(types2)>;
122
304
            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
304
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
304
                using FromFieldType = typename FromDataType::FieldType;
130
304
                using ToFieldType = typename ToDataType::FieldType;
131
304
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
304
                UInt32 from_scale = 0;
133
134
304
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
304
                    const auto* from_decimal_type =
136
304
                            check_and_get_data_type<FromDataType>(from_type.get());
137
304
                    from_precision =
138
304
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
304
                    from_scale = from_decimal_type->get_scale();
140
304
                }
141
142
304
                UInt32 to_max_digits = 0;
143
304
                UInt32 to_precision = 0;
144
304
                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
304
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
304
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
304
                    to_precision = to_max_digits;
160
304
                }
161
162
304
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
304
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
304
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
304
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
304
                return narrow_integral || multiply_may_overflow;
171
304
            }
172
0
            return false;
173
304
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
120
746
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
746
            using Types2 = std::decay_t<decltype(types2)>;
122
746
            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
746
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
746
                using FromFieldType = typename FromDataType::FieldType;
130
746
                using ToFieldType = typename ToDataType::FieldType;
131
746
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
746
                UInt32 from_scale = 0;
133
134
746
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
746
                    const auto* from_decimal_type =
136
746
                            check_and_get_data_type<FromDataType>(from_type.get());
137
746
                    from_precision =
138
746
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
746
                    from_scale = from_decimal_type->get_scale();
140
746
                }
141
142
746
                UInt32 to_max_digits = 0;
143
746
                UInt32 to_precision = 0;
144
746
                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
746
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
746
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
746
                    to_precision = to_max_digits;
160
746
                }
161
162
746
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
746
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
746
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
746
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
746
                return narrow_integral || multiply_may_overflow;
171
746
            }
172
0
            return false;
173
746
        });
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
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_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.25k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.25k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.25k
            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.25k
            return false;
173
1.25k
        });
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
22.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
22.5k
            using Types2 = std::decay_t<decltype(types2)>;
122
22.5k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
22.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
22.5k
                return false;
127
22.5k
            }
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
22.5k
            return false;
173
22.5k
        });
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
152
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
152
            using Types2 = std::decay_t<decltype(types2)>;
122
152
            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
152
            return false;
173
152
        });
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
135
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
135
            using Types2 = std::decay_t<decltype(types2)>;
122
135
            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
135
            return false;
173
135
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
120
586
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
586
            using Types2 = std::decay_t<decltype(types2)>;
122
586
            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
586
            return false;
173
586
        });
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
62.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
62.2k
            using Types2 = std::decay_t<decltype(types2)>;
122
62.2k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
62.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
62.2k
                return false;
127
62.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
62.2k
            return false;
173
62.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
96
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
96
            using Types2 = std::decay_t<decltype(types2)>;
122
96
            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
96
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
96
                using FromFieldType = typename FromDataType::FieldType;
130
96
                using ToFieldType = typename ToDataType::FieldType;
131
96
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
96
                UInt32 from_scale = 0;
133
134
96
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
96
                    const auto* from_decimal_type =
136
96
                            check_and_get_data_type<FromDataType>(from_type.get());
137
96
                    from_precision =
138
96
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
96
                    from_scale = from_decimal_type->get_scale();
140
96
                }
141
142
96
                UInt32 to_max_digits = 0;
143
96
                UInt32 to_precision = 0;
144
96
                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
96
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
96
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
96
                    to_precision = to_max_digits;
160
96
                }
161
162
96
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
96
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
96
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
96
                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
96
            }
172
0
            return false;
173
96
        });
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.74k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.74k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.74k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
1.74k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
1.74k
                return false;
127
1.74k
            }
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.74k
            return false;
173
1.74k
        });
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
314
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
314
            using Types2 = std::decay_t<decltype(types2)>;
122
314
            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
314
            return false;
173
314
        });
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
447
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
447
            using Types2 = std::decay_t<decltype(types2)>;
122
447
            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
447
            return false;
173
447
        });
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.07k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.07k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.07k
            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.07k
            return false;
173
1.07k
        });
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.45k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.45k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.45k
            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.45k
            return false;
173
1.45k
        });
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
196
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
196
            using Types2 = std::decay_t<decltype(types2)>;
122
196
            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
196
            return false;
173
196
        });
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.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_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
412
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
412
            using Types2 = std::decay_t<decltype(types2)>;
122
412
            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
412
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
412
                using FromFieldType = typename FromDataType::FieldType;
130
412
                using ToFieldType = typename ToDataType::FieldType;
131
412
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
412
                UInt32 from_scale = 0;
133
134
412
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
412
                    const auto* from_decimal_type =
136
412
                            check_and_get_data_type<FromDataType>(from_type.get());
137
412
                    from_precision =
138
412
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
412
                    from_scale = from_decimal_type->get_scale();
140
412
                }
141
142
412
                UInt32 to_max_digits = 0;
143
412
                UInt32 to_precision = 0;
144
412
                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
412
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
412
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
412
                    to_precision = to_max_digits;
160
412
                }
161
162
412
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
412
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
412
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
412
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
413
                return narrow_integral || multiply_may_overflow;
171
412
            }
172
0
            return false;
173
412
        });
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
315
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
315
            using Types2 = std::decay_t<decltype(types2)>;
122
315
            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
315
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
315
                using FromFieldType = typename FromDataType::FieldType;
130
315
                using ToFieldType = typename ToDataType::FieldType;
131
315
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
315
                UInt32 from_scale = 0;
133
134
315
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
315
                    const auto* from_decimal_type =
136
315
                            check_and_get_data_type<FromDataType>(from_type.get());
137
315
                    from_precision =
138
315
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
315
                    from_scale = from_decimal_type->get_scale();
140
315
                }
141
142
315
                UInt32 to_max_digits = 0;
143
315
                UInt32 to_precision = 0;
144
315
                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
315
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
315
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
315
                    to_precision = to_max_digits;
160
315
                }
161
162
315
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
315
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
315
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
315
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
315
                return narrow_integral || multiply_may_overflow;
171
315
            }
172
0
            return false;
173
315
        });
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
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
54
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
54
                using FromFieldType = typename FromDataType::FieldType;
130
54
                using ToFieldType = typename ToDataType::FieldType;
131
54
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
54
                UInt32 from_scale = 0;
133
134
54
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
54
                    const auto* from_decimal_type =
136
54
                            check_and_get_data_type<FromDataType>(from_type.get());
137
54
                    from_precision =
138
54
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
54
                    from_scale = from_decimal_type->get_scale();
140
54
                }
141
142
54
                UInt32 to_max_digits = 0;
143
54
                UInt32 to_precision = 0;
144
54
                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
54
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
54
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
54
                    to_precision = to_max_digits;
160
54
                }
161
162
54
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
54
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
54
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
54
                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
54
            }
172
0
            return false;
173
54
        });
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
689
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
689
            using Types2 = std::decay_t<decltype(types2)>;
122
689
            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
689
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
689
                using FromFieldType = typename FromDataType::FieldType;
130
689
                using ToFieldType = typename ToDataType::FieldType;
131
689
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
689
                UInt32 from_scale = 0;
133
134
689
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
689
                    const auto* from_decimal_type =
136
689
                            check_and_get_data_type<FromDataType>(from_type.get());
137
689
                    from_precision =
138
689
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
689
                    from_scale = from_decimal_type->get_scale();
140
689
                }
141
142
689
                UInt32 to_max_digits = 0;
143
689
                UInt32 to_precision = 0;
144
689
                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
689
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
689
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
689
                    to_precision = to_max_digits;
160
689
                }
161
162
689
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
689
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
689
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
689
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
690
                return narrow_integral || multiply_may_overflow;
171
689
            }
172
0
            return false;
173
689
        });
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
544
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
544
            using Types2 = std::decay_t<decltype(types2)>;
122
544
            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
544
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
544
                using FromFieldType = typename FromDataType::FieldType;
130
544
                using ToFieldType = typename ToDataType::FieldType;
131
544
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
544
                UInt32 from_scale = 0;
133
134
544
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
544
                    const auto* from_decimal_type =
136
544
                            check_and_get_data_type<FromDataType>(from_type.get());
137
544
                    from_precision =
138
544
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
544
                    from_scale = from_decimal_type->get_scale();
140
544
                }
141
142
544
                UInt32 to_max_digits = 0;
143
544
                UInt32 to_precision = 0;
144
544
                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
544
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
544
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
544
                    to_precision = to_max_digits;
160
544
                }
161
162
544
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
544
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
544
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
544
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
544
                return narrow_integral || multiply_may_overflow;
171
544
            }
172
0
            return false;
173
544
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
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_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
120
7.84k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.84k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.84k
            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.84k
            return false;
173
7.84k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
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.41k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
6.41k
            using Types2 = std::decay_t<decltype(types2)>;
122
6.41k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
6.41k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
6.41k
                return false;
127
6.41k
            }
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.41k
            return false;
173
6.41k
        });
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
481
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
481
            using Types2 = std::decay_t<decltype(types2)>;
122
481
            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
481
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
481
                using FromFieldType = typename FromDataType::FieldType;
130
481
                using ToFieldType = typename ToDataType::FieldType;
131
481
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
481
                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
481
                UInt32 to_max_digits = 0;
143
481
                UInt32 to_precision = 0;
144
481
                UInt32 to_scale = 0;
145
146
481
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
481
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
481
                    const auto* to_decimal_type =
150
481
                            check_and_get_data_type<ToDataType>(to_type.get());
151
481
                    to_precision = to_decimal_type->get_precision();
152
481
                    ToDataType::check_type_precision(to_precision);
153
154
481
                    to_scale = to_decimal_type->get_scale();
155
481
                    ToDataType::check_type_scale(to_scale);
156
481
                }
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
481
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
481
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
481
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
481
                if (to_scale > from_scale) {
167
279
                    multiply_may_overflow &=
168
279
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
279
                }
170
481
                return narrow_integral || multiply_may_overflow;
171
481
            }
172
0
            return false;
173
481
        });
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
500
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
500
            using Types2 = std::decay_t<decltype(types2)>;
122
500
            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
500
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
500
                using FromFieldType = typename FromDataType::FieldType;
130
500
                using ToFieldType = typename ToDataType::FieldType;
131
500
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
500
                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
500
                UInt32 to_max_digits = 0;
143
500
                UInt32 to_precision = 0;
144
500
                UInt32 to_scale = 0;
145
146
500
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
500
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
500
                    const auto* to_decimal_type =
150
500
                            check_and_get_data_type<ToDataType>(to_type.get());
151
500
                    to_precision = to_decimal_type->get_precision();
152
500
                    ToDataType::check_type_precision(to_precision);
153
154
500
                    to_scale = to_decimal_type->get_scale();
155
500
                    ToDataType::check_type_scale(to_scale);
156
500
                }
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
500
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
500
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
500
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
500
                if (to_scale > from_scale) {
167
252
                    multiply_may_overflow &=
168
252
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
252
                }
170
500
                return narrow_integral || multiply_may_overflow;
171
500
            }
172
0
            return false;
173
500
        });
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
612
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
612
            using Types2 = std::decay_t<decltype(types2)>;
122
612
            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
612
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
612
                using FromFieldType = typename FromDataType::FieldType;
130
612
                using ToFieldType = typename ToDataType::FieldType;
131
612
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
612
                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
612
                UInt32 to_max_digits = 0;
143
612
                UInt32 to_precision = 0;
144
612
                UInt32 to_scale = 0;
145
146
612
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
612
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
612
                    const auto* to_decimal_type =
150
612
                            check_and_get_data_type<ToDataType>(to_type.get());
151
612
                    to_precision = to_decimal_type->get_precision();
152
612
                    ToDataType::check_type_precision(to_precision);
153
154
612
                    to_scale = to_decimal_type->get_scale();
155
612
                    ToDataType::check_type_scale(to_scale);
156
612
                }
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
612
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
612
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
612
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
612
                if (to_scale > from_scale) {
167
266
                    multiply_may_overflow &=
168
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
266
                }
170
612
                return narrow_integral || multiply_may_overflow;
171
612
            }
172
0
            return false;
173
612
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
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
406
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
406
            using Types2 = std::decay_t<decltype(types2)>;
122
406
            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
406
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
406
                using FromFieldType = typename FromDataType::FieldType;
130
406
                using ToFieldType = typename ToDataType::FieldType;
131
406
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
406
                UInt32 from_scale = 0;
133
134
406
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
406
                    const auto* from_decimal_type =
136
406
                            check_and_get_data_type<FromDataType>(from_type.get());
137
406
                    from_precision =
138
406
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
406
                    from_scale = from_decimal_type->get_scale();
140
406
                }
141
142
406
                UInt32 to_max_digits = 0;
143
406
                UInt32 to_precision = 0;
144
406
                UInt32 to_scale = 0;
145
146
406
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
406
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
406
                    const auto* to_decimal_type =
150
406
                            check_and_get_data_type<ToDataType>(to_type.get());
151
406
                    to_precision = to_decimal_type->get_precision();
152
406
                    ToDataType::check_type_precision(to_precision);
153
154
406
                    to_scale = to_decimal_type->get_scale();
155
406
                    ToDataType::check_type_scale(to_scale);
156
406
                }
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
406
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
406
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
406
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
406
                if (to_scale > from_scale) {
167
87
                    multiply_may_overflow &=
168
87
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
87
                }
170
406
                return narrow_integral || multiply_may_overflow;
171
406
            }
172
0
            return false;
173
406
        });
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
620
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
620
            using Types2 = std::decay_t<decltype(types2)>;
122
620
            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
620
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
620
                using FromFieldType = typename FromDataType::FieldType;
130
620
                using ToFieldType = typename ToDataType::FieldType;
131
620
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
620
                UInt32 from_scale = 0;
133
134
620
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
620
                    const auto* from_decimal_type =
136
620
                            check_and_get_data_type<FromDataType>(from_type.get());
137
620
                    from_precision =
138
620
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
620
                    from_scale = from_decimal_type->get_scale();
140
620
                }
141
142
620
                UInt32 to_max_digits = 0;
143
620
                UInt32 to_precision = 0;
144
620
                UInt32 to_scale = 0;
145
146
620
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
620
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
620
                    const auto* to_decimal_type =
150
620
                            check_and_get_data_type<ToDataType>(to_type.get());
151
620
                    to_precision = to_decimal_type->get_precision();
152
620
                    ToDataType::check_type_precision(to_precision);
153
154
620
                    to_scale = to_decimal_type->get_scale();
155
620
                    ToDataType::check_type_scale(to_scale);
156
620
                }
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
620
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
620
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
620
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
620
                if (to_scale > from_scale) {
167
198
                    multiply_may_overflow &=
168
198
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
198
                }
170
620
                return narrow_integral || multiply_may_overflow;
171
620
            }
172
0
            return false;
173
620
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
120
242
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
242
            using Types2 = std::decay_t<decltype(types2)>;
122
242
            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
242
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
242
                using FromFieldType = typename FromDataType::FieldType;
130
242
                using ToFieldType = typename ToDataType::FieldType;
131
242
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
242
                UInt32 from_scale = 0;
133
134
242
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
242
                    const auto* from_decimal_type =
136
242
                            check_and_get_data_type<FromDataType>(from_type.get());
137
242
                    from_precision =
138
242
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
242
                    from_scale = from_decimal_type->get_scale();
140
242
                }
141
142
242
                UInt32 to_max_digits = 0;
143
242
                UInt32 to_precision = 0;
144
242
                UInt32 to_scale = 0;
145
146
242
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
242
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
242
                    const auto* to_decimal_type =
150
242
                            check_and_get_data_type<ToDataType>(to_type.get());
151
242
                    to_precision = to_decimal_type->get_precision();
152
242
                    ToDataType::check_type_precision(to_precision);
153
154
242
                    to_scale = to_decimal_type->get_scale();
155
242
                    ToDataType::check_type_scale(to_scale);
156
242
                }
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
242
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
242
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
242
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
242
                if (to_scale > from_scale) {
167
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
242
                return narrow_integral || multiply_may_overflow;
171
242
            }
172
0
            return false;
173
242
        });
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
437
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
437
            using Types2 = std::decay_t<decltype(types2)>;
122
437
            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
437
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
437
                using FromFieldType = typename FromDataType::FieldType;
130
437
                using ToFieldType = typename ToDataType::FieldType;
131
437
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
437
                UInt32 from_scale = 0;
133
134
437
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
437
                    const auto* from_decimal_type =
136
437
                            check_and_get_data_type<FromDataType>(from_type.get());
137
437
                    from_precision =
138
437
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
437
                    from_scale = from_decimal_type->get_scale();
140
437
                }
141
142
437
                UInt32 to_max_digits = 0;
143
437
                UInt32 to_precision = 0;
144
437
                UInt32 to_scale = 0;
145
146
437
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
437
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
437
                    const auto* to_decimal_type =
150
437
                            check_and_get_data_type<ToDataType>(to_type.get());
151
437
                    to_precision = to_decimal_type->get_precision();
152
437
                    ToDataType::check_type_precision(to_precision);
153
154
437
                    to_scale = to_decimal_type->get_scale();
155
437
                    ToDataType::check_type_scale(to_scale);
156
437
                }
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
437
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
437
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
437
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
437
                if (to_scale > from_scale) {
167
142
                    multiply_may_overflow &=
168
142
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
142
                }
170
437
                return narrow_integral || multiply_may_overflow;
171
437
            }
172
0
            return false;
173
437
        });
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.92k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.92k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.92k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.92k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.92k
                return false;
127
2.92k
            }
128
2.92k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.92k
                using FromFieldType = typename FromDataType::FieldType;
130
2.92k
                using ToFieldType = typename ToDataType::FieldType;
131
2.92k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.92k
                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.92k
                UInt32 to_max_digits = 0;
143
2.92k
                UInt32 to_precision = 0;
144
2.92k
                UInt32 to_scale = 0;
145
146
2.92k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.92k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.92k
                    const auto* to_decimal_type =
150
2.92k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.92k
                    to_precision = to_decimal_type->get_precision();
152
2.92k
                    ToDataType::check_type_precision(to_precision);
153
154
2.92k
                    to_scale = to_decimal_type->get_scale();
155
2.92k
                    ToDataType::check_type_scale(to_scale);
156
2.92k
                }
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.92k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.92k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.92k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.92k
                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.92k
                return narrow_integral || multiply_may_overflow;
171
2.92k
            }
172
0
            return false;
173
2.92k
        });
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
74
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
74
            using Types2 = std::decay_t<decltype(types2)>;
122
74
            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
74
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
74
                using FromFieldType = typename FromDataType::FieldType;
130
74
                using ToFieldType = typename ToDataType::FieldType;
131
74
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
74
                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
74
                UInt32 to_max_digits = 0;
143
74
                UInt32 to_precision = 0;
144
74
                UInt32 to_scale = 0;
145
146
74
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
74
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
74
                    const auto* to_decimal_type =
150
74
                            check_and_get_data_type<ToDataType>(to_type.get());
151
74
                    to_precision = to_decimal_type->get_precision();
152
74
                    ToDataType::check_type_precision(to_precision);
153
154
74
                    to_scale = to_decimal_type->get_scale();
155
74
                    ToDataType::check_type_scale(to_scale);
156
74
                }
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
74
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
74
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
74
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
74
                if (to_scale > from_scale) {
167
59
                    multiply_may_overflow &=
168
59
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
59
                }
170
74
                return narrow_integral || multiply_may_overflow;
171
74
            }
172
0
            return false;
173
74
        });
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
459
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
459
            using Types2 = std::decay_t<decltype(types2)>;
122
459
            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
459
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
459
                using FromFieldType = typename FromDataType::FieldType;
130
459
                using ToFieldType = typename ToDataType::FieldType;
131
459
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
459
                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
459
                UInt32 to_max_digits = 0;
143
459
                UInt32 to_precision = 0;
144
459
                UInt32 to_scale = 0;
145
146
459
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
459
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
459
                    const auto* to_decimal_type =
150
459
                            check_and_get_data_type<ToDataType>(to_type.get());
151
459
                    to_precision = to_decimal_type->get_precision();
152
459
                    ToDataType::check_type_precision(to_precision);
153
154
459
                    to_scale = to_decimal_type->get_scale();
155
459
                    ToDataType::check_type_scale(to_scale);
156
459
                }
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
459
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
459
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
459
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
459
                if (to_scale > from_scale) {
167
307
                    multiply_may_overflow &=
168
307
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
307
                }
170
459
                return narrow_integral || multiply_may_overflow;
171
459
            }
172
0
            return false;
173
459
        });
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
52
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
52
            using Types2 = std::decay_t<decltype(types2)>;
122
52
            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
52
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
52
                using FromFieldType = typename FromDataType::FieldType;
130
52
                using ToFieldType = typename ToDataType::FieldType;
131
52
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
52
                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
52
                UInt32 to_max_digits = 0;
143
52
                UInt32 to_precision = 0;
144
52
                UInt32 to_scale = 0;
145
146
52
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
52
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
52
                    const auto* to_decimal_type =
150
52
                            check_and_get_data_type<ToDataType>(to_type.get());
151
52
                    to_precision = to_decimal_type->get_precision();
152
52
                    ToDataType::check_type_precision(to_precision);
153
154
52
                    to_scale = to_decimal_type->get_scale();
155
52
                    ToDataType::check_type_scale(to_scale);
156
52
                }
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
52
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
52
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
52
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
52
                if (to_scale > from_scale) {
167
31
                    multiply_may_overflow &=
168
31
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
31
                }
170
52
                return narrow_integral || multiply_may_overflow;
171
52
            }
172
0
            return false;
173
52
        });
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
210
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
210
            using Types2 = std::decay_t<decltype(types2)>;
122
210
            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
210
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
210
                using FromFieldType = typename FromDataType::FieldType;
130
210
                using ToFieldType = typename ToDataType::FieldType;
131
210
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
210
                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
210
                UInt32 to_max_digits = 0;
143
210
                UInt32 to_precision = 0;
144
210
                UInt32 to_scale = 0;
145
146
210
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
210
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
210
                    const auto* to_decimal_type =
150
210
                            check_and_get_data_type<ToDataType>(to_type.get());
151
210
                    to_precision = to_decimal_type->get_precision();
152
210
                    ToDataType::check_type_precision(to_precision);
153
154
210
                    to_scale = to_decimal_type->get_scale();
155
210
                    ToDataType::check_type_scale(to_scale);
156
210
                }
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
210
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
210
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
210
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
210
                if (to_scale > from_scale) {
167
177
                    multiply_may_overflow &=
168
177
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
177
                }
170
210
                return narrow_integral || multiply_may_overflow;
171
210
            }
172
0
            return false;
173
210
        });
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
766
                    multiply_may_overflow &=
168
766
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
766
                }
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
10.0k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
10.0k
            using Types2 = std::decay_t<decltype(types2)>;
122
10.0k
            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.0k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
10.0k
                using FromFieldType = typename FromDataType::FieldType;
130
10.0k
                using ToFieldType = typename ToDataType::FieldType;
131
10.0k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
10.0k
                UInt32 from_scale = 0;
133
134
10.0k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
10.0k
                    const auto* from_decimal_type =
136
10.0k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
10.0k
                    from_precision =
138
10.0k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
10.0k
                    from_scale = from_decimal_type->get_scale();
140
10.0k
                }
141
142
10.0k
                UInt32 to_max_digits = 0;
143
10.0k
                UInt32 to_precision = 0;
144
10.0k
                UInt32 to_scale = 0;
145
146
10.0k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
10.0k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
10.0k
                    const auto* to_decimal_type =
150
10.0k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
10.0k
                    to_precision = to_decimal_type->get_precision();
152
10.0k
                    ToDataType::check_type_precision(to_precision);
153
154
10.0k
                    to_scale = to_decimal_type->get_scale();
155
10.0k
                    ToDataType::check_type_scale(to_scale);
156
10.0k
                }
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
10.0k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
10.0k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
10.0k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
10.0k
                if (to_scale > from_scale) {
167
157
                    multiply_may_overflow &=
168
157
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
157
                }
170
10.0k
                return narrow_integral || multiply_may_overflow;
171
10.0k
            }
172
0
            return false;
173
10.0k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
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
50
                    multiply_may_overflow &=
168
50
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
50
                }
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_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
120
433
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
433
            using Types2 = std::decay_t<decltype(types2)>;
122
433
            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
433
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
433
                using FromFieldType = typename FromDataType::FieldType;
130
433
                using ToFieldType = typename ToDataType::FieldType;
131
433
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
433
                UInt32 from_scale = 0;
133
134
433
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
433
                    const auto* from_decimal_type =
136
433
                            check_and_get_data_type<FromDataType>(from_type.get());
137
433
                    from_precision =
138
433
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
433
                    from_scale = from_decimal_type->get_scale();
140
433
                }
141
142
433
                UInt32 to_max_digits = 0;
143
433
                UInt32 to_precision = 0;
144
433
                UInt32 to_scale = 0;
145
146
433
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
433
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
433
                    const auto* to_decimal_type =
150
433
                            check_and_get_data_type<ToDataType>(to_type.get());
151
433
                    to_precision = to_decimal_type->get_precision();
152
433
                    ToDataType::check_type_precision(to_precision);
153
154
433
                    to_scale = to_decimal_type->get_scale();
155
433
                    ToDataType::check_type_scale(to_scale);
156
433
                }
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
433
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
433
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
433
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
433
                if (to_scale > from_scale) {
167
145
                    multiply_may_overflow &=
168
145
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
145
                }
170
433
                return narrow_integral || multiply_may_overflow;
171
433
            }
172
0
            return false;
173
433
        });
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.93k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
7.93k
            using Types2 = std::decay_t<decltype(types2)>;
122
7.93k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
7.93k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
7.93k
                return false;
127
7.93k
            }
128
7.93k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
7.93k
                using FromFieldType = typename FromDataType::FieldType;
130
7.93k
                using ToFieldType = typename ToDataType::FieldType;
131
7.93k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
7.93k
                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.93k
                UInt32 to_max_digits = 0;
143
7.93k
                UInt32 to_precision = 0;
144
7.93k
                UInt32 to_scale = 0;
145
146
7.93k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
7.93k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
7.93k
                    const auto* to_decimal_type =
150
7.93k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
7.93k
                    to_precision = to_decimal_type->get_precision();
152
7.93k
                    ToDataType::check_type_precision(to_precision);
153
154
7.93k
                    to_scale = to_decimal_type->get_scale();
155
7.93k
                    ToDataType::check_type_scale(to_scale);
156
7.93k
                }
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.93k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
7.93k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
7.93k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
7.93k
                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.93k
                return narrow_integral || multiply_may_overflow;
171
7.93k
            }
172
0
            return false;
173
7.93k
        });
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
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_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
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
        });
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
29
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
29
            using Types2 = std::decay_t<decltype(types2)>;
122
29
            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
29
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
29
                using FromFieldType = typename FromDataType::FieldType;
130
29
                using ToFieldType = typename ToDataType::FieldType;
131
29
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
29
                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
29
                UInt32 to_max_digits = 0;
143
29
                UInt32 to_precision = 0;
144
29
                UInt32 to_scale = 0;
145
146
29
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
29
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
29
                    const auto* to_decimal_type =
150
29
                            check_and_get_data_type<ToDataType>(to_type.get());
151
29
                    to_precision = to_decimal_type->get_precision();
152
29
                    ToDataType::check_type_precision(to_precision);
153
154
29
                    to_scale = to_decimal_type->get_scale();
155
29
                    ToDataType::check_type_scale(to_scale);
156
29
                }
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
29
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
31
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
29
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
30
                if (to_scale > from_scale) {
167
30
                    multiply_may_overflow &=
168
30
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
30
                }
170
29
                return narrow_integral || multiply_may_overflow;
171
29
            }
172
0
            return false;
173
29
        });
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
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
                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
22
                UInt32 to_max_digits = 0;
143
22
                UInt32 to_precision = 0;
144
22
                UInt32 to_scale = 0;
145
146
22
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
22
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
22
                    const auto* to_decimal_type =
150
22
                            check_and_get_data_type<ToDataType>(to_type.get());
151
22
                    to_precision = to_decimal_type->get_precision();
152
22
                    ToDataType::check_type_precision(to_precision);
153
154
22
                    to_scale = to_decimal_type->get_scale();
155
22
                    ToDataType::check_type_scale(to_scale);
156
22
                }
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
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
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
22
            }
172
0
            return false;
173
22
        });
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
166
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
166
            using Types2 = std::decay_t<decltype(types2)>;
122
166
            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
166
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
166
                using FromFieldType = typename FromDataType::FieldType;
130
166
                using ToFieldType = typename ToDataType::FieldType;
131
166
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
166
                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
166
                UInt32 to_max_digits = 0;
143
166
                UInt32 to_precision = 0;
144
166
                UInt32 to_scale = 0;
145
146
166
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
166
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
166
                    const auto* to_decimal_type =
150
166
                            check_and_get_data_type<ToDataType>(to_type.get());
151
166
                    to_precision = to_decimal_type->get_precision();
152
166
                    ToDataType::check_type_precision(to_precision);
153
154
166
                    to_scale = to_decimal_type->get_scale();
155
166
                    ToDataType::check_type_scale(to_scale);
156
166
                }
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
166
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
166
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
166
                if (to_scale > from_scale) {
167
115
                    multiply_may_overflow &=
168
115
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
115
                }
170
166
                return narrow_integral || multiply_may_overflow;
171
166
            }
172
0
            return false;
173
166
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
120
452
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
452
            using Types2 = std::decay_t<decltype(types2)>;
122
452
            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
452
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
452
                using FromFieldType = typename FromDataType::FieldType;
130
452
                using ToFieldType = typename ToDataType::FieldType;
131
452
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
452
                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
452
                UInt32 to_max_digits = 0;
143
452
                UInt32 to_precision = 0;
144
452
                UInt32 to_scale = 0;
145
146
452
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
452
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
452
                    const auto* to_decimal_type =
150
452
                            check_and_get_data_type<ToDataType>(to_type.get());
151
452
                    to_precision = to_decimal_type->get_precision();
152
452
                    ToDataType::check_type_precision(to_precision);
153
154
452
                    to_scale = to_decimal_type->get_scale();
155
452
                    ToDataType::check_type_scale(to_scale);
156
452
                }
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
452
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
452
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
452
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
452
                if (to_scale > from_scale) {
167
396
                    multiply_may_overflow &=
168
396
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
396
                }
170
452
                return narrow_integral || multiply_may_overflow;
171
452
            }
172
0
            return false;
173
452
        });
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
2.77k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.77k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.77k
            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.77k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.77k
                using FromFieldType = typename FromDataType::FieldType;
130
2.77k
                using ToFieldType = typename ToDataType::FieldType;
131
2.77k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.77k
                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.77k
                UInt32 to_max_digits = 0;
143
2.77k
                UInt32 to_precision = 0;
144
2.77k
                UInt32 to_scale = 0;
145
146
2.77k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.77k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.77k
                    const auto* to_decimal_type =
150
2.77k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.77k
                    to_precision = to_decimal_type->get_precision();
152
2.77k
                    ToDataType::check_type_precision(to_precision);
153
154
2.77k
                    to_scale = to_decimal_type->get_scale();
155
2.77k
                    ToDataType::check_type_scale(to_scale);
156
2.77k
                }
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.77k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.77k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.77k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.77k
                if (to_scale > from_scale) {
167
516
                    multiply_may_overflow &=
168
516
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
516
                }
170
2.77k
                return narrow_integral || multiply_may_overflow;
171
2.77k
            }
172
0
            return false;
173
2.77k
        });
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
367
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
367
            using Types2 = std::decay_t<decltype(types2)>;
122
367
            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
367
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
367
                using FromFieldType = typename FromDataType::FieldType;
130
367
                using ToFieldType = typename ToDataType::FieldType;
131
367
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
367
                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
367
                UInt32 to_max_digits = 0;
143
367
                UInt32 to_precision = 0;
144
367
                UInt32 to_scale = 0;
145
146
367
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
367
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
367
                    const auto* to_decimal_type =
150
367
                            check_and_get_data_type<ToDataType>(to_type.get());
151
367
                    to_precision = to_decimal_type->get_precision();
152
367
                    ToDataType::check_type_precision(to_precision);
153
154
367
                    to_scale = to_decimal_type->get_scale();
155
367
                    ToDataType::check_type_scale(to_scale);
156
367
                }
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
367
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
367
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
367
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
367
                if (to_scale > from_scale) {
167
196
                    multiply_may_overflow &=
168
196
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
196
                }
170
367
                return narrow_integral || multiply_may_overflow;
171
367
            }
172
0
            return false;
173
367
        });
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
490
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
490
            using Types2 = std::decay_t<decltype(types2)>;
122
490
            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
490
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
490
                using FromFieldType = typename FromDataType::FieldType;
130
490
                using ToFieldType = typename ToDataType::FieldType;
131
490
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
490
                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
490
                UInt32 to_max_digits = 0;
143
490
                UInt32 to_precision = 0;
144
490
                UInt32 to_scale = 0;
145
146
490
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
490
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
490
                    const auto* to_decimal_type =
150
490
                            check_and_get_data_type<ToDataType>(to_type.get());
151
490
                    to_precision = to_decimal_type->get_precision();
152
490
                    ToDataType::check_type_precision(to_precision);
153
154
490
                    to_scale = to_decimal_type->get_scale();
155
490
                    ToDataType::check_type_scale(to_scale);
156
490
                }
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
490
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
490
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
490
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
490
                if (to_scale > from_scale) {
167
380
                    multiply_may_overflow &=
168
380
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
380
                }
170
490
                return narrow_integral || multiply_may_overflow;
171
490
            }
172
0
            return false;
173
490
        });
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
740
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
740
            using Types2 = std::decay_t<decltype(types2)>;
122
740
            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
740
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
740
                using FromFieldType = typename FromDataType::FieldType;
130
740
                using ToFieldType = typename ToDataType::FieldType;
131
740
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
740
                UInt32 from_scale = 0;
133
134
740
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
740
                    const auto* from_decimal_type =
136
740
                            check_and_get_data_type<FromDataType>(from_type.get());
137
740
                    from_precision =
138
740
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
740
                    from_scale = from_decimal_type->get_scale();
140
740
                }
141
142
740
                UInt32 to_max_digits = 0;
143
740
                UInt32 to_precision = 0;
144
740
                UInt32 to_scale = 0;
145
146
740
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
740
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
740
                    const auto* to_decimal_type =
150
740
                            check_and_get_data_type<ToDataType>(to_type.get());
151
740
                    to_precision = to_decimal_type->get_precision();
152
740
                    ToDataType::check_type_precision(to_precision);
153
154
740
                    to_scale = to_decimal_type->get_scale();
155
740
                    ToDataType::check_type_scale(to_scale);
156
740
                }
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
740
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
740
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
740
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
740
                if (to_scale > from_scale) {
167
602
                    multiply_may_overflow &=
168
602
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
602
                }
170
740
                return narrow_integral || multiply_may_overflow;
171
740
            }
172
0
            return false;
173
740
        });
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.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
1.04k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.04k
                using FromFieldType = typename FromDataType::FieldType;
130
1.04k
                using ToFieldType = typename ToDataType::FieldType;
131
1.04k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.04k
                UInt32 from_scale = 0;
133
134
1.04k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.04k
                    const auto* from_decimal_type =
136
1.04k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.04k
                    from_precision =
138
1.04k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.04k
                    from_scale = from_decimal_type->get_scale();
140
1.04k
                }
141
142
1.04k
                UInt32 to_max_digits = 0;
143
1.04k
                UInt32 to_precision = 0;
144
1.04k
                UInt32 to_scale = 0;
145
146
1.04k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.04k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.04k
                    const auto* to_decimal_type =
150
1.04k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.04k
                    to_precision = to_decimal_type->get_precision();
152
1.04k
                    ToDataType::check_type_precision(to_precision);
153
154
1.04k
                    to_scale = to_decimal_type->get_scale();
155
1.04k
                    ToDataType::check_type_scale(to_scale);
156
1.04k
                }
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.04k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.04k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.04k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.04k
                if (to_scale > from_scale) {
167
719
                    multiply_may_overflow &=
168
719
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
719
                }
170
1.04k
                return narrow_integral || multiply_may_overflow;
171
1.04k
            }
172
0
            return false;
173
1.04k
        });
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
367
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
367
            using Types2 = std::decay_t<decltype(types2)>;
122
367
            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
367
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
367
                using FromFieldType = typename FromDataType::FieldType;
130
367
                using ToFieldType = typename ToDataType::FieldType;
131
367
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
367
                UInt32 from_scale = 0;
133
134
367
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
367
                    const auto* from_decimal_type =
136
367
                            check_and_get_data_type<FromDataType>(from_type.get());
137
367
                    from_precision =
138
367
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
367
                    from_scale = from_decimal_type->get_scale();
140
367
                }
141
142
367
                UInt32 to_max_digits = 0;
143
367
                UInt32 to_precision = 0;
144
367
                UInt32 to_scale = 0;
145
146
367
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
367
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
367
                    const auto* to_decimal_type =
150
367
                            check_and_get_data_type<ToDataType>(to_type.get());
151
367
                    to_precision = to_decimal_type->get_precision();
152
367
                    ToDataType::check_type_precision(to_precision);
153
154
367
                    to_scale = to_decimal_type->get_scale();
155
367
                    ToDataType::check_type_scale(to_scale);
156
367
                }
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
367
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
367
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
367
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
367
                if (to_scale > from_scale) {
167
71
                    multiply_may_overflow &=
168
71
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
71
                }
170
367
                return narrow_integral || multiply_may_overflow;
171
367
            }
172
0
            return false;
173
367
        });
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
2.14k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.14k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.14k
            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.14k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.14k
                using FromFieldType = typename FromDataType::FieldType;
130
2.14k
                using ToFieldType = typename ToDataType::FieldType;
131
2.14k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.14k
                UInt32 from_scale = 0;
133
134
2.14k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2.14k
                    const auto* from_decimal_type =
136
2.14k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2.14k
                    from_precision =
138
2.14k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2.14k
                    from_scale = from_decimal_type->get_scale();
140
2.14k
                }
141
142
2.14k
                UInt32 to_max_digits = 0;
143
2.14k
                UInt32 to_precision = 0;
144
2.14k
                UInt32 to_scale = 0;
145
146
2.14k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.14k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.14k
                    const auto* to_decimal_type =
150
2.14k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.14k
                    to_precision = to_decimal_type->get_precision();
152
2.14k
                    ToDataType::check_type_precision(to_precision);
153
154
2.14k
                    to_scale = to_decimal_type->get_scale();
155
2.14k
                    ToDataType::check_type_scale(to_scale);
156
2.14k
                }
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.14k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.14k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.14k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.14k
                if (to_scale > from_scale) {
167
704
                    multiply_may_overflow &=
168
704
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
704
                }
170
2.14k
                return narrow_integral || multiply_may_overflow;
171
2.14k
            }
172
0
            return false;
173
2.14k
        });
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
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
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            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
                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
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
                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
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
0
                    multiply_may_overflow &=
168
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
0
                }
170
149k
                return narrow_integral || multiply_may_overflow;
171
149k
            }
172
0
            return false;
173
149k
        });
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
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
162
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
162
                using FromFieldType = typename FromDataType::FieldType;
130
162
                using ToFieldType = typename ToDataType::FieldType;
131
162
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
162
                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
162
                UInt32 to_max_digits = 0;
143
162
                UInt32 to_precision = 0;
144
162
                UInt32 to_scale = 0;
145
146
162
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
162
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
162
                    const auto* to_decimal_type =
150
162
                            check_and_get_data_type<ToDataType>(to_type.get());
151
162
                    to_precision = to_decimal_type->get_precision();
152
162
                    ToDataType::check_type_precision(to_precision);
153
154
162
                    to_scale = to_decimal_type->get_scale();
155
162
                    ToDataType::check_type_scale(to_scale);
156
162
                }
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
162
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
162
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
162
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
162
                if (to_scale > from_scale) {
167
111
                    multiply_may_overflow &=
168
111
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
111
                }
170
162
                return narrow_integral || multiply_may_overflow;
171
162
            }
172
0
            return false;
173
162
        });
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
921
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
921
            using Types2 = std::decay_t<decltype(types2)>;
122
921
            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
921
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
921
                using FromFieldType = typename FromDataType::FieldType;
130
921
                using ToFieldType = typename ToDataType::FieldType;
131
921
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
921
                UInt32 from_scale = 0;
133
134
921
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
921
                    const auto* from_decimal_type =
136
921
                            check_and_get_data_type<FromDataType>(from_type.get());
137
921
                    from_precision =
138
921
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
921
                    from_scale = from_decimal_type->get_scale();
140
921
                }
141
142
921
                UInt32 to_max_digits = 0;
143
921
                UInt32 to_precision = 0;
144
921
                UInt32 to_scale = 0;
145
146
921
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
921
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
921
                    const auto* to_decimal_type =
150
921
                            check_and_get_data_type<ToDataType>(to_type.get());
151
921
                    to_precision = to_decimal_type->get_precision();
152
921
                    ToDataType::check_type_precision(to_precision);
153
154
921
                    to_scale = to_decimal_type->get_scale();
155
921
                    ToDataType::check_type_scale(to_scale);
156
921
                }
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
921
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
921
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
921
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
921
                if (to_scale > from_scale) {
167
794
                    multiply_may_overflow &=
168
794
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
794
                }
170
921
                return narrow_integral || multiply_may_overflow;
171
921
            }
172
0
            return false;
173
921
        });
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.17k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
1.17k
            using Types2 = std::decay_t<decltype(types2)>;
122
1.17k
            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.17k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
1.17k
                using FromFieldType = typename FromDataType::FieldType;
130
1.17k
                using ToFieldType = typename ToDataType::FieldType;
131
1.17k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
1.17k
                UInt32 from_scale = 0;
133
134
1.17k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
1.17k
                    const auto* from_decimal_type =
136
1.17k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
1.17k
                    from_precision =
138
1.17k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
1.17k
                    from_scale = from_decimal_type->get_scale();
140
1.17k
                }
141
142
1.17k
                UInt32 to_max_digits = 0;
143
1.17k
                UInt32 to_precision = 0;
144
1.17k
                UInt32 to_scale = 0;
145
146
1.17k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
1.17k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
1.17k
                    const auto* to_decimal_type =
150
1.17k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
1.17k
                    to_precision = to_decimal_type->get_precision();
152
1.17k
                    ToDataType::check_type_precision(to_precision);
153
154
1.17k
                    to_scale = to_decimal_type->get_scale();
155
1.17k
                    ToDataType::check_type_scale(to_scale);
156
1.17k
                }
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.17k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
1.17k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
1.17k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
1.17k
                if (to_scale > from_scale) {
167
732
                    multiply_may_overflow &=
168
732
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
732
                }
170
1.17k
                return narrow_integral || multiply_may_overflow;
171
1.17k
            }
172
0
            return false;
173
1.17k
        });
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
917
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
917
            using Types2 = std::decay_t<decltype(types2)>;
122
917
            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
917
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
917
                using FromFieldType = typename FromDataType::FieldType;
130
917
                using ToFieldType = typename ToDataType::FieldType;
131
917
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
917
                UInt32 from_scale = 0;
133
134
917
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
917
                    const auto* from_decimal_type =
136
917
                            check_and_get_data_type<FromDataType>(from_type.get());
137
917
                    from_precision =
138
917
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
917
                    from_scale = from_decimal_type->get_scale();
140
917
                }
141
142
917
                UInt32 to_max_digits = 0;
143
917
                UInt32 to_precision = 0;
144
917
                UInt32 to_scale = 0;
145
146
917
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
917
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
917
                    const auto* to_decimal_type =
150
917
                            check_and_get_data_type<ToDataType>(to_type.get());
151
917
                    to_precision = to_decimal_type->get_precision();
152
917
                    ToDataType::check_type_precision(to_precision);
153
154
917
                    to_scale = to_decimal_type->get_scale();
155
917
                    ToDataType::check_type_scale(to_scale);
156
917
                }
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
917
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
917
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
917
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
917
                if (to_scale > from_scale) {
167
455
                    multiply_may_overflow &=
168
455
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
455
                }
170
917
                return narrow_integral || multiply_may_overflow;
171
917
            }
172
0
            return false;
173
917
        });
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
469
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
469
            using Types2 = std::decay_t<decltype(types2)>;
122
469
            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
469
            return false;
173
469
        });
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
201
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
201
            using Types2 = std::decay_t<decltype(types2)>;
122
201
            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
201
            return false;
173
201
        });
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
145k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
145k
            using Types2 = std::decay_t<decltype(types2)>;
122
145k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
145k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
145k
                return false;
127
145k
            }
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
145k
            return false;
173
145k
        });
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
377
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
377
            using Types2 = std::decay_t<decltype(types2)>;
122
377
            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
377
            return false;
173
377
        });
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
252
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
252
            using Types2 = std::decay_t<decltype(types2)>;
122
252
            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
252
            return false;
173
252
        });
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
430
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
430
            using Types2 = std::decay_t<decltype(types2)>;
122
430
            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
430
            return false;
173
430
        });
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
143k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
143k
            using Types2 = std::decay_t<decltype(types2)>;
122
143k
            using FromDataType = typename Types2::LeftType;
123
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
143k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
143k
                return false;
127
143k
            }
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
143k
            return false;
173
143k
        });
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
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_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.15M
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_
Line
Count
Source
110
2.50k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
2.50k
        using Types = std::decay_t<decltype(types)>;
112
2.50k
        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.50k
        return call_on_index_and_data_type<
120
2.50k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
2.50k
            using Types2 = std::decay_t<decltype(types2)>;
122
2.50k
            using FromDataType = typename Types2::LeftType;
123
2.50k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
2.50k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
2.50k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
2.50k
                return false;
127
2.50k
            }
128
2.50k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
2.50k
                using FromFieldType = typename FromDataType::FieldType;
130
2.50k
                using ToFieldType = typename ToDataType::FieldType;
131
2.50k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
2.50k
                UInt32 from_scale = 0;
133
134
2.50k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
2.50k
                    const auto* from_decimal_type =
136
2.50k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
2.50k
                    from_precision =
138
2.50k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
2.50k
                    from_scale = from_decimal_type->get_scale();
140
2.50k
                }
141
142
2.50k
                UInt32 to_max_digits = 0;
143
2.50k
                UInt32 to_precision = 0;
144
2.50k
                UInt32 to_scale = 0;
145
146
2.50k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
2.50k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
2.50k
                    const auto* to_decimal_type =
150
2.50k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
2.50k
                    to_precision = to_decimal_type->get_precision();
152
2.50k
                    ToDataType::check_type_precision(to_precision);
153
154
2.50k
                    to_scale = to_decimal_type->get_scale();
155
2.50k
                    ToDataType::check_type_scale(to_scale);
156
2.50k
                }
157
2.50k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
2.50k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
2.50k
                    to_precision = to_max_digits;
160
2.50k
                }
161
162
2.50k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
2.50k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
2.50k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
2.50k
                if (to_scale > from_scale) {
167
2.50k
                    multiply_may_overflow &=
168
2.50k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
2.50k
                }
170
2.50k
                return narrow_integral || multiply_may_overflow;
171
2.50k
            }
172
2.50k
            return false;
173
2.50k
        });
174
2.50k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_
Line
Count
Source
110
9.87k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
9.87k
        using Types = std::decay_t<decltype(types)>;
112
9.87k
        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
9.87k
        return call_on_index_and_data_type<
120
9.87k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
9.87k
            using Types2 = std::decay_t<decltype(types2)>;
122
9.87k
            using FromDataType = typename Types2::LeftType;
123
9.87k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
9.87k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
9.87k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
9.87k
                return false;
127
9.87k
            }
128
9.87k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
9.87k
                using FromFieldType = typename FromDataType::FieldType;
130
9.87k
                using ToFieldType = typename ToDataType::FieldType;
131
9.87k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
9.87k
                UInt32 from_scale = 0;
133
134
9.87k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
9.87k
                    const auto* from_decimal_type =
136
9.87k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
9.87k
                    from_precision =
138
9.87k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
9.87k
                    from_scale = from_decimal_type->get_scale();
140
9.87k
                }
141
142
9.87k
                UInt32 to_max_digits = 0;
143
9.87k
                UInt32 to_precision = 0;
144
9.87k
                UInt32 to_scale = 0;
145
146
9.87k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
9.87k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
9.87k
                    const auto* to_decimal_type =
150
9.87k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
9.87k
                    to_precision = to_decimal_type->get_precision();
152
9.87k
                    ToDataType::check_type_precision(to_precision);
153
154
9.87k
                    to_scale = to_decimal_type->get_scale();
155
9.87k
                    ToDataType::check_type_scale(to_scale);
156
9.87k
                }
157
9.87k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
9.87k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
9.87k
                    to_precision = to_max_digits;
160
9.87k
                }
161
162
9.87k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
9.87k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
9.87k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
9.87k
                if (to_scale > from_scale) {
167
9.87k
                    multiply_may_overflow &=
168
9.87k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
9.87k
                }
170
9.87k
                return narrow_integral || multiply_may_overflow;
171
9.87k
            }
172
9.87k
            return false;
173
9.87k
        });
174
9.87k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_
Line
Count
Source
110
5.69k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
5.69k
        using Types = std::decay_t<decltype(types)>;
112
5.69k
        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.69k
        return call_on_index_and_data_type<
120
5.69k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
5.69k
            using Types2 = std::decay_t<decltype(types2)>;
122
5.69k
            using FromDataType = typename Types2::LeftType;
123
5.69k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
5.69k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
5.69k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
5.69k
                return false;
127
5.69k
            }
128
5.69k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
5.69k
                using FromFieldType = typename FromDataType::FieldType;
130
5.69k
                using ToFieldType = typename ToDataType::FieldType;
131
5.69k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
5.69k
                UInt32 from_scale = 0;
133
134
5.69k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
5.69k
                    const auto* from_decimal_type =
136
5.69k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
5.69k
                    from_precision =
138
5.69k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
5.69k
                    from_scale = from_decimal_type->get_scale();
140
5.69k
                }
141
142
5.69k
                UInt32 to_max_digits = 0;
143
5.69k
                UInt32 to_precision = 0;
144
5.69k
                UInt32 to_scale = 0;
145
146
5.69k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
5.69k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
5.69k
                    const auto* to_decimal_type =
150
5.69k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
5.69k
                    to_precision = to_decimal_type->get_precision();
152
5.69k
                    ToDataType::check_type_precision(to_precision);
153
154
5.69k
                    to_scale = to_decimal_type->get_scale();
155
5.69k
                    ToDataType::check_type_scale(to_scale);
156
5.69k
                }
157
5.69k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
5.69k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
5.69k
                    to_precision = to_max_digits;
160
5.69k
                }
161
162
5.69k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
5.69k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
5.69k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
5.69k
                if (to_scale > from_scale) {
167
5.69k
                    multiply_may_overflow &=
168
5.69k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
5.69k
                }
170
5.69k
                return narrow_integral || multiply_may_overflow;
171
5.69k
            }
172
5.69k
            return false;
173
5.69k
        });
174
5.69k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_
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_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_
Line
Count
Source
110
46.3k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
46.3k
        using Types = std::decay_t<decltype(types)>;
112
46.3k
        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
46.3k
        return call_on_index_and_data_type<
120
46.3k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
46.3k
            using Types2 = std::decay_t<decltype(types2)>;
122
46.3k
            using FromDataType = typename Types2::LeftType;
123
46.3k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
46.3k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
46.3k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
46.3k
                return false;
127
46.3k
            }
128
46.3k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
46.3k
                using FromFieldType = typename FromDataType::FieldType;
130
46.3k
                using ToFieldType = typename ToDataType::FieldType;
131
46.3k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
46.3k
                UInt32 from_scale = 0;
133
134
46.3k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
46.3k
                    const auto* from_decimal_type =
136
46.3k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
46.3k
                    from_precision =
138
46.3k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
46.3k
                    from_scale = from_decimal_type->get_scale();
140
46.3k
                }
141
142
46.3k
                UInt32 to_max_digits = 0;
143
46.3k
                UInt32 to_precision = 0;
144
46.3k
                UInt32 to_scale = 0;
145
146
46.3k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
46.3k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
46.3k
                    const auto* to_decimal_type =
150
46.3k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
46.3k
                    to_precision = to_decimal_type->get_precision();
152
46.3k
                    ToDataType::check_type_precision(to_precision);
153
154
46.3k
                    to_scale = to_decimal_type->get_scale();
155
46.3k
                    ToDataType::check_type_scale(to_scale);
156
46.3k
                }
157
46.3k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
46.3k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
46.3k
                    to_precision = to_max_digits;
160
46.3k
                }
161
162
46.3k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
46.3k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
46.3k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
46.3k
                if (to_scale > from_scale) {
167
46.3k
                    multiply_may_overflow &=
168
46.3k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
46.3k
                }
170
46.3k
                return narrow_integral || multiply_may_overflow;
171
46.3k
            }
172
46.3k
            return false;
173
46.3k
        });
174
46.3k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_
Line
Count
Source
110
65.3k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
65.3k
        using Types = std::decay_t<decltype(types)>;
112
65.3k
        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
65.3k
        return call_on_index_and_data_type<
120
65.3k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
65.3k
            using Types2 = std::decay_t<decltype(types2)>;
122
65.3k
            using FromDataType = typename Types2::LeftType;
123
65.3k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
65.3k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
65.3k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
65.3k
                return false;
127
65.3k
            }
128
65.3k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
65.3k
                using FromFieldType = typename FromDataType::FieldType;
130
65.3k
                using ToFieldType = typename ToDataType::FieldType;
131
65.3k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
65.3k
                UInt32 from_scale = 0;
133
134
65.3k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
65.3k
                    const auto* from_decimal_type =
136
65.3k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
65.3k
                    from_precision =
138
65.3k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
65.3k
                    from_scale = from_decimal_type->get_scale();
140
65.3k
                }
141
142
65.3k
                UInt32 to_max_digits = 0;
143
65.3k
                UInt32 to_precision = 0;
144
65.3k
                UInt32 to_scale = 0;
145
146
65.3k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
65.3k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
65.3k
                    const auto* to_decimal_type =
150
65.3k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
65.3k
                    to_precision = to_decimal_type->get_precision();
152
65.3k
                    ToDataType::check_type_precision(to_precision);
153
154
65.3k
                    to_scale = to_decimal_type->get_scale();
155
65.3k
                    ToDataType::check_type_scale(to_scale);
156
65.3k
                }
157
65.3k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
65.3k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
65.3k
                    to_precision = to_max_digits;
160
65.3k
                }
161
162
65.3k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
65.3k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
65.3k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
65.3k
                if (to_scale > from_scale) {
167
65.3k
                    multiply_may_overflow &=
168
65.3k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
65.3k
                }
170
65.3k
                return narrow_integral || multiply_may_overflow;
171
65.3k
            }
172
65.3k
            return false;
173
65.3k
        });
174
65.3k
    };
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
26.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
26.9k
        using Types = std::decay_t<decltype(types)>;
112
26.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
26.9k
        return call_on_index_and_data_type<
120
26.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
26.9k
            using Types2 = std::decay_t<decltype(types2)>;
122
26.9k
            using FromDataType = typename Types2::LeftType;
123
26.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
26.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
26.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
26.9k
                return false;
127
26.9k
            }
128
26.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
26.9k
                using FromFieldType = typename FromDataType::FieldType;
130
26.9k
                using ToFieldType = typename ToDataType::FieldType;
131
26.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
26.9k
                UInt32 from_scale = 0;
133
134
26.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
26.9k
                    const auto* from_decimal_type =
136
26.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
26.9k
                    from_precision =
138
26.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
26.9k
                    from_scale = from_decimal_type->get_scale();
140
26.9k
                }
141
142
26.9k
                UInt32 to_max_digits = 0;
143
26.9k
                UInt32 to_precision = 0;
144
26.9k
                UInt32 to_scale = 0;
145
146
26.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
26.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
26.9k
                    const auto* to_decimal_type =
150
26.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
26.9k
                    to_precision = to_decimal_type->get_precision();
152
26.9k
                    ToDataType::check_type_precision(to_precision);
153
154
26.9k
                    to_scale = to_decimal_type->get_scale();
155
26.9k
                    ToDataType::check_type_scale(to_scale);
156
26.9k
                }
157
26.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
26.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
26.9k
                    to_precision = to_max_digits;
160
26.9k
                }
161
162
26.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
26.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
26.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
26.9k
                if (to_scale > from_scale) {
167
26.9k
                    multiply_may_overflow &=
168
26.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
26.9k
                }
170
26.9k
                return narrow_integral || multiply_may_overflow;
171
26.9k
            }
172
26.9k
            return false;
173
26.9k
        });
174
26.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_
Line
Count
Source
110
8.06k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
8.06k
        using Types = std::decay_t<decltype(types)>;
112
8.06k
        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
8.06k
        return call_on_index_and_data_type<
120
8.06k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
8.06k
            using Types2 = std::decay_t<decltype(types2)>;
122
8.06k
            using FromDataType = typename Types2::LeftType;
123
8.06k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
8.06k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
8.06k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
8.06k
                return false;
127
8.06k
            }
128
8.06k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
8.06k
                using FromFieldType = typename FromDataType::FieldType;
130
8.06k
                using ToFieldType = typename ToDataType::FieldType;
131
8.06k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
8.06k
                UInt32 from_scale = 0;
133
134
8.06k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
8.06k
                    const auto* from_decimal_type =
136
8.06k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
8.06k
                    from_precision =
138
8.06k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
8.06k
                    from_scale = from_decimal_type->get_scale();
140
8.06k
                }
141
142
8.06k
                UInt32 to_max_digits = 0;
143
8.06k
                UInt32 to_precision = 0;
144
8.06k
                UInt32 to_scale = 0;
145
146
8.06k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
8.06k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
8.06k
                    const auto* to_decimal_type =
150
8.06k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
8.06k
                    to_precision = to_decimal_type->get_precision();
152
8.06k
                    ToDataType::check_type_precision(to_precision);
153
154
8.06k
                    to_scale = to_decimal_type->get_scale();
155
8.06k
                    ToDataType::check_type_scale(to_scale);
156
8.06k
                }
157
8.06k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
8.06k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
8.06k
                    to_precision = to_max_digits;
160
8.06k
                }
161
162
8.06k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
8.06k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
8.06k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
8.06k
                if (to_scale > from_scale) {
167
8.06k
                    multiply_may_overflow &=
168
8.06k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
8.06k
                }
170
8.06k
                return narrow_integral || multiply_may_overflow;
171
8.06k
            }
172
8.06k
            return false;
173
8.06k
        });
174
8.06k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_
Line
Count
Source
110
21.2k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
21.2k
        using Types = std::decay_t<decltype(types)>;
112
21.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
21.2k
        return call_on_index_and_data_type<
120
21.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
21.2k
            using Types2 = std::decay_t<decltype(types2)>;
122
21.2k
            using FromDataType = typename Types2::LeftType;
123
21.2k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
21.2k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
21.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
21.2k
                return false;
127
21.2k
            }
128
21.2k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
21.2k
                using FromFieldType = typename FromDataType::FieldType;
130
21.2k
                using ToFieldType = typename ToDataType::FieldType;
131
21.2k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
21.2k
                UInt32 from_scale = 0;
133
134
21.2k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
21.2k
                    const auto* from_decimal_type =
136
21.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
21.2k
                    from_precision =
138
21.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
21.2k
                    from_scale = from_decimal_type->get_scale();
140
21.2k
                }
141
142
21.2k
                UInt32 to_max_digits = 0;
143
21.2k
                UInt32 to_precision = 0;
144
21.2k
                UInt32 to_scale = 0;
145
146
21.2k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
21.2k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
21.2k
                    const auto* to_decimal_type =
150
21.2k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
21.2k
                    to_precision = to_decimal_type->get_precision();
152
21.2k
                    ToDataType::check_type_precision(to_precision);
153
154
21.2k
                    to_scale = to_decimal_type->get_scale();
155
21.2k
                    ToDataType::check_type_scale(to_scale);
156
21.2k
                }
157
21.2k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
21.2k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
21.2k
                    to_precision = to_max_digits;
160
21.2k
                }
161
162
21.2k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
21.2k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
21.2k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
21.2k
                if (to_scale > from_scale) {
167
21.2k
                    multiply_may_overflow &=
168
21.2k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
21.2k
                }
170
21.2k
                return narrow_integral || multiply_may_overflow;
171
21.2k
            }
172
21.2k
            return false;
173
21.2k
        });
174
21.2k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_
Line
Count
Source
110
225
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
225
        using Types = std::decay_t<decltype(types)>;
112
225
        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
225
        return call_on_index_and_data_type<
120
225
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
225
            using Types2 = std::decay_t<decltype(types2)>;
122
225
            using FromDataType = typename Types2::LeftType;
123
225
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
225
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
225
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
225
                return false;
127
225
            }
128
225
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
225
                using FromFieldType = typename FromDataType::FieldType;
130
225
                using ToFieldType = typename ToDataType::FieldType;
131
225
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
225
                UInt32 from_scale = 0;
133
134
225
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
225
                    const auto* from_decimal_type =
136
225
                            check_and_get_data_type<FromDataType>(from_type.get());
137
225
                    from_precision =
138
225
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
225
                    from_scale = from_decimal_type->get_scale();
140
225
                }
141
142
225
                UInt32 to_max_digits = 0;
143
225
                UInt32 to_precision = 0;
144
225
                UInt32 to_scale = 0;
145
146
225
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
225
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
225
                    const auto* to_decimal_type =
150
225
                            check_and_get_data_type<ToDataType>(to_type.get());
151
225
                    to_precision = to_decimal_type->get_precision();
152
225
                    ToDataType::check_type_precision(to_precision);
153
154
225
                    to_scale = to_decimal_type->get_scale();
155
225
                    ToDataType::check_type_scale(to_scale);
156
225
                }
157
225
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
225
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
225
                    to_precision = to_max_digits;
160
225
                }
161
162
225
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
225
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
225
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
225
                if (to_scale > from_scale) {
167
225
                    multiply_may_overflow &=
168
225
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
225
                }
170
225
                return narrow_integral || multiply_may_overflow;
171
225
            }
172
225
            return false;
173
225
        });
174
225
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_
Line
Count
Source
110
160k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
160k
        using Types = std::decay_t<decltype(types)>;
112
160k
        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
160k
        return call_on_index_and_data_type<
120
160k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
160k
            using Types2 = std::decay_t<decltype(types2)>;
122
160k
            using FromDataType = typename Types2::LeftType;
123
160k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
160k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
160k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
160k
                return false;
127
160k
            }
128
160k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
160k
                using FromFieldType = typename FromDataType::FieldType;
130
160k
                using ToFieldType = typename ToDataType::FieldType;
131
160k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
160k
                UInt32 from_scale = 0;
133
134
160k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
160k
                    const auto* from_decimal_type =
136
160k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
160k
                    from_precision =
138
160k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
160k
                    from_scale = from_decimal_type->get_scale();
140
160k
                }
141
142
160k
                UInt32 to_max_digits = 0;
143
160k
                UInt32 to_precision = 0;
144
160k
                UInt32 to_scale = 0;
145
146
160k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
160k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
160k
                    const auto* to_decimal_type =
150
160k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
160k
                    to_precision = to_decimal_type->get_precision();
152
160k
                    ToDataType::check_type_precision(to_precision);
153
154
160k
                    to_scale = to_decimal_type->get_scale();
155
160k
                    ToDataType::check_type_scale(to_scale);
156
160k
                }
157
160k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
160k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
160k
                    to_precision = to_max_digits;
160
160k
                }
161
162
160k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
160k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
160k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
160k
                if (to_scale > from_scale) {
167
160k
                    multiply_may_overflow &=
168
160k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
160k
                }
170
160k
                return narrow_integral || multiply_may_overflow;
171
160k
            }
172
160k
            return false;
173
160k
        });
174
160k
    };
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
147k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
147k
        using Types = std::decay_t<decltype(types)>;
112
147k
        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
147k
        return call_on_index_and_data_type<
120
147k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
147k
            using Types2 = std::decay_t<decltype(types2)>;
122
147k
            using FromDataType = typename Types2::LeftType;
123
147k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
147k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
147k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
147k
                return false;
127
147k
            }
128
147k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
147k
                using FromFieldType = typename FromDataType::FieldType;
130
147k
                using ToFieldType = typename ToDataType::FieldType;
131
147k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
147k
                UInt32 from_scale = 0;
133
134
147k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
147k
                    const auto* from_decimal_type =
136
147k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
147k
                    from_precision =
138
147k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
147k
                    from_scale = from_decimal_type->get_scale();
140
147k
                }
141
142
147k
                UInt32 to_max_digits = 0;
143
147k
                UInt32 to_precision = 0;
144
147k
                UInt32 to_scale = 0;
145
146
147k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
147k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
147k
                    const auto* to_decimal_type =
150
147k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
147k
                    to_precision = to_decimal_type->get_precision();
152
147k
                    ToDataType::check_type_precision(to_precision);
153
154
147k
                    to_scale = to_decimal_type->get_scale();
155
147k
                    ToDataType::check_type_scale(to_scale);
156
147k
                }
157
147k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
147k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
147k
                    to_precision = to_max_digits;
160
147k
                }
161
162
147k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
147k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
147k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
147k
                if (to_scale > from_scale) {
167
147k
                    multiply_may_overflow &=
168
147k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
147k
                }
170
147k
                return narrow_integral || multiply_may_overflow;
171
147k
            }
172
147k
            return false;
173
147k
        });
174
147k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_
Line
Count
Source
110
145k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
145k
        using Types = std::decay_t<decltype(types)>;
112
145k
        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
145k
        return call_on_index_and_data_type<
120
145k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
145k
            using Types2 = std::decay_t<decltype(types2)>;
122
145k
            using FromDataType = typename Types2::LeftType;
123
145k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
145k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
145k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
145k
                return false;
127
145k
            }
128
145k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
145k
                using FromFieldType = typename FromDataType::FieldType;
130
145k
                using ToFieldType = typename ToDataType::FieldType;
131
145k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
145k
                UInt32 from_scale = 0;
133
134
145k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
145k
                    const auto* from_decimal_type =
136
145k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
145k
                    from_precision =
138
145k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
145k
                    from_scale = from_decimal_type->get_scale();
140
145k
                }
141
142
145k
                UInt32 to_max_digits = 0;
143
145k
                UInt32 to_precision = 0;
144
145k
                UInt32 to_scale = 0;
145
146
145k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
145k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
145k
                    const auto* to_decimal_type =
150
145k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
145k
                    to_precision = to_decimal_type->get_precision();
152
145k
                    ToDataType::check_type_precision(to_precision);
153
154
145k
                    to_scale = to_decimal_type->get_scale();
155
145k
                    ToDataType::check_type_scale(to_scale);
156
145k
                }
157
145k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
145k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
145k
                    to_precision = to_max_digits;
160
145k
                }
161
162
145k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
145k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
145k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
145k
                if (to_scale > from_scale) {
167
145k
                    multiply_may_overflow &=
168
145k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
145k
                }
170
145k
                return narrow_integral || multiply_may_overflow;
171
145k
            }
172
145k
            return false;
173
145k
        });
174
145k
    };
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
75.4k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
75.4k
        using Types = std::decay_t<decltype(types)>;
112
75.4k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
75.4k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
75.4k
            return false;
118
75.4k
        }
119
0
        return call_on_index_and_data_type<
120
75.4k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
75.4k
            using Types2 = std::decay_t<decltype(types2)>;
122
75.4k
            using FromDataType = typename Types2::LeftType;
123
75.4k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
75.4k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
75.4k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
75.4k
                return false;
127
75.4k
            }
128
75.4k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
75.4k
                using FromFieldType = typename FromDataType::FieldType;
130
75.4k
                using ToFieldType = typename ToDataType::FieldType;
131
75.4k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
75.4k
                UInt32 from_scale = 0;
133
134
75.4k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
75.4k
                    const auto* from_decimal_type =
136
75.4k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
75.4k
                    from_precision =
138
75.4k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
75.4k
                    from_scale = from_decimal_type->get_scale();
140
75.4k
                }
141
142
75.4k
                UInt32 to_max_digits = 0;
143
75.4k
                UInt32 to_precision = 0;
144
75.4k
                UInt32 to_scale = 0;
145
146
75.4k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
75.4k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
75.4k
                    const auto* to_decimal_type =
150
75.4k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
75.4k
                    to_precision = to_decimal_type->get_precision();
152
75.4k
                    ToDataType::check_type_precision(to_precision);
153
154
75.4k
                    to_scale = to_decimal_type->get_scale();
155
75.4k
                    ToDataType::check_type_scale(to_scale);
156
75.4k
                }
157
75.4k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
75.4k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
75.4k
                    to_precision = to_max_digits;
160
75.4k
                }
161
162
75.4k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
75.4k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
75.4k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
75.4k
                if (to_scale > from_scale) {
167
75.4k
                    multiply_may_overflow &=
168
75.4k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
75.4k
                }
170
75.4k
                return narrow_integral || multiply_may_overflow;
171
75.4k
            }
172
75.4k
            return false;
173
75.4k
        });
174
75.4k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_
Line
Count
Source
110
144k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
144k
        using Types = std::decay_t<decltype(types)>;
112
144k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
144k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
144k
            return false;
118
144k
        }
119
0
        return call_on_index_and_data_type<
120
144k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
144k
            using Types2 = std::decay_t<decltype(types2)>;
122
144k
            using FromDataType = typename Types2::LeftType;
123
144k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
144k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
144k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
144k
                return false;
127
144k
            }
128
144k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
144k
                using FromFieldType = typename FromDataType::FieldType;
130
144k
                using ToFieldType = typename ToDataType::FieldType;
131
144k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
144k
                UInt32 from_scale = 0;
133
134
144k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
144k
                    const auto* from_decimal_type =
136
144k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
144k
                    from_precision =
138
144k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
144k
                    from_scale = from_decimal_type->get_scale();
140
144k
                }
141
142
144k
                UInt32 to_max_digits = 0;
143
144k
                UInt32 to_precision = 0;
144
144k
                UInt32 to_scale = 0;
145
146
144k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
144k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
144k
                    const auto* to_decimal_type =
150
144k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
144k
                    to_precision = to_decimal_type->get_precision();
152
144k
                    ToDataType::check_type_precision(to_precision);
153
154
144k
                    to_scale = to_decimal_type->get_scale();
155
144k
                    ToDataType::check_type_scale(to_scale);
156
144k
                }
157
144k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
144k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
144k
                    to_precision = to_max_digits;
160
144k
                }
161
162
144k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
144k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
144k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
144k
                if (to_scale > from_scale) {
167
144k
                    multiply_may_overflow &=
168
144k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
144k
                }
170
144k
                return narrow_integral || multiply_may_overflow;
171
144k
            }
172
144k
            return false;
173
144k
        });
174
144k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_
Line
Count
Source
110
109k
    auto make_default_wrapper = [&](const auto& types) -> bool {
111
109k
        using Types = std::decay_t<decltype(types)>;
112
109k
        using ToDataType = typename Types::LeftType;
113
114
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
115
                        IsDatelikeV2Types<ToDataType> ||
116
109k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
117
109k
            return false;
118
109k
        }
119
0
        return call_on_index_and_data_type<
120
109k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
121
109k
            using Types2 = std::decay_t<decltype(types2)>;
122
109k
            using FromDataType = typename Types2::LeftType;
123
109k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
124
109k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
125
109k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
126
109k
                return false;
127
109k
            }
128
109k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
129
109k
                using FromFieldType = typename FromDataType::FieldType;
130
109k
                using ToFieldType = typename ToDataType::FieldType;
131
109k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
132
109k
                UInt32 from_scale = 0;
133
134
109k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
135
109k
                    const auto* from_decimal_type =
136
109k
                            check_and_get_data_type<FromDataType>(from_type.get());
137
109k
                    from_precision =
138
109k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
139
109k
                    from_scale = from_decimal_type->get_scale();
140
109k
                }
141
142
109k
                UInt32 to_max_digits = 0;
143
109k
                UInt32 to_precision = 0;
144
109k
                UInt32 to_scale = 0;
145
146
109k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
147
109k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
148
149
109k
                    const auto* to_decimal_type =
150
109k
                            check_and_get_data_type<ToDataType>(to_type.get());
151
109k
                    to_precision = to_decimal_type->get_precision();
152
109k
                    ToDataType::check_type_precision(to_precision);
153
154
109k
                    to_scale = to_decimal_type->get_scale();
155
109k
                    ToDataType::check_type_scale(to_scale);
156
109k
                }
157
109k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
158
109k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
159
109k
                    to_precision = to_max_digits;
160
109k
                }
161
162
109k
                bool narrow_integral = context->check_overflow_for_decimal() &&
163
109k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
164
165
109k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
166
109k
                if (to_scale > from_scale) {
167
109k
                    multiply_may_overflow &=
168
109k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
169
109k
                }
170
109k
                return narrow_integral || multiply_may_overflow;
171
109k
            }
172
109k
            return false;
173
109k
        });
174
109k
    };
175
176
1.38M
    return call_on_index_and_data_type<void>(to_type->get_primitive_type(), make_default_wrapper);
177
1.46M
}
178
179
WrapperType prepare_remove_nullable(FunctionContext* context, const DataTypePtr& from_type,
180
1.50M
                                    const DataTypePtr& to_type) {
181
    /// Determine whether pre-processing and/or post-processing must take place during conversion.
182
1.50M
    bool result_is_nullable = to_type->is_nullable();
183
184
1.50M
    if (result_is_nullable) {
185
1.46M
        return [from_type, to_type](FunctionContext* context, Block& block,
186
1.46M
                                    const ColumnNumbers& arguments, uint32_t result,
187
1.46M
                                    size_t input_rows_count,
188
1.46M
                                    const NullMap::value_type* null_map = nullptr) {
189
1.46M
            auto from_type_not_nullable = remove_nullable(from_type);
190
1.46M
            auto to_type_not_nullable = remove_nullable(to_type);
191
192
1.46M
            bool replace_null_data_to_default = need_replace_null_data_to_default(
193
1.46M
                    context, from_type_not_nullable, to_type_not_nullable);
194
195
1.46M
            auto nested_result_index = block.columns();
196
1.46M
            block.insert(block.get_by_position(result).unnest_nullable());
197
1.46M
            auto nested_source_index = block.columns();
198
1.46M
            block.insert(block.get_by_position(arguments[0])
199
1.46M
                                 .unnest_nullable(replace_null_data_to_default));
200
201
1.46M
            const auto& arg_col = block.get_by_position(arguments[0]);
202
1.46M
            const NullMap::value_type* arg_null_map = nullptr;
203
1.46M
            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.46M
            RETURN_IF_ERROR(prepare_impl(context, from_type_not_nullable, to_type_not_nullable)(
207
1.46M
                    context, block, {nested_source_index}, nested_result_index, input_rows_count,
208
1.46M
                    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.46M
        };
218
1.46M
    } else {
219
32.9k
        return prepare_impl(context, from_type, to_type);
220
32.9k
    }
221
1.50M
}
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
96.1k
        return create_identity_wrapper(from_type);
231
96.1k
    }
232
233
    // variant needs to be judged first
234
1.42M
    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.41M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
239
18.6k
        return create_cast_from_variant_wrapper(static_cast<const DataTypeVariant&>(*from_type),
240
18.6k
                                                to_type);
241
18.6k
    }
242
243
1.39M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_JSONB) {
244
9.29k
        return create_cast_from_jsonb_wrapper(static_cast<const DataTypeJsonb&>(*from_type),
245
9.29k
                                              to_type,
246
9.29k
                                              context ? context->jsonb_string_as_string() : false);
247
9.29k
    }
248
249
1.38M
    switch (to_type->get_primitive_type()) {
250
1.12k
    case PrimitiveType::TYPE_BOOLEAN:
251
1.12k
        return create_boolean_wrapper(context, from_type);
252
9.98k
    case PrimitiveType::TYPE_TINYINT:
253
15.6k
    case PrimitiveType::TYPE_SMALLINT:
254
176k
    case PrimitiveType::TYPE_INT:
255
228k
    case PrimitiveType::TYPE_BIGINT:
256
293k
    case PrimitiveType::TYPE_LARGEINT:
257
293k
        return create_int_wrapper(context, from_type, to_type->get_primitive_type());
258
11.1k
    case PrimitiveType::TYPE_FLOAT:
259
41.1k
    case PrimitiveType::TYPE_DOUBLE:
260
41.1k
        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
147k
    case PrimitiveType::TYPE_DATEV2:
264
293k
    case PrimitiveType::TYPE_DATETIMEV2:
265
293k
    case PrimitiveType::TYPE_TIMEV2:
266
293k
        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
75.3k
    case PrimitiveType::TYPE_IPV4:
270
220k
    case PrimitiveType::TYPE_IPV6:
271
220k
        return create_ip_wrapper(context, from_type, to_type->get_primitive_type());
272
291
    case PrimitiveType::TYPE_DECIMALV2:
273
8.45k
    case PrimitiveType::TYPE_DECIMAL32:
274
33.0k
    case PrimitiveType::TYPE_DECIMAL64:
275
196k
    case PrimitiveType::TYPE_DECIMAL128I:
276
207k
    case PrimitiveType::TYPE_DECIMAL256:
277
207k
        return create_decimal_wrapper(context, from_type, to_type->get_primitive_type());
278
20
    case PrimitiveType::TYPE_CHAR:
279
11.1k
    case PrimitiveType::TYPE_VARCHAR:
280
108k
    case PrimitiveType::TYPE_STRING:
281
108k
        return create_string_wrapper(from_type);
282
152k
    case PrimitiveType::TYPE_ARRAY:
283
152k
        return create_array_wrapper(context, from_type,
284
152k
                                    static_cast<const DataTypeArray&>(*to_type));
285
3.21k
    case PrimitiveType::TYPE_STRUCT:
286
3.21k
        return create_struct_wrapper(context, from_type,
287
3.21k
                                     static_cast<const DataTypeStruct&>(*to_type));
288
3.13k
    case PrimitiveType::TYPE_MAP:
289
3.13k
        return create_map_wrapper(context, from_type, static_cast<const DataTypeMap&>(*to_type));
290
6
    case PrimitiveType::TYPE_HLL:
291
6
        return create_hll_wrapper(context, from_type, static_cast<const DataTypeHLL&>(*to_type));
292
5
    case PrimitiveType::TYPE_BITMAP:
293
5
        return create_bitmap_wrapper(context, from_type,
294
5
                                     static_cast<const DataTypeBitMap&>(*to_type));
295
2
    case PrimitiveType::TYPE_QUANTILE_STATE:
296
2
        return create_quantile_state_wrapper(context, from_type,
297
2
                                             static_cast<const DataTypeQuantileState&>(*to_type));
298
59.6k
    case PrimitiveType::TYPE_JSONB:
299
59.6k
        return create_cast_to_jsonb_wrapper(from_type, static_cast<const DataTypeJsonb&>(*to_type),
300
59.6k
                                            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.38M
    }
306
307
0
    return create_unsupport_wrapper(from_type->get_name(), to_type->get_name());
308
1.38M
}
309
310
} // namespace CastWrapper
311
312
class PreparedFunctionCast : public PreparedFunctionImpl {
313
public:
314
    explicit PreparedFunctionCast(CastWrapper::WrapperType&& wrapper_function_, const char* name_)
315
1.34M
            : 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.34M
                        uint32_t result, size_t input_rows_count) const override {
322
1.34M
        return wrapper_function(context, block, arguments, result, input_rows_count, nullptr);
323
1.34M
    }
324
325
1.34M
    bool use_default_implementation_for_nulls() const override { return false; }
326
1.34M
    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.22M
            : name(name_),
337
1.22M
              argument_types(std::move(argument_types_)),
338
1.22M
              return_type(std::move(return_type_)) {}
339
340
1.34M
    const DataTypes& get_argument_types() const override { return argument_types; }
341
1.34M
    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.34M
                                uint32_t /*result*/) const override {
346
1.34M
        return std::make_shared<PreparedFunctionCast>(
347
1.34M
                CastWrapper::prepare_unpack_dictionaries(context, get_argument_types()[0],
348
1.34M
                                                         get_return_type()),
349
1.34M
                name);
350
1.34M
    }
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.22M
    static FunctionBuilderPtr create() { return std::make_shared<FunctionBuilderCast>(); }
367
368
1.22M
    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.22M
                               const DataTypePtr& return_type) const override {
379
1.22M
        DataTypes data_types(arguments.size());
380
381
3.68M
        for (size_t i = 0; i < arguments.size(); ++i) {
382
2.45M
            data_types[i] = arguments[i].type;
383
2.45M
        }
384
385
1.22M
        return std::make_shared<FunctionCast>(name, data_types, return_type);
386
1.22M
    }
387
388
1.22M
    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
8
void register_function_cast(SimpleFunctionFactory& factory) {
397
8
    factory.register_function<FunctionBuilderCast>();
398
8
}
399
} // namespace doris