Coverage Report

Created: 2026-08-06 12:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/cast/function_cast.cpp
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#include <utility>
19
20
#include "core/data_type/data_type_agg_state.h"
21
#include "core/data_type/data_type_decimal.h"
22
#include "core/data_type/data_type_number.h" // IWYU pragma: keep
23
#include "core/data_type/data_type_quantilestate.h"
24
#include "core/data_type/data_type_variant.h"
25
#include "core/data_type/data_type_variant_v2.h"
26
#include "core/data_type/primitive_type.h"
27
#include "exprs/function/cast/cast_to_array.h"
28
#include "exprs/function/cast/cast_to_jsonb.h"
29
#include "exprs/function/cast/cast_to_map.h"
30
#include "exprs/function/cast/cast_to_struct.h"
31
#include "exprs/function/cast/cast_to_variant.h"
32
#include "exprs/function/cast/cast_wrapper_decls.h"
33
#include "exprs/function/cast/variant_v2/cast_variant_v2.h"
34
#include "exprs/function/simple_function_factory.h"
35
36
namespace doris {
37
38
namespace CastWrapper {
39
40
WrapperType create_hll_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
41
3
                               const DataTypeHLL& to_type) {
42
    /// Conversion from String through parsing.
43
3
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
44
3
        return cast_from_string_to_generic;
45
3
    }
46
47
0
    return CastWrapper::create_unsupport_wrapper("Cast to HLL only support from String type");
48
3
}
49
50
WrapperType create_bitmap_wrapper(FunctionContext* context, const DataTypePtr& from_type_untyped,
51
3
                                  const DataTypeBitMap& to_type) {
52
    /// Conversion from String through parsing.
53
3
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
54
3
        return cast_from_string_to_generic;
55
3
    }
56
57
0
    return CastWrapper::create_unsupport_wrapper("Cast to BitMap only support from String type");
58
3
}
59
60
WrapperType create_quantile_state_wrapper(FunctionContext* context,
61
                                          const DataTypePtr& from_type_untyped,
62
1
                                          const DataTypeQuantileState& to_type) {
63
    /// Conversion from String through parsing.
64
1
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
65
1
        return cast_from_string_to_generic;
66
1
    }
67
68
0
    return CastWrapper::create_unsupport_wrapper(
69
0
            "Cast to QuantileState only support from String type");
70
1
}
71
72
239
WrapperType create_varbinary_wrapper(const DataTypePtr& from_type_untyped) {
73
    /// Conversion from String through parsing.
74
239
    if (check_and_get_data_type<DataTypeString>(from_type_untyped.get())) {
75
239
        return cast_from_string_to_generic;
76
239
    }
77
78
0
    return CastWrapper::create_unsupport_wrapper("Cast to Varbinary only support from String type");
79
239
}
80
81
WrapperType prepare_unpack_dictionaries(FunctionContext* context, const DataTypePtr& from_type,
82
1.58M
                                        const DataTypePtr& to_type) {
83
1.58M
    const auto& from_nested = from_type;
84
1.58M
    const auto& to_nested = to_type;
85
86
1.58M
    if (from_type->is_null_literal()) {
87
1.72k
        if (!to_nested->is_nullable()) {
88
0
            return CastWrapper::create_unsupport_wrapper(
89
0
                    "Cannot convert NULL to a non-nullable type");
90
0
        }
91
92
1.72k
        return [](FunctionContext* context, Block& block, const ColumnNumbers&, uint32_t result,
93
1.72k
                  size_t input_rows_count, const NullMap::value_type* null_map = nullptr) {
94
            /// TODO: remove this in the future.
95
1.72k
            auto& res = block.get_by_position(result);
96
1.72k
            res.column = res.type->create_column_const_with_default_value(input_rows_count)
97
1.72k
                                 ->convert_to_full_column_if_const();
98
1.72k
            return Status::OK();
99
1.72k
        };
100
1.72k
    }
101
102
1.58M
    auto wrapper = prepare_remove_nullable(context, from_nested, to_nested);
103
104
1.58M
    return wrapper;
105
1.58M
}
106
107
bool need_replace_null_data_to_default(FunctionContext* context, const DataTypePtr& from_type,
108
1.55M
                                       const DataTypePtr& to_type) {
109
1.55M
    if (from_type->equals(*to_type)) {
110
82.8k
        return false;
111
82.8k
    }
112
113
1.46M
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
1.22M
        using Types = std::decay_t<decltype(types)>;
115
1.22M
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
356k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
356k
            return false;
121
356k
        }
122
0
        return call_on_index_and_data_type<
123
1.22M
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
849k
            using Types2 = std::decay_t<decltype(types2)>;
125
849k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
622k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
622k
                return false;
130
622k
            }
131
223k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
223k
                using FromFieldType = typename FromDataType::FieldType;
133
223k
                using ToFieldType = typename ToDataType::FieldType;
134
223k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
223k
                UInt32 from_scale = 0;
136
137
223k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
32.2k
                    const auto* from_decimal_type =
139
32.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
32.2k
                    from_precision =
141
32.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
32.2k
                    from_scale = from_decimal_type->get_scale();
143
32.2k
                }
144
145
223k
                UInt32 to_max_digits = 0;
146
223k
                UInt32 to_precision = 0;
147
223k
                UInt32 to_scale = 0;
148
149
223k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
217k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
217k
                    const auto* to_decimal_type =
153
217k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
217k
                    to_precision = to_decimal_type->get_precision();
155
217k
                    ToDataType::check_type_precision(to_precision);
156
157
217k
                    to_scale = to_decimal_type->get_scale();
158
217k
                    ToDataType::check_type_scale(to_scale);
159
217k
                }
160
223k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
6.14k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
6.14k
                    to_precision = to_max_digits;
163
6.14k
                }
164
165
223k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
223k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
223k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
223k
                if (to_scale > from_scale) {
170
12.1k
                    multiply_may_overflow &=
171
12.1k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
12.1k
                }
173
223k
                return narrow_integral || multiply_may_overflow;
174
223k
            }
175
0
            return false;
176
849k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
22
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
22
            using Types2 = std::decay_t<decltype(types2)>;
125
22
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
22
            return false;
176
22
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
17
            using Types2 = std::decay_t<decltype(types2)>;
125
17
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
17
            return false;
176
17
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
36
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
36
            using Types2 = std::decay_t<decltype(types2)>;
125
36
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
36
            return false;
176
36
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
97
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
97
            using Types2 = std::decay_t<decltype(types2)>;
125
97
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
97
            return false;
176
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
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9
            using Types2 = std::decay_t<decltype(types2)>;
125
9
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
9
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
9
                using FromFieldType = typename FromDataType::FieldType;
133
9
                using ToFieldType = typename ToDataType::FieldType;
134
9
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
9
                UInt32 from_scale = 0;
136
137
9
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
9
                    const auto* from_decimal_type =
139
9
                            check_and_get_data_type<FromDataType>(from_type.get());
140
9
                    from_precision =
141
9
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
9
                    from_scale = from_decimal_type->get_scale();
143
9
                }
144
145
9
                UInt32 to_max_digits = 0;
146
9
                UInt32 to_precision = 0;
147
9
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
9
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
9
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
9
                    to_precision = to_max_digits;
163
9
                }
164
165
9
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
9
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
9
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
9
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
9
                return narrow_integral || multiply_may_overflow;
174
9
            }
175
0
            return false;
176
9
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
4
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
4
                using FromFieldType = typename FromDataType::FieldType;
133
4
                using ToFieldType = typename ToDataType::FieldType;
134
4
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
4
                UInt32 from_scale = 0;
136
137
4
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
4
                    const auto* from_decimal_type =
139
4
                            check_and_get_data_type<FromDataType>(from_type.get());
140
4
                    from_precision =
141
4
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
4
                    from_scale = from_decimal_type->get_scale();
143
4
                }
144
145
4
                UInt32 to_max_digits = 0;
146
4
                UInt32 to_precision = 0;
147
4
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
4
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
4
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
4
                    to_precision = to_max_digits;
163
4
                }
164
165
4
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
4
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
4
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
4
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
4
                return narrow_integral || multiply_may_overflow;
174
4
            }
175
0
            return false;
176
4
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5
            using Types2 = std::decay_t<decltype(types2)>;
125
5
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5
                using FromFieldType = typename FromDataType::FieldType;
133
5
                using ToFieldType = typename ToDataType::FieldType;
134
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5
                UInt32 from_scale = 0;
136
137
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5
                    const auto* from_decimal_type =
139
5
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5
                    from_precision =
141
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5
                    from_scale = from_decimal_type->get_scale();
143
5
                }
144
145
5
                UInt32 to_max_digits = 0;
146
5
                UInt32 to_precision = 0;
147
5
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
5
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
5
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
5
                    to_precision = to_max_digits;
163
5
                }
164
165
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5
                return narrow_integral || multiply_may_overflow;
174
5
            }
175
0
            return false;
176
5
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
806
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
806
            using Types2 = std::decay_t<decltype(types2)>;
125
806
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
806
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
806
                return false;
130
806
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
806
            return false;
176
806
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
615
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
615
            using Types2 = std::decay_t<decltype(types2)>;
125
615
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
615
            return false;
176
615
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
10
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
136
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
136
            using Types2 = std::decay_t<decltype(types2)>;
125
136
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
136
            return false;
176
136
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
263
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
263
            using Types2 = std::decay_t<decltype(types2)>;
125
263
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
263
            return false;
176
263
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
23
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
23
            using Types2 = std::decay_t<decltype(types2)>;
125
23
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
23
            return false;
176
23
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
30
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
30
            using Types2 = std::decay_t<decltype(types2)>;
125
30
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
30
            return false;
176
30
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
19
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
19
            using Types2 = std::decay_t<decltype(types2)>;
125
19
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
19
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
19
                using FromFieldType = typename FromDataType::FieldType;
133
19
                using ToFieldType = typename ToDataType::FieldType;
134
19
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
19
                UInt32 from_scale = 0;
136
137
19
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
19
                    const auto* from_decimal_type =
139
19
                            check_and_get_data_type<FromDataType>(from_type.get());
140
19
                    from_precision =
141
19
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
19
                    from_scale = from_decimal_type->get_scale();
143
19
                }
144
145
19
                UInt32 to_max_digits = 0;
146
19
                UInt32 to_precision = 0;
147
19
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
19
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
19
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
19
                    to_precision = to_max_digits;
163
19
                }
164
165
19
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
19
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
19
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
19
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
19
                return narrow_integral || multiply_may_overflow;
174
19
            }
175
0
            return false;
176
19
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
72
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
320
            using Types2 = std::decay_t<decltype(types2)>;
125
320
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
320
            return false;
176
320
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
4.99k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4.99k
            using Types2 = std::decay_t<decltype(types2)>;
125
4.99k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
4.99k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
4.99k
                return false;
130
4.99k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
4.99k
            return false;
176
4.99k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
98
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
98
            using Types2 = std::decay_t<decltype(types2)>;
125
98
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
98
            return false;
176
98
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
1.53k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.53k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.53k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.53k
            return false;
176
1.53k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
129
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
129
            using Types2 = std::decay_t<decltype(types2)>;
125
129
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
129
            return false;
176
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
123
102
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
102
            using Types2 = std::decay_t<decltype(types2)>;
125
102
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
102
            return false;
176
102
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
25
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
24
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
24
                using FromFieldType = typename FromDataType::FieldType;
133
24
                using ToFieldType = typename ToDataType::FieldType;
134
24
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
24
                UInt32 from_scale = 0;
136
137
24
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
24
                    const auto* from_decimal_type =
139
24
                            check_and_get_data_type<FromDataType>(from_type.get());
140
24
                    from_precision =
141
24
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
24
                    from_scale = from_decimal_type->get_scale();
143
24
                }
144
145
24
                UInt32 to_max_digits = 0;
146
24
                UInt32 to_precision = 0;
147
24
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
24
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
24
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
24
                    to_precision = to_max_digits;
163
24
                }
164
165
24
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
24
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
24
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
24
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
24
                return narrow_integral || multiply_may_overflow;
174
24
            }
175
0
            return false;
176
24
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
25
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
25
            using Types2 = std::decay_t<decltype(types2)>;
125
25
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
25
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
25
                using FromFieldType = typename FromDataType::FieldType;
133
25
                using ToFieldType = typename ToDataType::FieldType;
134
25
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
25
                UInt32 from_scale = 0;
136
137
25
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
25
                    const auto* from_decimal_type =
139
25
                            check_and_get_data_type<FromDataType>(from_type.get());
140
25
                    from_precision =
141
25
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
25
                    from_scale = from_decimal_type->get_scale();
143
25
                }
144
145
25
                UInt32 to_max_digits = 0;
146
25
                UInt32 to_precision = 0;
147
25
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
25
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
25
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
25
                    to_precision = to_max_digits;
163
25
                }
164
165
25
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
25
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
25
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
25
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
25
                return narrow_integral || multiply_may_overflow;
174
25
            }
175
0
            return false;
176
25
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
26
            using Types2 = std::decay_t<decltype(types2)>;
125
26
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
26
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
26
                using FromFieldType = typename FromDataType::FieldType;
133
26
                using ToFieldType = typename ToDataType::FieldType;
134
26
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
26
                UInt32 from_scale = 0;
136
137
26
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
26
                    const auto* from_decimal_type =
139
26
                            check_and_get_data_type<FromDataType>(from_type.get());
140
26
                    from_precision =
141
26
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
26
                    from_scale = from_decimal_type->get_scale();
143
26
                }
144
145
26
                UInt32 to_max_digits = 0;
146
26
                UInt32 to_precision = 0;
147
26
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
26
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
26
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
26
                    to_precision = to_max_digits;
163
26
                }
164
165
26
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
26
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
26
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
26
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
26
                return narrow_integral || multiply_may_overflow;
174
26
            }
175
0
            return false;
176
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
123
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
26
            using Types2 = std::decay_t<decltype(types2)>;
125
26
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
26
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
26
                using FromFieldType = typename FromDataType::FieldType;
133
26
                using ToFieldType = typename ToDataType::FieldType;
134
26
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
26
                UInt32 from_scale = 0;
136
137
26
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
26
                    const auto* from_decimal_type =
139
26
                            check_and_get_data_type<FromDataType>(from_type.get());
140
26
                    from_precision =
141
26
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
26
                    from_scale = from_decimal_type->get_scale();
143
26
                }
144
145
26
                UInt32 to_max_digits = 0;
146
26
                UInt32 to_precision = 0;
147
26
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
26
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
26
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
26
                    to_precision = to_max_digits;
163
26
                }
164
165
26
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
26
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
26
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
26
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
26
                return narrow_integral || multiply_may_overflow;
174
26
            }
175
0
            return false;
176
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
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
72
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
320
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
320
            using Types2 = std::decay_t<decltype(types2)>;
125
320
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
320
            return false;
176
320
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
2.89k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.89k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.89k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2.89k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2.89k
                return false;
130
2.89k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.89k
            return false;
176
2.89k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
43
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
43
            using Types2 = std::decay_t<decltype(types2)>;
125
43
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
43
            return false;
176
43
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
2.60k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.60k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.60k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.60k
            return false;
176
2.60k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
434
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
434
            using Types2 = std::decay_t<decltype(types2)>;
125
434
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
434
            return false;
176
434
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
131k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
131k
            using Types2 = std::decay_t<decltype(types2)>;
125
131k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
131k
            return false;
176
131k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
115
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
115
            using Types2 = std::decay_t<decltype(types2)>;
125
115
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
115
            return false;
176
115
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
38
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
38
            using Types2 = std::decay_t<decltype(types2)>;
125
38
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
38
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
38
                using FromFieldType = typename FromDataType::FieldType;
133
38
                using ToFieldType = typename ToDataType::FieldType;
134
38
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
38
                UInt32 from_scale = 0;
136
137
38
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
38
                    const auto* from_decimal_type =
139
38
                            check_and_get_data_type<FromDataType>(from_type.get());
140
38
                    from_precision =
141
38
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
38
                    from_scale = from_decimal_type->get_scale();
143
38
                }
144
145
38
                UInt32 to_max_digits = 0;
146
38
                UInt32 to_precision = 0;
147
38
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
38
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
38
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
38
                    to_precision = to_max_digits;
163
38
                }
164
165
38
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
38
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
38
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
38
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
38
                return narrow_integral || multiply_may_overflow;
174
38
            }
175
0
            return false;
176
38
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
250
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
250
            using Types2 = std::decay_t<decltype(types2)>;
125
250
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
250
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
250
                using FromFieldType = typename FromDataType::FieldType;
133
250
                using ToFieldType = typename ToDataType::FieldType;
134
250
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
250
                UInt32 from_scale = 0;
136
137
250
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
250
                    const auto* from_decimal_type =
139
250
                            check_and_get_data_type<FromDataType>(from_type.get());
140
250
                    from_precision =
141
250
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
250
                    from_scale = from_decimal_type->get_scale();
143
250
                }
144
145
250
                UInt32 to_max_digits = 0;
146
250
                UInt32 to_precision = 0;
147
250
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
250
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
250
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
250
                    to_precision = to_max_digits;
163
250
                }
164
165
250
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
250
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
250
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
250
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
250
                return narrow_integral || multiply_may_overflow;
174
250
            }
175
0
            return false;
176
250
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
22
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
22
            using Types2 = std::decay_t<decltype(types2)>;
125
22
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
22
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
22
                using FromFieldType = typename FromDataType::FieldType;
133
22
                using ToFieldType = typename ToDataType::FieldType;
134
22
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
22
                UInt32 from_scale = 0;
136
137
22
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
22
                    const auto* from_decimal_type =
139
22
                            check_and_get_data_type<FromDataType>(from_type.get());
140
22
                    from_precision =
141
22
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
22
                    from_scale = from_decimal_type->get_scale();
143
22
                }
144
145
22
                UInt32 to_max_digits = 0;
146
22
                UInt32 to_precision = 0;
147
22
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
22
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
22
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
22
                    to_precision = to_max_digits;
163
22
                }
164
165
22
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
22
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
22
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
22
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
22
                return narrow_integral || multiply_may_overflow;
174
22
            }
175
0
            return false;
176
22
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
12
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
24
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
24
            using Types2 = std::decay_t<decltype(types2)>;
125
24
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
24
            return false;
176
24
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
276
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
276
            using Types2 = std::decay_t<decltype(types2)>;
125
276
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
276
            return false;
176
276
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
21.1k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21.1k
            using Types2 = std::decay_t<decltype(types2)>;
125
21.1k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
21.1k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
21.1k
                return false;
130
21.1k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21.1k
            return false;
176
21.1k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
454
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
454
            using Types2 = std::decay_t<decltype(types2)>;
125
454
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
454
            return false;
176
454
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
1.23k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.23k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.23k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.23k
            return false;
176
1.23k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
665
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
665
            using Types2 = std::decay_t<decltype(types2)>;
125
665
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
665
            return false;
176
665
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
11.8k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
11.8k
            using Types2 = std::decay_t<decltype(types2)>;
125
11.8k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
11.8k
            return false;
176
11.8k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
312
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
312
            using Types2 = std::decay_t<decltype(types2)>;
125
312
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
312
            return false;
176
312
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
642
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
642
            using Types2 = std::decay_t<decltype(types2)>;
125
642
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
642
            return false;
176
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
123
2.33k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.33k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.33k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2.33k
            return false;
176
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
123
311
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
311
            using Types2 = std::decay_t<decltype(types2)>;
125
311
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
311
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
311
                using FromFieldType = typename FromDataType::FieldType;
133
311
                using ToFieldType = typename ToDataType::FieldType;
134
311
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
311
                UInt32 from_scale = 0;
136
137
311
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
311
                    const auto* from_decimal_type =
139
311
                            check_and_get_data_type<FromDataType>(from_type.get());
140
311
                    from_precision =
141
311
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
311
                    from_scale = from_decimal_type->get_scale();
143
311
                }
144
145
311
                UInt32 to_max_digits = 0;
146
311
                UInt32 to_precision = 0;
147
311
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
311
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
311
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
311
                    to_precision = to_max_digits;
163
311
                }
164
165
311
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
311
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
311
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
311
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
313
                return narrow_integral || multiply_may_overflow;
174
311
            }
175
0
            return false;
176
311
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
318
            using Types2 = std::decay_t<decltype(types2)>;
125
318
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
318
                using FromFieldType = typename FromDataType::FieldType;
133
318
                using ToFieldType = typename ToDataType::FieldType;
134
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
318
                UInt32 from_scale = 0;
136
137
318
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
318
                    const auto* from_decimal_type =
139
318
                            check_and_get_data_type<FromDataType>(from_type.get());
140
318
                    from_precision =
141
318
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
318
                    from_scale = from_decimal_type->get_scale();
143
318
                }
144
145
318
                UInt32 to_max_digits = 0;
146
318
                UInt32 to_precision = 0;
147
318
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
318
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
318
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
318
                    to_precision = to_max_digits;
163
318
                }
164
165
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
318
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
318
                return narrow_integral || multiply_may_overflow;
174
318
            }
175
0
            return false;
176
318
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
303
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
303
            using Types2 = std::decay_t<decltype(types2)>;
125
303
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
303
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
303
                using FromFieldType = typename FromDataType::FieldType;
133
303
                using ToFieldType = typename ToDataType::FieldType;
134
303
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
303
                UInt32 from_scale = 0;
136
137
303
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
303
                    const auto* from_decimal_type =
139
303
                            check_and_get_data_type<FromDataType>(from_type.get());
140
303
                    from_precision =
141
303
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
303
                    from_scale = from_decimal_type->get_scale();
143
303
                }
144
145
303
                UInt32 to_max_digits = 0;
146
303
                UInt32 to_precision = 0;
147
303
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
303
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
303
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
303
                    to_precision = to_max_digits;
163
303
                }
164
165
303
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
303
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
303
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
303
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
303
                return narrow_integral || multiply_may_overflow;
174
303
            }
175
0
            return false;
176
303
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
747
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
747
            using Types2 = std::decay_t<decltype(types2)>;
125
747
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
747
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
747
                using FromFieldType = typename FromDataType::FieldType;
133
747
                using ToFieldType = typename ToDataType::FieldType;
134
747
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
747
                UInt32 from_scale = 0;
136
137
747
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
747
                    const auto* from_decimal_type =
139
747
                            check_and_get_data_type<FromDataType>(from_type.get());
140
747
                    from_precision =
141
747
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
747
                    from_scale = from_decimal_type->get_scale();
143
747
                }
144
145
747
                UInt32 to_max_digits = 0;
146
747
                UInt32 to_precision = 0;
147
747
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
747
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
747
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
747
                    to_precision = to_max_digits;
163
747
                }
164
165
747
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
747
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
747
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
747
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
747
                return narrow_integral || multiply_may_overflow;
174
747
            }
175
0
            return false;
176
747
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
22
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
22
            using Types2 = std::decay_t<decltype(types2)>;
125
22
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
22
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
22
                using FromFieldType = typename FromDataType::FieldType;
133
22
                using ToFieldType = typename ToDataType::FieldType;
134
22
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
22
                UInt32 from_scale = 0;
136
137
22
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
22
                    const auto* from_decimal_type =
139
22
                            check_and_get_data_type<FromDataType>(from_type.get());
140
22
                    from_precision =
141
22
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
22
                    from_scale = from_decimal_type->get_scale();
143
22
                }
144
145
22
                UInt32 to_max_digits = 0;
146
22
                UInt32 to_precision = 0;
147
22
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
22
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
22
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
22
                    to_precision = to_max_digits;
163
22
                }
164
165
22
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
22
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
22
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
22
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
22
                return narrow_integral || multiply_may_overflow;
174
22
            }
175
0
            return false;
176
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
123
1.24k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.24k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.24k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.24k
            return false;
176
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
123
1.24k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.24k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.24k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.24k
            return false;
176
1.24k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
4
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
21.6k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21.6k
            using Types2 = std::decay_t<decltype(types2)>;
125
21.6k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
21.6k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
21.6k
                return false;
130
21.6k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21.6k
            return false;
176
21.6k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
119
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
119
            using Types2 = std::decay_t<decltype(types2)>;
125
119
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
119
            return false;
176
119
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
107
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
107
            using Types2 = std::decay_t<decltype(types2)>;
125
107
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
107
            return false;
176
107
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
79
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
79
            using Types2 = std::decay_t<decltype(types2)>;
125
79
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
79
            return false;
176
79
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
133
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
133
            using Types2 = std::decay_t<decltype(types2)>;
125
133
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
133
            return false;
176
133
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
605
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
605
            using Types2 = std::decay_t<decltype(types2)>;
125
605
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
605
            return false;
176
605
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9
            using Types2 = std::decay_t<decltype(types2)>;
125
9
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
9
            return false;
176
9
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
18
            using Types2 = std::decay_t<decltype(types2)>;
125
18
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
18
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
18
                using FromFieldType = typename FromDataType::FieldType;
133
18
                using ToFieldType = typename ToDataType::FieldType;
134
18
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
18
                UInt32 from_scale = 0;
136
137
18
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
18
                    const auto* from_decimal_type =
139
18
                            check_and_get_data_type<FromDataType>(from_type.get());
140
18
                    from_precision =
141
18
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
18
                    from_scale = from_decimal_type->get_scale();
143
18
                }
144
145
18
                UInt32 to_max_digits = 0;
146
18
                UInt32 to_precision = 0;
147
18
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
18
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
18
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
18
                    to_precision = to_max_digits;
163
18
                }
164
165
18
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
18
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
18
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
18
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
18
                return narrow_integral || multiply_may_overflow;
174
18
            }
175
0
            return false;
176
18
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
8
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
8
                using FromFieldType = typename FromDataType::FieldType;
133
8
                using ToFieldType = typename ToDataType::FieldType;
134
8
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
8
                UInt32 from_scale = 0;
136
137
8
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
8
                    const auto* from_decimal_type =
139
8
                            check_and_get_data_type<FromDataType>(from_type.get());
140
8
                    from_precision =
141
8
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
8
                    from_scale = from_decimal_type->get_scale();
143
8
                }
144
145
8
                UInt32 to_max_digits = 0;
146
8
                UInt32 to_precision = 0;
147
8
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
8
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
8
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
8
                    to_precision = to_max_digits;
163
8
                }
164
165
8
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
8
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
8
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
8
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
8
                return narrow_integral || multiply_may_overflow;
174
8
            }
175
0
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
21
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21
                using FromFieldType = typename FromDataType::FieldType;
133
21
                using ToFieldType = typename ToDataType::FieldType;
134
21
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21
                UInt32 from_scale = 0;
136
137
21
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21
                    const auto* from_decimal_type =
139
21
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21
                    from_precision =
141
21
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21
                    from_scale = from_decimal_type->get_scale();
143
21
                }
144
145
21
                UInt32 to_max_digits = 0;
146
21
                UInt32 to_precision = 0;
147
21
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
21
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21
                    to_precision = to_max_digits;
163
21
                }
164
165
21
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
21
                return narrow_integral || multiply_may_overflow;
174
21
            }
175
0
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
782
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
782
            using Types2 = std::decay_t<decltype(types2)>;
125
782
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
782
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
782
                using FromFieldType = typename FromDataType::FieldType;
133
782
                using ToFieldType = typename ToDataType::FieldType;
134
782
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
782
                UInt32 from_scale = 0;
136
137
782
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
782
                    const auto* from_decimal_type =
139
782
                            check_and_get_data_type<FromDataType>(from_type.get());
140
782
                    from_precision =
141
782
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
782
                    from_scale = from_decimal_type->get_scale();
143
782
                }
144
145
782
                UInt32 to_max_digits = 0;
146
782
                UInt32 to_precision = 0;
147
782
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
782
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
782
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
782
                    to_precision = to_max_digits;
163
782
                }
164
165
782
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
782
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
782
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
782
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
782
                return narrow_integral || multiply_may_overflow;
174
782
            }
175
0
            return false;
176
782
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
16
            return false;
176
16
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
4
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
67.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
67.2k
            using Types2 = std::decay_t<decltype(types2)>;
125
67.2k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
67.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
67.2k
                return false;
130
67.2k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
67.2k
            return false;
176
67.2k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
31
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
31
            using Types2 = std::decay_t<decltype(types2)>;
125
31
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
31
            return false;
176
31
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
124
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
124
            using Types2 = std::decay_t<decltype(types2)>;
125
124
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
124
            return false;
176
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
123
89
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
89
            using Types2 = std::decay_t<decltype(types2)>;
125
89
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
89
            return false;
176
89
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
108
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
108
            using Types2 = std::decay_t<decltype(types2)>;
125
108
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
108
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
108
                using FromFieldType = typename FromDataType::FieldType;
133
108
                using ToFieldType = typename ToDataType::FieldType;
134
108
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
108
                UInt32 from_scale = 0;
136
137
108
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
108
                    const auto* from_decimal_type =
139
108
                            check_and_get_data_type<FromDataType>(from_type.get());
140
108
                    from_precision =
141
108
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
108
                    from_scale = from_decimal_type->get_scale();
143
108
                }
144
145
108
                UInt32 to_max_digits = 0;
146
108
                UInt32 to_precision = 0;
147
108
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
108
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
108
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
108
                    to_precision = to_max_digits;
163
108
                }
164
165
108
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
108
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
108
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
108
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
108
                return narrow_integral || multiply_may_overflow;
174
108
            }
175
0
            return false;
176
108
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
112
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
112
            using Types2 = std::decay_t<decltype(types2)>;
125
112
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
112
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
112
                using FromFieldType = typename FromDataType::FieldType;
133
112
                using ToFieldType = typename ToDataType::FieldType;
134
112
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
112
                UInt32 from_scale = 0;
136
137
112
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
112
                    const auto* from_decimal_type =
139
112
                            check_and_get_data_type<FromDataType>(from_type.get());
140
112
                    from_precision =
141
112
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
112
                    from_scale = from_decimal_type->get_scale();
143
112
                }
144
145
112
                UInt32 to_max_digits = 0;
146
112
                UInt32 to_precision = 0;
147
112
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
112
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
112
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
112
                    to_precision = to_max_digits;
163
112
                }
164
165
112
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
112
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
112
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
112
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
112
                return narrow_integral || multiply_may_overflow;
174
112
            }
175
0
            return false;
176
112
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
16
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
16
                    const auto* from_decimal_type =
139
16
                            check_and_get_data_type<FromDataType>(from_type.get());
140
16
                    from_precision =
141
16
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
16
                    from_scale = from_decimal_type->get_scale();
143
16
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
16
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
16
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
16
                    to_precision = to_max_digits;
163
16
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
97
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
97
            using Types2 = std::decay_t<decltype(types2)>;
125
97
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
97
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
97
                using FromFieldType = typename FromDataType::FieldType;
133
97
                using ToFieldType = typename ToDataType::FieldType;
134
97
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
97
                UInt32 from_scale = 0;
136
137
97
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
97
                    const auto* from_decimal_type =
139
97
                            check_and_get_data_type<FromDataType>(from_type.get());
140
97
                    from_precision =
141
97
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
97
                    from_scale = from_decimal_type->get_scale();
143
97
                }
144
145
97
                UInt32 to_max_digits = 0;
146
97
                UInt32 to_precision = 0;
147
97
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
97
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
97
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
97
                    to_precision = to_max_digits;
163
97
                }
164
165
97
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
97
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
97
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
97
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
97
                return narrow_integral || multiply_may_overflow;
174
97
            }
175
0
            return false;
176
97
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
554
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
554
            using Types2 = std::decay_t<decltype(types2)>;
125
554
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
554
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
554
                using FromFieldType = typename FromDataType::FieldType;
133
554
                using ToFieldType = typename ToDataType::FieldType;
134
554
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
554
                UInt32 from_scale = 0;
136
137
554
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
554
                    const auto* from_decimal_type =
139
554
                            check_and_get_data_type<FromDataType>(from_type.get());
140
554
                    from_precision =
141
554
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
554
                    from_scale = from_decimal_type->get_scale();
143
554
                }
144
145
554
                UInt32 to_max_digits = 0;
146
554
                UInt32 to_precision = 0;
147
554
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
554
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
554
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
554
                    to_precision = to_max_digits;
163
554
                }
164
165
554
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
554
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
554
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
554
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
554
                return narrow_integral || multiply_may_overflow;
174
554
            }
175
0
            return false;
176
554
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
39
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
39
            using Types2 = std::decay_t<decltype(types2)>;
125
39
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
39
            return false;
176
39
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
7.78k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.78k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.78k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7.78k
            return false;
176
7.78k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
162
            using Types2 = std::decay_t<decltype(types2)>;
125
162
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
162
            return false;
176
162
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
1.68k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.68k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.68k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
1.68k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
1.68k
                return false;
130
1.68k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.68k
            return false;
176
1.68k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
292
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
292
            using Types2 = std::decay_t<decltype(types2)>;
125
292
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
292
            return false;
176
292
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
451
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
451
            using Types2 = std::decay_t<decltype(types2)>;
125
451
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
451
            return false;
176
451
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
887
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
887
            using Types2 = std::decay_t<decltype(types2)>;
125
887
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
887
            return false;
176
887
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
1.20k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.20k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.20k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.20k
            return false;
176
1.20k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
1.38k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.38k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.38k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.38k
            return false;
176
1.38k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
195
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
195
            using Types2 = std::decay_t<decltype(types2)>;
125
195
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
195
            return false;
176
195
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
1.92k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.92k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.92k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1.92k
            return false;
176
1.92k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
400
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
400
            using Types2 = std::decay_t<decltype(types2)>;
125
400
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
400
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
400
                using FromFieldType = typename FromDataType::FieldType;
133
400
                using ToFieldType = typename ToDataType::FieldType;
134
400
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
400
                UInt32 from_scale = 0;
136
137
400
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
400
                    const auto* from_decimal_type =
139
400
                            check_and_get_data_type<FromDataType>(from_type.get());
140
400
                    from_precision =
141
400
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
400
                    from_scale = from_decimal_type->get_scale();
143
400
                }
144
145
400
                UInt32 to_max_digits = 0;
146
400
                UInt32 to_precision = 0;
147
400
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
400
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
400
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
400
                    to_precision = to_max_digits;
163
400
                }
164
165
400
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
400
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
400
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
400
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
402
                return narrow_integral || multiply_may_overflow;
174
400
            }
175
0
            return false;
176
400
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
334
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
334
            using Types2 = std::decay_t<decltype(types2)>;
125
334
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
334
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
334
                using FromFieldType = typename FromDataType::FieldType;
133
334
                using ToFieldType = typename ToDataType::FieldType;
134
334
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
334
                UInt32 from_scale = 0;
136
137
334
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
334
                    const auto* from_decimal_type =
139
334
                            check_and_get_data_type<FromDataType>(from_type.get());
140
334
                    from_precision =
141
334
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
334
                    from_scale = from_decimal_type->get_scale();
143
334
                }
144
145
334
                UInt32 to_max_digits = 0;
146
334
                UInt32 to_precision = 0;
147
334
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
334
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
334
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
334
                    to_precision = to_max_digits;
163
334
                }
164
165
334
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
334
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
334
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
334
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
335
                return narrow_integral || multiply_may_overflow;
174
334
            }
175
0
            return false;
176
334
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
55
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
55
            using Types2 = std::decay_t<decltype(types2)>;
125
55
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
55
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
55
                using FromFieldType = typename FromDataType::FieldType;
133
55
                using ToFieldType = typename ToDataType::FieldType;
134
55
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
55
                UInt32 from_scale = 0;
136
137
55
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
55
                    const auto* from_decimal_type =
139
55
                            check_and_get_data_type<FromDataType>(from_type.get());
140
55
                    from_precision =
141
55
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
55
                    from_scale = from_decimal_type->get_scale();
143
55
                }
144
145
55
                UInt32 to_max_digits = 0;
146
55
                UInt32 to_precision = 0;
147
55
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
55
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
55
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
55
                    to_precision = to_max_digits;
163
55
                }
164
165
55
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
55
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
55
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
55
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
55
                return narrow_integral || multiply_may_overflow;
174
55
            }
175
0
            return false;
176
55
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
784
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
784
            using Types2 = std::decay_t<decltype(types2)>;
125
784
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
784
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
784
                using FromFieldType = typename FromDataType::FieldType;
133
784
                using ToFieldType = typename ToDataType::FieldType;
134
784
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
784
                UInt32 from_scale = 0;
136
137
784
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
784
                    const auto* from_decimal_type =
139
784
                            check_and_get_data_type<FromDataType>(from_type.get());
140
784
                    from_precision =
141
784
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
784
                    from_scale = from_decimal_type->get_scale();
143
784
                }
144
145
784
                UInt32 to_max_digits = 0;
146
784
                UInt32 to_precision = 0;
147
784
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
784
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
784
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
784
                    to_precision = to_max_digits;
163
784
                }
164
165
784
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
784
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
784
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
784
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
784
                return narrow_integral || multiply_may_overflow;
174
784
            }
175
0
            return false;
176
784
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_15DataTypeDecimalILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
544
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
544
            using Types2 = std::decay_t<decltype(types2)>;
125
544
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
544
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
544
                using FromFieldType = typename FromDataType::FieldType;
133
544
                using ToFieldType = typename ToDataType::FieldType;
134
544
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
544
                UInt32 from_scale = 0;
136
137
544
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
544
                    const auto* from_decimal_type =
139
544
                            check_and_get_data_type<FromDataType>(from_type.get());
140
544
                    from_precision =
141
544
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
544
                    from_scale = from_decimal_type->get_scale();
143
544
                }
144
145
544
                UInt32 to_max_digits = 0;
146
544
                UInt32 to_precision = 0;
147
544
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
544
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
544
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
544
                    to_precision = to_max_digits;
163
544
                }
164
165
544
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
544
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
544
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
544
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
544
                return narrow_integral || multiply_may_overflow;
174
544
            }
175
0
            return false;
176
544
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Line
Count
Source
123
73
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
73
            using Types2 = std::decay_t<decltype(types2)>;
125
73
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
73
            return false;
176
73
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Line
Count
Source
123
7.82k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.82k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.82k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7.82k
            return false;
176
7.82k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Line
Count
Source
123
162
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
162
            using Types2 = std::decay_t<decltype(types2)>;
125
162
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
162
            return false;
176
162
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
6.27k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
6.27k
            using Types2 = std::decay_t<decltype(types2)>;
125
6.27k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
6.27k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
6.27k
                return false;
130
6.27k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
6.27k
            return false;
176
6.27k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
19
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
19
            using Types2 = std::decay_t<decltype(types2)>;
125
19
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
19
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
19
                using FromFieldType = typename FromDataType::FieldType;
133
19
                using ToFieldType = typename ToDataType::FieldType;
134
19
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
19
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
19
                UInt32 to_max_digits = 0;
146
19
                UInt32 to_precision = 0;
147
19
                UInt32 to_scale = 0;
148
149
19
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
19
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
19
                    const auto* to_decimal_type =
153
19
                            check_and_get_data_type<ToDataType>(to_type.get());
154
19
                    to_precision = to_decimal_type->get_precision();
155
19
                    ToDataType::check_type_precision(to_precision);
156
157
19
                    to_scale = to_decimal_type->get_scale();
158
19
                    ToDataType::check_type_scale(to_scale);
159
19
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
19
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
19
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
19
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
19
                if (to_scale > from_scale) {
170
18
                    multiply_may_overflow &=
171
18
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
18
                }
173
19
                return narrow_integral || multiply_may_overflow;
174
19
            }
175
0
            return false;
176
19
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
469
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
469
            using Types2 = std::decay_t<decltype(types2)>;
125
469
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
469
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
469
                using FromFieldType = typename FromDataType::FieldType;
133
469
                using ToFieldType = typename ToDataType::FieldType;
134
469
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
469
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
469
                UInt32 to_max_digits = 0;
146
469
                UInt32 to_precision = 0;
147
469
                UInt32 to_scale = 0;
148
149
469
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
469
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
469
                    const auto* to_decimal_type =
153
469
                            check_and_get_data_type<ToDataType>(to_type.get());
154
469
                    to_precision = to_decimal_type->get_precision();
155
469
                    ToDataType::check_type_precision(to_precision);
156
157
469
                    to_scale = to_decimal_type->get_scale();
158
469
                    ToDataType::check_type_scale(to_scale);
159
469
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
469
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
469
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
469
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
469
                if (to_scale > from_scale) {
170
266
                    multiply_may_overflow &=
171
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
266
                }
173
469
                return narrow_integral || multiply_may_overflow;
174
469
            }
175
0
            return false;
176
469
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
500
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
500
            using Types2 = std::decay_t<decltype(types2)>;
125
500
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
500
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
500
                using FromFieldType = typename FromDataType::FieldType;
133
500
                using ToFieldType = typename ToDataType::FieldType;
134
500
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
500
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
500
                UInt32 to_max_digits = 0;
146
500
                UInt32 to_precision = 0;
147
500
                UInt32 to_scale = 0;
148
149
500
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
500
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
500
                    const auto* to_decimal_type =
153
500
                            check_and_get_data_type<ToDataType>(to_type.get());
154
500
                    to_precision = to_decimal_type->get_precision();
155
500
                    ToDataType::check_type_precision(to_precision);
156
157
500
                    to_scale = to_decimal_type->get_scale();
158
500
                    ToDataType::check_type_scale(to_scale);
159
500
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
500
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
500
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
500
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
500
                if (to_scale > from_scale) {
170
251
                    multiply_may_overflow &=
171
251
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
251
                }
173
500
                return narrow_integral || multiply_may_overflow;
174
500
            }
175
0
            return false;
176
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
123
552
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
552
            using Types2 = std::decay_t<decltype(types2)>;
125
552
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
552
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
552
                using FromFieldType = typename FromDataType::FieldType;
133
552
                using ToFieldType = typename ToDataType::FieldType;
134
552
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
552
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
552
                UInt32 to_max_digits = 0;
146
552
                UInt32 to_precision = 0;
147
552
                UInt32 to_scale = 0;
148
149
552
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
552
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
552
                    const auto* to_decimal_type =
153
552
                            check_and_get_data_type<ToDataType>(to_type.get());
154
552
                    to_precision = to_decimal_type->get_precision();
155
552
                    ToDataType::check_type_precision(to_precision);
156
157
552
                    to_scale = to_decimal_type->get_scale();
158
552
                    ToDataType::check_type_scale(to_scale);
159
552
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
552
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
552
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
552
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
552
                if (to_scale > from_scale) {
170
280
                    multiply_may_overflow &=
171
280
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
280
                }
173
552
                return narrow_integral || multiply_may_overflow;
174
552
            }
175
0
            return false;
176
552
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
612
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
612
            using Types2 = std::decay_t<decltype(types2)>;
125
612
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
612
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
612
                using FromFieldType = typename FromDataType::FieldType;
133
612
                using ToFieldType = typename ToDataType::FieldType;
134
612
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
612
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
612
                UInt32 to_max_digits = 0;
146
612
                UInt32 to_precision = 0;
147
612
                UInt32 to_scale = 0;
148
149
612
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
612
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
612
                    const auto* to_decimal_type =
153
612
                            check_and_get_data_type<ToDataType>(to_type.get());
154
612
                    to_precision = to_decimal_type->get_precision();
155
612
                    ToDataType::check_type_precision(to_precision);
156
157
612
                    to_scale = to_decimal_type->get_scale();
158
612
                    ToDataType::check_type_scale(to_scale);
159
612
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
612
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
612
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
612
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
612
                if (to_scale > from_scale) {
170
266
                    multiply_may_overflow &=
171
266
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
266
                }
173
612
                return narrow_integral || multiply_may_overflow;
174
612
            }
175
0
            return false;
176
612
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
549
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
549
            using Types2 = std::decay_t<decltype(types2)>;
125
549
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
549
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
549
                using FromFieldType = typename FromDataType::FieldType;
133
549
                using ToFieldType = typename ToDataType::FieldType;
134
549
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
549
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
549
                UInt32 to_max_digits = 0;
146
549
                UInt32 to_precision = 0;
147
549
                UInt32 to_scale = 0;
148
149
549
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
549
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
549
                    const auto* to_decimal_type =
153
549
                            check_and_get_data_type<ToDataType>(to_type.get());
154
549
                    to_precision = to_decimal_type->get_precision();
155
549
                    ToDataType::check_type_precision(to_precision);
156
157
549
                    to_scale = to_decimal_type->get_scale();
158
549
                    ToDataType::check_type_scale(to_scale);
159
549
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
549
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
549
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
549
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
549
                if (to_scale > from_scale) {
170
278
                    multiply_may_overflow &=
171
278
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
278
                }
173
549
                return narrow_integral || multiply_may_overflow;
174
549
            }
175
0
            return false;
176
549
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
104
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
104
            using Types2 = std::decay_t<decltype(types2)>;
125
104
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
104
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
104
                using FromFieldType = typename FromDataType::FieldType;
133
104
                using ToFieldType = typename ToDataType::FieldType;
134
104
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
104
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
104
                UInt32 to_max_digits = 0;
146
104
                UInt32 to_precision = 0;
147
104
                UInt32 to_scale = 0;
148
149
104
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
104
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
104
                    const auto* to_decimal_type =
153
104
                            check_and_get_data_type<ToDataType>(to_type.get());
154
104
                    to_precision = to_decimal_type->get_precision();
155
104
                    ToDataType::check_type_precision(to_precision);
156
157
104
                    to_scale = to_decimal_type->get_scale();
158
104
                    ToDataType::check_type_scale(to_scale);
159
104
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
104
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
104
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
104
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
104
                if (to_scale > from_scale) {
170
68
                    multiply_may_overflow &=
171
68
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
68
                }
173
104
                return narrow_integral || multiply_may_overflow;
174
104
            }
175
0
            return false;
176
104
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
308
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
308
            using Types2 = std::decay_t<decltype(types2)>;
125
308
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
308
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
308
                using FromFieldType = typename FromDataType::FieldType;
133
308
                using ToFieldType = typename ToDataType::FieldType;
134
308
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
308
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
308
                UInt32 to_max_digits = 0;
146
308
                UInt32 to_precision = 0;
147
308
                UInt32 to_scale = 0;
148
149
308
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
308
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
308
                    const auto* to_decimal_type =
153
308
                            check_and_get_data_type<ToDataType>(to_type.get());
154
308
                    to_precision = to_decimal_type->get_precision();
155
308
                    ToDataType::check_type_precision(to_precision);
156
157
308
                    to_scale = to_decimal_type->get_scale();
158
308
                    ToDataType::check_type_scale(to_scale);
159
308
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
308
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
308
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
308
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
308
                if (to_scale > from_scale) {
170
258
                    multiply_may_overflow &=
171
258
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
258
                }
173
308
                return narrow_integral || multiply_may_overflow;
174
308
            }
175
0
            return false;
176
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
123
386
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
386
            using Types2 = std::decay_t<decltype(types2)>;
125
386
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
386
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
386
                using FromFieldType = typename FromDataType::FieldType;
133
386
                using ToFieldType = typename ToDataType::FieldType;
134
386
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
386
                UInt32 from_scale = 0;
136
137
386
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
386
                    const auto* from_decimal_type =
139
386
                            check_and_get_data_type<FromDataType>(from_type.get());
140
386
                    from_precision =
141
386
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
386
                    from_scale = from_decimal_type->get_scale();
143
386
                }
144
145
386
                UInt32 to_max_digits = 0;
146
386
                UInt32 to_precision = 0;
147
386
                UInt32 to_scale = 0;
148
149
386
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
386
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
386
                    const auto* to_decimal_type =
153
386
                            check_and_get_data_type<ToDataType>(to_type.get());
154
386
                    to_precision = to_decimal_type->get_precision();
155
386
                    ToDataType::check_type_precision(to_precision);
156
157
386
                    to_scale = to_decimal_type->get_scale();
158
386
                    ToDataType::check_type_scale(to_scale);
159
386
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
386
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
386
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
386
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
386
                if (to_scale > from_scale) {
170
81
                    multiply_may_overflow &=
171
81
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
81
                }
173
386
                return narrow_integral || multiply_may_overflow;
174
386
            }
175
0
            return false;
176
386
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
564
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
564
            using Types2 = std::decay_t<decltype(types2)>;
125
564
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
564
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
564
                using FromFieldType = typename FromDataType::FieldType;
133
564
                using ToFieldType = typename ToDataType::FieldType;
134
564
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
564
                UInt32 from_scale = 0;
136
137
564
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
564
                    const auto* from_decimal_type =
139
564
                            check_and_get_data_type<FromDataType>(from_type.get());
140
564
                    from_precision =
141
564
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
564
                    from_scale = from_decimal_type->get_scale();
143
564
                }
144
145
564
                UInt32 to_max_digits = 0;
146
564
                UInt32 to_precision = 0;
147
564
                UInt32 to_scale = 0;
148
149
564
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
564
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
564
                    const auto* to_decimal_type =
153
564
                            check_and_get_data_type<ToDataType>(to_type.get());
154
564
                    to_precision = to_decimal_type->get_precision();
155
564
                    ToDataType::check_type_precision(to_precision);
156
157
564
                    to_scale = to_decimal_type->get_scale();
158
564
                    ToDataType::check_type_scale(to_scale);
159
564
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
564
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
564
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
564
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
564
                if (to_scale > from_scale) {
170
142
                    multiply_may_overflow &=
171
142
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
142
                }
173
564
                return narrow_integral || multiply_may_overflow;
174
564
            }
175
0
            return false;
176
564
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
254
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
254
            using Types2 = std::decay_t<decltype(types2)>;
125
254
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
254
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
254
                using FromFieldType = typename FromDataType::FieldType;
133
254
                using ToFieldType = typename ToDataType::FieldType;
134
254
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
254
                UInt32 from_scale = 0;
136
137
254
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
254
                    const auto* from_decimal_type =
139
254
                            check_and_get_data_type<FromDataType>(from_type.get());
140
254
                    from_precision =
141
254
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
254
                    from_scale = from_decimal_type->get_scale();
143
254
                }
144
145
254
                UInt32 to_max_digits = 0;
146
254
                UInt32 to_precision = 0;
147
254
                UInt32 to_scale = 0;
148
149
254
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
254
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
254
                    const auto* to_decimal_type =
153
254
                            check_and_get_data_type<ToDataType>(to_type.get());
154
254
                    to_precision = to_decimal_type->get_precision();
155
254
                    ToDataType::check_type_precision(to_precision);
156
157
254
                    to_scale = to_decimal_type->get_scale();
158
254
                    ToDataType::check_type_scale(to_scale);
159
254
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
254
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
254
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
254
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
254
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
254
                return narrow_integral || multiply_may_overflow;
174
254
            }
175
0
            return false;
176
254
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
2.32k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.32k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.32k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2.32k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.32k
                using FromFieldType = typename FromDataType::FieldType;
133
2.32k
                using ToFieldType = typename ToDataType::FieldType;
134
2.32k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.32k
                UInt32 from_scale = 0;
136
137
2.32k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2.32k
                    const auto* from_decimal_type =
139
2.32k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2.32k
                    from_precision =
141
2.32k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2.32k
                    from_scale = from_decimal_type->get_scale();
143
2.32k
                }
144
145
2.32k
                UInt32 to_max_digits = 0;
146
2.32k
                UInt32 to_precision = 0;
147
2.32k
                UInt32 to_scale = 0;
148
149
2.32k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.32k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.32k
                    const auto* to_decimal_type =
153
2.32k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.32k
                    to_precision = to_decimal_type->get_precision();
155
2.32k
                    ToDataType::check_type_precision(to_precision);
156
157
2.32k
                    to_scale = to_decimal_type->get_scale();
158
2.32k
                    ToDataType::check_type_scale(to_scale);
159
2.32k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2.32k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.32k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.32k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.32k
                if (to_scale > from_scale) {
170
111
                    multiply_may_overflow &=
171
111
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
111
                }
173
2.32k
                return narrow_integral || multiply_may_overflow;
174
2.32k
            }
175
0
            return false;
176
2.32k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
303
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
303
            using Types2 = std::decay_t<decltype(types2)>;
125
303
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
303
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
303
                using FromFieldType = typename FromDataType::FieldType;
133
303
                using ToFieldType = typename ToDataType::FieldType;
134
303
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
303
                UInt32 from_scale = 0;
136
137
303
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
303
                    const auto* from_decimal_type =
139
303
                            check_and_get_data_type<FromDataType>(from_type.get());
140
303
                    from_precision =
141
303
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
303
                    from_scale = from_decimal_type->get_scale();
143
303
                }
144
145
303
                UInt32 to_max_digits = 0;
146
303
                UInt32 to_precision = 0;
147
303
                UInt32 to_scale = 0;
148
149
303
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
303
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
303
                    const auto* to_decimal_type =
153
303
                            check_and_get_data_type<ToDataType>(to_type.get());
154
303
                    to_precision = to_decimal_type->get_precision();
155
303
                    ToDataType::check_type_precision(to_precision);
156
157
303
                    to_scale = to_decimal_type->get_scale();
158
303
                    ToDataType::check_type_scale(to_scale);
159
303
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
303
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
303
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
303
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
303
                if (to_scale > from_scale) {
170
79
                    multiply_may_overflow &=
171
79
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
79
                }
173
303
                return narrow_integral || multiply_may_overflow;
174
303
            }
175
0
            return false;
176
303
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
2.92k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.92k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.92k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2.92k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2.92k
                return false;
130
2.92k
            }
131
2.92k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.92k
                using FromFieldType = typename FromDataType::FieldType;
133
2.92k
                using ToFieldType = typename ToDataType::FieldType;
134
2.92k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.92k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
2.92k
                UInt32 to_max_digits = 0;
146
2.92k
                UInt32 to_precision = 0;
147
2.92k
                UInt32 to_scale = 0;
148
149
2.92k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.92k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.92k
                    const auto* to_decimal_type =
153
2.92k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.92k
                    to_precision = to_decimal_type->get_precision();
155
2.92k
                    ToDataType::check_type_precision(to_precision);
156
157
2.92k
                    to_scale = to_decimal_type->get_scale();
158
2.92k
                    ToDataType::check_type_scale(to_scale);
159
2.92k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2.92k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.92k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.92k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.92k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2.92k
                return narrow_integral || multiply_may_overflow;
174
2.92k
            }
175
0
            return false;
176
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
123
17
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
17
            using Types2 = std::decay_t<decltype(types2)>;
125
17
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
17
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
17
                using FromFieldType = typename FromDataType::FieldType;
133
17
                using ToFieldType = typename ToDataType::FieldType;
134
17
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
17
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
17
                UInt32 to_max_digits = 0;
146
17
                UInt32 to_precision = 0;
147
17
                UInt32 to_scale = 0;
148
149
17
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
17
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
17
                    const auto* to_decimal_type =
153
17
                            check_and_get_data_type<ToDataType>(to_type.get());
154
17
                    to_precision = to_decimal_type->get_precision();
155
17
                    ToDataType::check_type_precision(to_precision);
156
157
17
                    to_scale = to_decimal_type->get_scale();
158
17
                    ToDataType::check_type_scale(to_scale);
159
17
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
17
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
17
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
17
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
17
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
17
                return narrow_integral || multiply_may_overflow;
174
17
            }
175
0
            return false;
176
17
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
72
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
72
            using Types2 = std::decay_t<decltype(types2)>;
125
72
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
72
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
72
                using FromFieldType = typename FromDataType::FieldType;
133
72
                using ToFieldType = typename ToDataType::FieldType;
134
72
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
72
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
72
                UInt32 to_max_digits = 0;
146
72
                UInt32 to_precision = 0;
147
72
                UInt32 to_scale = 0;
148
149
72
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
72
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
72
                    const auto* to_decimal_type =
153
72
                            check_and_get_data_type<ToDataType>(to_type.get());
154
72
                    to_precision = to_decimal_type->get_precision();
155
72
                    ToDataType::check_type_precision(to_precision);
156
157
72
                    to_scale = to_decimal_type->get_scale();
158
72
                    ToDataType::check_type_scale(to_scale);
159
72
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
72
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
72
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
72
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
72
                if (to_scale > from_scale) {
170
59
                    multiply_may_overflow &=
171
59
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
59
                }
173
72
                return narrow_integral || multiply_may_overflow;
174
72
            }
175
0
            return false;
176
72
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
49
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
49
            using Types2 = std::decay_t<decltype(types2)>;
125
49
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
49
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
49
                using FromFieldType = typename FromDataType::FieldType;
133
49
                using ToFieldType = typename ToDataType::FieldType;
134
49
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
49
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
49
                UInt32 to_max_digits = 0;
146
49
                UInt32 to_precision = 0;
147
49
                UInt32 to_scale = 0;
148
149
49
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
49
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
49
                    const auto* to_decimal_type =
153
49
                            check_and_get_data_type<ToDataType>(to_type.get());
154
49
                    to_precision = to_decimal_type->get_precision();
155
49
                    ToDataType::check_type_precision(to_precision);
156
157
49
                    to_scale = to_decimal_type->get_scale();
158
49
                    ToDataType::check_type_scale(to_scale);
159
49
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
49
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
49
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
49
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
49
                if (to_scale > from_scale) {
170
38
                    multiply_may_overflow &=
171
38
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
38
                }
173
49
                return narrow_integral || multiply_may_overflow;
174
49
            }
175
0
            return false;
176
49
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
472
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
472
            using Types2 = std::decay_t<decltype(types2)>;
125
472
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
472
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
472
                using FromFieldType = typename FromDataType::FieldType;
133
472
                using ToFieldType = typename ToDataType::FieldType;
134
472
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
472
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
472
                UInt32 to_max_digits = 0;
146
472
                UInt32 to_precision = 0;
147
472
                UInt32 to_scale = 0;
148
149
472
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
472
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
472
                    const auto* to_decimal_type =
153
472
                            check_and_get_data_type<ToDataType>(to_type.get());
154
472
                    to_precision = to_decimal_type->get_precision();
155
472
                    ToDataType::check_type_precision(to_precision);
156
157
472
                    to_scale = to_decimal_type->get_scale();
158
472
                    ToDataType::check_type_scale(to_scale);
159
472
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
472
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
472
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
472
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
472
                if (to_scale > from_scale) {
170
320
                    multiply_may_overflow &=
171
320
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
320
                }
173
472
                return narrow_integral || multiply_may_overflow;
174
472
            }
175
0
            return false;
176
472
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
53
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
53
            using Types2 = std::decay_t<decltype(types2)>;
125
53
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
53
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
53
                using FromFieldType = typename FromDataType::FieldType;
133
53
                using ToFieldType = typename ToDataType::FieldType;
134
53
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
53
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
53
                UInt32 to_max_digits = 0;
146
53
                UInt32 to_precision = 0;
147
53
                UInt32 to_scale = 0;
148
149
53
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
53
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
53
                    const auto* to_decimal_type =
153
53
                            check_and_get_data_type<ToDataType>(to_type.get());
154
53
                    to_precision = to_decimal_type->get_precision();
155
53
                    ToDataType::check_type_precision(to_precision);
156
157
53
                    to_scale = to_decimal_type->get_scale();
158
53
                    ToDataType::check_type_scale(to_scale);
159
53
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
53
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
53
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
53
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
53
                if (to_scale > from_scale) {
170
32
                    multiply_may_overflow &=
171
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
32
                }
173
53
                return narrow_integral || multiply_may_overflow;
174
53
            }
175
0
            return false;
176
53
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
65
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
65
            using Types2 = std::decay_t<decltype(types2)>;
125
65
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
65
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
65
                using FromFieldType = typename FromDataType::FieldType;
133
65
                using ToFieldType = typename ToDataType::FieldType;
134
65
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
65
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
65
                UInt32 to_max_digits = 0;
146
65
                UInt32 to_precision = 0;
147
65
                UInt32 to_scale = 0;
148
149
65
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
65
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
65
                    const auto* to_decimal_type =
153
65
                            check_and_get_data_type<ToDataType>(to_type.get());
154
65
                    to_precision = to_decimal_type->get_precision();
155
65
                    ToDataType::check_type_precision(to_precision);
156
157
65
                    to_scale = to_decimal_type->get_scale();
158
65
                    ToDataType::check_type_scale(to_scale);
159
65
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
65
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
65
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
65
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
65
                if (to_scale > from_scale) {
170
39
                    multiply_may_overflow &=
171
39
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
39
                }
173
65
                return narrow_integral || multiply_may_overflow;
174
65
            }
175
0
            return false;
176
65
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
107
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
107
            using Types2 = std::decay_t<decltype(types2)>;
125
107
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
107
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
107
                using FromFieldType = typename FromDataType::FieldType;
133
107
                using ToFieldType = typename ToDataType::FieldType;
134
107
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
107
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
107
                UInt32 to_max_digits = 0;
146
107
                UInt32 to_precision = 0;
147
107
                UInt32 to_scale = 0;
148
149
107
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
107
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
107
                    const auto* to_decimal_type =
153
107
                            check_and_get_data_type<ToDataType>(to_type.get());
154
107
                    to_precision = to_decimal_type->get_precision();
155
107
                    ToDataType::check_type_precision(to_precision);
156
157
107
                    to_scale = to_decimal_type->get_scale();
158
107
                    ToDataType::check_type_scale(to_scale);
159
107
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
107
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
107
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
107
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
107
                if (to_scale > from_scale) {
170
65
                    multiply_may_overflow &=
171
65
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
65
                }
173
107
                return narrow_integral || multiply_may_overflow;
174
107
            }
175
0
            return false;
176
107
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
215
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
215
            using Types2 = std::decay_t<decltype(types2)>;
125
215
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
215
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
215
                using FromFieldType = typename FromDataType::FieldType;
133
215
                using ToFieldType = typename ToDataType::FieldType;
134
215
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
215
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
215
                UInt32 to_max_digits = 0;
146
215
                UInt32 to_precision = 0;
147
215
                UInt32 to_scale = 0;
148
149
215
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
215
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
215
                    const auto* to_decimal_type =
153
215
                            check_and_get_data_type<ToDataType>(to_type.get());
154
215
                    to_precision = to_decimal_type->get_precision();
155
215
                    ToDataType::check_type_precision(to_precision);
156
157
215
                    to_scale = to_decimal_type->get_scale();
158
215
                    ToDataType::check_type_scale(to_scale);
159
215
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
215
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
215
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
215
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
215
                if (to_scale > from_scale) {
170
182
                    multiply_may_overflow &=
171
182
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
182
                }
173
215
                return narrow_integral || multiply_may_overflow;
174
215
            }
175
0
            return false;
176
215
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
1.11k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.11k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.11k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.11k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.11k
                using FromFieldType = typename FromDataType::FieldType;
133
1.11k
                using ToFieldType = typename ToDataType::FieldType;
134
1.11k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.11k
                UInt32 from_scale = 0;
136
137
1.11k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.11k
                    const auto* from_decimal_type =
139
1.11k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.11k
                    from_precision =
141
1.11k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.11k
                    from_scale = from_decimal_type->get_scale();
143
1.11k
                }
144
145
1.11k
                UInt32 to_max_digits = 0;
146
1.11k
                UInt32 to_precision = 0;
147
1.11k
                UInt32 to_scale = 0;
148
149
1.11k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.11k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.11k
                    const auto* to_decimal_type =
153
1.11k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.11k
                    to_precision = to_decimal_type->get_precision();
155
1.11k
                    ToDataType::check_type_precision(to_precision);
156
157
1.11k
                    to_scale = to_decimal_type->get_scale();
158
1.11k
                    ToDataType::check_type_scale(to_scale);
159
1.11k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.11k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.11k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.11k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.11k
                if (to_scale > from_scale) {
170
766
                    multiply_may_overflow &=
171
766
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
766
                }
173
1.11k
                return narrow_integral || multiply_may_overflow;
174
1.11k
            }
175
0
            return false;
176
1.11k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
5.40k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.40k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.40k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5.40k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.40k
                using FromFieldType = typename FromDataType::FieldType;
133
5.40k
                using ToFieldType = typename ToDataType::FieldType;
134
5.40k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.40k
                UInt32 from_scale = 0;
136
137
5.40k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5.40k
                    const auto* from_decimal_type =
139
5.40k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5.40k
                    from_precision =
141
5.40k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5.40k
                    from_scale = from_decimal_type->get_scale();
143
5.40k
                }
144
145
5.40k
                UInt32 to_max_digits = 0;
146
5.40k
                UInt32 to_precision = 0;
147
5.40k
                UInt32 to_scale = 0;
148
149
5.40k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.40k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.40k
                    const auto* to_decimal_type =
153
5.40k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.40k
                    to_precision = to_decimal_type->get_precision();
155
5.40k
                    ToDataType::check_type_precision(to_precision);
156
157
5.40k
                    to_scale = to_decimal_type->get_scale();
158
5.40k
                    ToDataType::check_type_scale(to_scale);
159
5.40k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5.40k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.40k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.40k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.40k
                if (to_scale > from_scale) {
170
158
                    multiply_may_overflow &=
171
158
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
158
                }
173
5.40k
                return narrow_integral || multiply_may_overflow;
174
5.40k
            }
175
0
            return false;
176
5.40k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
357
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
357
            using Types2 = std::decay_t<decltype(types2)>;
125
357
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
357
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
357
                using FromFieldType = typename FromDataType::FieldType;
133
357
                using ToFieldType = typename ToDataType::FieldType;
134
357
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
357
                UInt32 from_scale = 0;
136
137
357
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
357
                    const auto* from_decimal_type =
139
357
                            check_and_get_data_type<FromDataType>(from_type.get());
140
357
                    from_precision =
141
357
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
357
                    from_scale = from_decimal_type->get_scale();
143
357
                }
144
145
357
                UInt32 to_max_digits = 0;
146
357
                UInt32 to_precision = 0;
147
357
                UInt32 to_scale = 0;
148
149
357
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
357
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
357
                    const auto* to_decimal_type =
153
357
                            check_and_get_data_type<ToDataType>(to_type.get());
154
357
                    to_precision = to_decimal_type->get_precision();
155
357
                    ToDataType::check_type_precision(to_precision);
156
157
357
                    to_scale = to_decimal_type->get_scale();
158
357
                    ToDataType::check_type_scale(to_scale);
159
357
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
357
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
357
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
357
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
357
                if (to_scale > from_scale) {
170
50
                    multiply_may_overflow &=
171
50
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
50
                }
173
357
                return narrow_integral || multiply_may_overflow;
174
357
            }
175
0
            return false;
176
357
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_30EEESE_EEEEbSI_
Line
Count
Source
123
5.60k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.60k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.60k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5.60k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.60k
                using FromFieldType = typename FromDataType::FieldType;
133
5.60k
                using ToFieldType = typename ToDataType::FieldType;
134
5.60k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.60k
                UInt32 from_scale = 0;
136
137
5.60k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5.60k
                    const auto* from_decimal_type =
139
5.60k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5.60k
                    from_precision =
141
5.60k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5.60k
                    from_scale = from_decimal_type->get_scale();
143
5.60k
                }
144
145
5.60k
                UInt32 to_max_digits = 0;
146
5.60k
                UInt32 to_precision = 0;
147
5.60k
                UInt32 to_scale = 0;
148
149
5.60k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.60k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.60k
                    const auto* to_decimal_type =
153
5.60k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.60k
                    to_precision = to_decimal_type->get_precision();
155
5.60k
                    ToDataType::check_type_precision(to_precision);
156
157
5.60k
                    to_scale = to_decimal_type->get_scale();
158
5.60k
                    ToDataType::check_type_scale(to_scale);
159
5.60k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5.60k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.60k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.60k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.60k
                if (to_scale > from_scale) {
170
144
                    multiply_may_overflow &=
171
144
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
144
                }
173
5.60k
                return narrow_integral || multiply_may_overflow;
174
5.60k
            }
175
0
            return false;
176
5.60k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
401
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
401
            using Types2 = std::decay_t<decltype(types2)>;
125
401
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
401
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
401
                using FromFieldType = typename FromDataType::FieldType;
133
401
                using ToFieldType = typename ToDataType::FieldType;
134
401
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
401
                UInt32 from_scale = 0;
136
137
401
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
401
                    const auto* from_decimal_type =
139
401
                            check_and_get_data_type<FromDataType>(from_type.get());
140
401
                    from_precision =
141
401
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
401
                    from_scale = from_decimal_type->get_scale();
143
401
                }
144
145
401
                UInt32 to_max_digits = 0;
146
401
                UInt32 to_precision = 0;
147
401
                UInt32 to_scale = 0;
148
149
401
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
401
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
401
                    const auto* to_decimal_type =
153
401
                            check_and_get_data_type<ToDataType>(to_type.get());
154
401
                    to_precision = to_decimal_type->get_precision();
155
401
                    ToDataType::check_type_precision(to_precision);
156
157
401
                    to_scale = to_decimal_type->get_scale();
158
401
                    ToDataType::check_type_scale(to_scale);
159
401
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
401
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
401
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
401
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
401
                if (to_scale > from_scale) {
170
137
                    multiply_may_overflow &=
171
137
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
137
                }
173
401
                return narrow_integral || multiply_may_overflow;
174
401
            }
175
0
            return false;
176
401
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
7.92k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7.92k
            using Types2 = std::decay_t<decltype(types2)>;
125
7.92k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
7.92k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
7.92k
                return false;
130
7.92k
            }
131
7.92k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
7.92k
                using FromFieldType = typename FromDataType::FieldType;
133
7.92k
                using ToFieldType = typename ToDataType::FieldType;
134
7.92k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
7.92k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
7.92k
                UInt32 to_max_digits = 0;
146
7.92k
                UInt32 to_precision = 0;
147
7.92k
                UInt32 to_scale = 0;
148
149
7.92k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
7.92k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
7.92k
                    const auto* to_decimal_type =
153
7.92k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
7.92k
                    to_precision = to_decimal_type->get_precision();
155
7.92k
                    ToDataType::check_type_precision(to_precision);
156
157
7.92k
                    to_scale = to_decimal_type->get_scale();
158
7.92k
                    ToDataType::check_type_scale(to_scale);
159
7.92k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
7.92k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
7.92k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
7.92k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
7.92k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
7.92k
                return narrow_integral || multiply_may_overflow;
174
7.92k
            }
175
0
            return false;
176
7.92k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
20
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
20
                using FromFieldType = typename FromDataType::FieldType;
133
20
                using ToFieldType = typename ToDataType::FieldType;
134
20
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
20
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
20
                UInt32 to_max_digits = 0;
146
20
                UInt32 to_precision = 0;
147
20
                UInt32 to_scale = 0;
148
149
20
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
20
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
20
                    const auto* to_decimal_type =
153
20
                            check_and_get_data_type<ToDataType>(to_type.get());
154
20
                    to_precision = to_decimal_type->get_precision();
155
20
                    ToDataType::check_type_precision(to_precision);
156
157
20
                    to_scale = to_decimal_type->get_scale();
158
20
                    ToDataType::check_type_scale(to_scale);
159
20
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
20
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
20
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
20
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
20
                if (to_scale > from_scale) {
170
19
                    multiply_may_overflow &=
171
19
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
19
                }
173
20
                return narrow_integral || multiply_may_overflow;
174
20
            }
175
0
            return false;
176
20
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
15
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
15
            using Types2 = std::decay_t<decltype(types2)>;
125
15
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
15
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
15
                using FromFieldType = typename FromDataType::FieldType;
133
15
                using ToFieldType = typename ToDataType::FieldType;
134
15
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
15
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
15
                UInt32 to_max_digits = 0;
146
15
                UInt32 to_precision = 0;
147
15
                UInt32 to_scale = 0;
148
149
15
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
15
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
15
                    const auto* to_decimal_type =
153
15
                            check_and_get_data_type<ToDataType>(to_type.get());
154
15
                    to_precision = to_decimal_type->get_precision();
155
15
                    ToDataType::check_type_precision(to_precision);
156
157
15
                    to_scale = to_decimal_type->get_scale();
158
15
                    ToDataType::check_type_scale(to_scale);
159
15
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
15
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
15
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
15
            }
175
0
            return false;
176
15
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
16
                    const auto* to_decimal_type =
153
16
                            check_and_get_data_type<ToDataType>(to_type.get());
154
16
                    to_precision = to_decimal_type->get_precision();
155
16
                    ToDataType::check_type_precision(to_precision);
156
157
16
                    to_scale = to_decimal_type->get_scale();
158
16
                    ToDataType::check_type_scale(to_scale);
159
16
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
16
                    multiply_may_overflow &=
171
16
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
16
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
16
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
16
            using Types2 = std::decay_t<decltype(types2)>;
125
16
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
16
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
16
                using FromFieldType = typename FromDataType::FieldType;
133
16
                using ToFieldType = typename ToDataType::FieldType;
134
16
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
16
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
16
                UInt32 to_max_digits = 0;
146
16
                UInt32 to_precision = 0;
147
16
                UInt32 to_scale = 0;
148
149
16
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
16
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
16
                    const auto* to_decimal_type =
153
16
                            check_and_get_data_type<ToDataType>(to_type.get());
154
16
                    to_precision = to_decimal_type->get_precision();
155
16
                    ToDataType::check_type_precision(to_precision);
156
157
16
                    to_scale = to_decimal_type->get_scale();
158
16
                    ToDataType::check_type_scale(to_scale);
159
16
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
16
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
16
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
16
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
16
                if (to_scale > from_scale) {
170
15
                    multiply_may_overflow &=
171
15
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
15
                }
173
16
                return narrow_integral || multiply_may_overflow;
174
16
            }
175
0
            return false;
176
16
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
31
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
31
            using Types2 = std::decay_t<decltype(types2)>;
125
31
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
31
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
31
                using FromFieldType = typename FromDataType::FieldType;
133
31
                using ToFieldType = typename ToDataType::FieldType;
134
31
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
31
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
31
                UInt32 to_max_digits = 0;
146
31
                UInt32 to_precision = 0;
147
31
                UInt32 to_scale = 0;
148
149
31
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
31
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
31
                    const auto* to_decimal_type =
153
31
                            check_and_get_data_type<ToDataType>(to_type.get());
154
31
                    to_precision = to_decimal_type->get_precision();
155
31
                    ToDataType::check_type_precision(to_precision);
156
157
31
                    to_scale = to_decimal_type->get_scale();
158
31
                    ToDataType::check_type_scale(to_scale);
159
31
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
31
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
32
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
31
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
32
                if (to_scale > from_scale) {
170
32
                    multiply_may_overflow &=
171
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
32
                }
173
31
                return narrow_integral || multiply_may_overflow;
174
31
            }
175
0
            return false;
176
31
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
127
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
127
            using Types2 = std::decay_t<decltype(types2)>;
125
127
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
127
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
127
                using FromFieldType = typename FromDataType::FieldType;
133
127
                using ToFieldType = typename ToDataType::FieldType;
134
127
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
127
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
127
                UInt32 to_max_digits = 0;
146
127
                UInt32 to_precision = 0;
147
127
                UInt32 to_scale = 0;
148
149
127
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
127
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
127
                    const auto* to_decimal_type =
153
127
                            check_and_get_data_type<ToDataType>(to_type.get());
154
127
                    to_precision = to_decimal_type->get_precision();
155
127
                    ToDataType::check_type_precision(to_precision);
156
157
127
                    to_scale = to_decimal_type->get_scale();
158
127
                    ToDataType::check_type_scale(to_scale);
159
127
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
127
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
127
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
127
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
127
                if (to_scale > from_scale) {
170
127
                    multiply_may_overflow &=
171
127
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
127
                }
173
127
                return narrow_integral || multiply_may_overflow;
174
127
            }
175
0
            return false;
176
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
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
1
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
1
                return false;
130
1
            }
131
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1
                using FromFieldType = typename FromDataType::FieldType;
133
1
                using ToFieldType = typename ToDataType::FieldType;
134
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
1
                UInt32 to_max_digits = 0;
146
1
                UInt32 to_precision = 0;
147
1
                UInt32 to_scale = 0;
148
149
1
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1
                    const auto* to_decimal_type =
153
1
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1
                    to_precision = to_decimal_type->get_precision();
155
1
                    ToDataType::check_type_precision(to_precision);
156
157
1
                    to_scale = to_decimal_type->get_scale();
158
1
                    ToDataType::check_type_scale(to_scale);
159
1
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
1
                return narrow_integral || multiply_may_overflow;
174
1
            }
175
0
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
23
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
23
            using Types2 = std::decay_t<decltype(types2)>;
125
23
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
23
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
23
                using FromFieldType = typename FromDataType::FieldType;
133
23
                using ToFieldType = typename ToDataType::FieldType;
134
23
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
23
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
23
                UInt32 to_max_digits = 0;
146
23
                UInt32 to_precision = 0;
147
23
                UInt32 to_scale = 0;
148
149
23
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
23
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
23
                    const auto* to_decimal_type =
153
23
                            check_and_get_data_type<ToDataType>(to_type.get());
154
23
                    to_precision = to_decimal_type->get_precision();
155
23
                    ToDataType::check_type_precision(to_precision);
156
157
23
                    to_scale = to_decimal_type->get_scale();
158
23
                    ToDataType::check_type_scale(to_scale);
159
23
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
23
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
23
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
23
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
23
                if (to_scale > from_scale) {
170
22
                    multiply_may_overflow &=
171
22
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
22
                }
173
23
                return narrow_integral || multiply_may_overflow;
174
23
            }
175
0
            return false;
176
23
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
179
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
179
            using Types2 = std::decay_t<decltype(types2)>;
125
179
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
179
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
179
                using FromFieldType = typename FromDataType::FieldType;
133
179
                using ToFieldType = typename ToDataType::FieldType;
134
179
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
179
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
179
                UInt32 to_max_digits = 0;
146
179
                UInt32 to_precision = 0;
147
179
                UInt32 to_scale = 0;
148
149
179
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
179
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
179
                    const auto* to_decimal_type =
153
179
                            check_and_get_data_type<ToDataType>(to_type.get());
154
179
                    to_precision = to_decimal_type->get_precision();
155
179
                    ToDataType::check_type_precision(to_precision);
156
157
179
                    to_scale = to_decimal_type->get_scale();
158
179
                    ToDataType::check_type_scale(to_scale);
159
179
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
179
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
179
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
179
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
179
                if (to_scale > from_scale) {
170
128
                    multiply_may_overflow &=
171
128
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
128
                }
173
179
                return narrow_integral || multiply_may_overflow;
174
179
            }
175
0
            return false;
176
179
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
166
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
166
            using Types2 = std::decay_t<decltype(types2)>;
125
166
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
166
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
166
                using FromFieldType = typename FromDataType::FieldType;
133
166
                using ToFieldType = typename ToDataType::FieldType;
134
166
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
166
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
166
                UInt32 to_max_digits = 0;
146
166
                UInt32 to_precision = 0;
147
166
                UInt32 to_scale = 0;
148
149
166
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
166
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
166
                    const auto* to_decimal_type =
153
166
                            check_and_get_data_type<ToDataType>(to_type.get());
154
166
                    to_precision = to_decimal_type->get_precision();
155
166
                    ToDataType::check_type_precision(to_precision);
156
157
166
                    to_scale = to_decimal_type->get_scale();
158
166
                    ToDataType::check_type_scale(to_scale);
159
166
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
166
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
166
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
166
                if (to_scale > from_scale) {
170
115
                    multiply_may_overflow &=
171
115
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
115
                }
173
166
                return narrow_integral || multiply_may_overflow;
174
166
            }
175
0
            return false;
176
166
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
434
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
434
            using Types2 = std::decay_t<decltype(types2)>;
125
434
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
434
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
434
                using FromFieldType = typename FromDataType::FieldType;
133
434
                using ToFieldType = typename ToDataType::FieldType;
134
434
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
434
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
434
                UInt32 to_max_digits = 0;
146
434
                UInt32 to_precision = 0;
147
434
                UInt32 to_scale = 0;
148
149
434
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
434
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
434
                    const auto* to_decimal_type =
153
434
                            check_and_get_data_type<ToDataType>(to_type.get());
154
434
                    to_precision = to_decimal_type->get_precision();
155
434
                    ToDataType::check_type_precision(to_precision);
156
157
434
                    to_scale = to_decimal_type->get_scale();
158
434
                    ToDataType::check_type_scale(to_scale);
159
434
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
434
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
434
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
434
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
434
                if (to_scale > from_scale) {
170
379
                    multiply_may_overflow &=
171
379
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
379
                }
173
434
                return narrow_integral || multiply_may_overflow;
174
434
            }
175
0
            return false;
176
434
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
2.13k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.13k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.13k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2.13k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.13k
                using FromFieldType = typename FromDataType::FieldType;
133
2.13k
                using ToFieldType = typename ToDataType::FieldType;
134
2.13k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.13k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
2.13k
                UInt32 to_max_digits = 0;
146
2.13k
                UInt32 to_precision = 0;
147
2.13k
                UInt32 to_scale = 0;
148
149
2.13k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.13k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.13k
                    const auto* to_decimal_type =
153
2.13k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.13k
                    to_precision = to_decimal_type->get_precision();
155
2.13k
                    ToDataType::check_type_precision(to_precision);
156
157
2.13k
                    to_scale = to_decimal_type->get_scale();
158
2.13k
                    ToDataType::check_type_scale(to_scale);
159
2.13k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2.13k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.13k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.13k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.13k
                if (to_scale > from_scale) {
170
464
                    multiply_may_overflow &=
171
464
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
464
                }
173
2.13k
                return narrow_integral || multiply_may_overflow;
174
2.13k
            }
175
0
            return false;
176
2.13k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
366
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
366
            using Types2 = std::decay_t<decltype(types2)>;
125
366
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
366
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
366
                using FromFieldType = typename FromDataType::FieldType;
133
366
                using ToFieldType = typename ToDataType::FieldType;
134
366
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
366
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
366
                UInt32 to_max_digits = 0;
146
366
                UInt32 to_precision = 0;
147
366
                UInt32 to_scale = 0;
148
149
366
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
366
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
366
                    const auto* to_decimal_type =
153
366
                            check_and_get_data_type<ToDataType>(to_type.get());
154
366
                    to_precision = to_decimal_type->get_precision();
155
366
                    ToDataType::check_type_precision(to_precision);
156
157
366
                    to_scale = to_decimal_type->get_scale();
158
366
                    ToDataType::check_type_scale(to_scale);
159
366
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
366
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
366
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
366
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
366
                if (to_scale > from_scale) {
170
196
                    multiply_may_overflow &=
171
196
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
196
                }
173
366
                return narrow_integral || multiply_may_overflow;
174
366
            }
175
0
            return false;
176
366
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
248
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
248
            using Types2 = std::decay_t<decltype(types2)>;
125
248
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
248
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
248
                using FromFieldType = typename FromDataType::FieldType;
133
248
                using ToFieldType = typename ToDataType::FieldType;
134
248
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
248
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
248
                UInt32 to_max_digits = 0;
146
248
                UInt32 to_precision = 0;
147
248
                UInt32 to_scale = 0;
148
149
248
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
248
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
248
                    const auto* to_decimal_type =
153
248
                            check_and_get_data_type<ToDataType>(to_type.get());
154
248
                    to_precision = to_decimal_type->get_precision();
155
248
                    ToDataType::check_type_precision(to_precision);
156
157
248
                    to_scale = to_decimal_type->get_scale();
158
248
                    ToDataType::check_type_scale(to_scale);
159
248
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
248
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
248
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
248
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
248
                if (to_scale > from_scale) {
170
130
                    multiply_may_overflow &=
171
130
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
130
                }
173
248
                return narrow_integral || multiply_may_overflow;
174
248
            }
175
0
            return false;
176
248
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
489
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
489
            using Types2 = std::decay_t<decltype(types2)>;
125
489
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
489
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
489
                using FromFieldType = typename FromDataType::FieldType;
133
489
                using ToFieldType = typename ToDataType::FieldType;
134
489
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
489
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
489
                UInt32 to_max_digits = 0;
146
489
                UInt32 to_precision = 0;
147
489
                UInt32 to_scale = 0;
148
149
489
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
489
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
489
                    const auto* to_decimal_type =
153
489
                            check_and_get_data_type<ToDataType>(to_type.get());
154
489
                    to_precision = to_decimal_type->get_precision();
155
489
                    ToDataType::check_type_precision(to_precision);
156
157
489
                    to_scale = to_decimal_type->get_scale();
158
489
                    ToDataType::check_type_scale(to_scale);
159
489
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
489
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
489
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
489
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
489
                if (to_scale > from_scale) {
170
379
                    multiply_may_overflow &=
171
379
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
379
                }
173
489
                return narrow_integral || multiply_may_overflow;
174
489
            }
175
0
            return false;
176
489
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
742
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
742
            using Types2 = std::decay_t<decltype(types2)>;
125
742
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
742
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
742
                using FromFieldType = typename FromDataType::FieldType;
133
742
                using ToFieldType = typename ToDataType::FieldType;
134
742
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
742
                UInt32 from_scale = 0;
136
137
742
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
742
                    const auto* from_decimal_type =
139
742
                            check_and_get_data_type<FromDataType>(from_type.get());
140
742
                    from_precision =
141
742
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
742
                    from_scale = from_decimal_type->get_scale();
143
742
                }
144
145
742
                UInt32 to_max_digits = 0;
146
742
                UInt32 to_precision = 0;
147
742
                UInt32 to_scale = 0;
148
149
742
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
742
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
742
                    const auto* to_decimal_type =
153
742
                            check_and_get_data_type<ToDataType>(to_type.get());
154
742
                    to_precision = to_decimal_type->get_precision();
155
742
                    ToDataType::check_type_precision(to_precision);
156
157
742
                    to_scale = to_decimal_type->get_scale();
158
742
                    ToDataType::check_type_scale(to_scale);
159
742
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
742
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
742
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
742
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
742
                if (to_scale > from_scale) {
170
602
                    multiply_may_overflow &=
171
602
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
602
                }
173
742
                return narrow_integral || multiply_may_overflow;
174
742
            }
175
0
            return false;
176
742
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
1.33k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.33k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.33k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.33k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.33k
                using FromFieldType = typename FromDataType::FieldType;
133
1.33k
                using ToFieldType = typename ToDataType::FieldType;
134
1.33k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.33k
                UInt32 from_scale = 0;
136
137
1.33k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.33k
                    const auto* from_decimal_type =
139
1.33k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.33k
                    from_precision =
141
1.33k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.33k
                    from_scale = from_decimal_type->get_scale();
143
1.33k
                }
144
145
1.33k
                UInt32 to_max_digits = 0;
146
1.33k
                UInt32 to_precision = 0;
147
1.33k
                UInt32 to_scale = 0;
148
149
1.33k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.33k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.33k
                    const auto* to_decimal_type =
153
1.33k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.33k
                    to_precision = to_decimal_type->get_precision();
155
1.33k
                    ToDataType::check_type_precision(to_precision);
156
157
1.33k
                    to_scale = to_decimal_type->get_scale();
158
1.33k
                    ToDataType::check_type_scale(to_scale);
159
1.33k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.33k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.33k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.33k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.33k
                if (to_scale > from_scale) {
170
718
                    multiply_may_overflow &=
171
718
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
718
                }
173
1.33k
                return narrow_integral || multiply_may_overflow;
174
1.33k
            }
175
0
            return false;
176
1.33k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
379
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
379
            using Types2 = std::decay_t<decltype(types2)>;
125
379
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
379
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
379
                using FromFieldType = typename FromDataType::FieldType;
133
379
                using ToFieldType = typename ToDataType::FieldType;
134
379
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
379
                UInt32 from_scale = 0;
136
137
379
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
379
                    const auto* from_decimal_type =
139
379
                            check_and_get_data_type<FromDataType>(from_type.get());
140
379
                    from_precision =
141
379
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
379
                    from_scale = from_decimal_type->get_scale();
143
379
                }
144
145
379
                UInt32 to_max_digits = 0;
146
379
                UInt32 to_precision = 0;
147
379
                UInt32 to_scale = 0;
148
149
379
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
379
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
379
                    const auto* to_decimal_type =
153
379
                            check_and_get_data_type<ToDataType>(to_type.get());
154
379
                    to_precision = to_decimal_type->get_precision();
155
379
                    ToDataType::check_type_precision(to_precision);
156
157
379
                    to_scale = to_decimal_type->get_scale();
158
379
                    ToDataType::check_type_scale(to_scale);
159
379
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
379
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
379
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
379
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
379
                if (to_scale > from_scale) {
170
71
                    multiply_may_overflow &=
171
71
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
71
                }
173
379
                return narrow_integral || multiply_may_overflow;
174
379
            }
175
0
            return false;
176
379
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
2.23k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.23k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.23k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2.23k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.23k
                using FromFieldType = typename FromDataType::FieldType;
133
2.23k
                using ToFieldType = typename ToDataType::FieldType;
134
2.23k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.23k
                UInt32 from_scale = 0;
136
137
2.23k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2.23k
                    const auto* from_decimal_type =
139
2.23k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2.23k
                    from_precision =
141
2.23k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2.23k
                    from_scale = from_decimal_type->get_scale();
143
2.23k
                }
144
145
2.23k
                UInt32 to_max_digits = 0;
146
2.23k
                UInt32 to_precision = 0;
147
2.23k
                UInt32 to_scale = 0;
148
149
2.23k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.23k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.23k
                    const auto* to_decimal_type =
153
2.23k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.23k
                    to_precision = to_decimal_type->get_precision();
155
2.23k
                    ToDataType::check_type_precision(to_precision);
156
157
2.23k
                    to_scale = to_decimal_type->get_scale();
158
2.23k
                    ToDataType::check_type_scale(to_scale);
159
2.23k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2.23k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.23k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.23k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.23k
                if (to_scale > from_scale) {
170
703
                    multiply_may_overflow &=
171
703
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
703
                }
173
2.23k
                return narrow_integral || multiply_may_overflow;
174
2.23k
            }
175
0
            return false;
176
2.23k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_35EEESE_EEEEbSI_
Line
Count
Source
123
948
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
948
            using Types2 = std::decay_t<decltype(types2)>;
125
948
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
948
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
948
                using FromFieldType = typename FromDataType::FieldType;
133
948
                using ToFieldType = typename ToDataType::FieldType;
134
948
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
948
                UInt32 from_scale = 0;
136
137
948
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
948
                    const auto* from_decimal_type =
139
948
                            check_and_get_data_type<FromDataType>(from_type.get());
140
948
                    from_precision =
141
948
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
948
                    from_scale = from_decimal_type->get_scale();
143
948
                }
144
145
948
                UInt32 to_max_digits = 0;
146
948
                UInt32 to_precision = 0;
147
948
                UInt32 to_scale = 0;
148
149
948
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
948
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
948
                    const auto* to_decimal_type =
153
948
                            check_and_get_data_type<ToDataType>(to_type.get());
154
948
                    to_precision = to_decimal_type->get_precision();
155
948
                    ToDataType::check_type_precision(to_precision);
156
157
948
                    to_scale = to_decimal_type->get_scale();
158
948
                    ToDataType::check_type_scale(to_scale);
159
948
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
948
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
948
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
948
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
948
                if (to_scale > from_scale) {
170
394
                    multiply_may_overflow &=
171
394
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
394
                }
173
948
                return narrow_integral || multiply_may_overflow;
174
948
            }
175
0
            return false;
176
948
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
164k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
164k
            using Types2 = std::decay_t<decltype(types2)>;
125
164k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
164k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
164k
                return false;
130
164k
            }
131
164k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
164k
                using FromFieldType = typename FromDataType::FieldType;
133
164k
                using ToFieldType = typename ToDataType::FieldType;
134
164k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
164k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
164k
                UInt32 to_max_digits = 0;
146
164k
                UInt32 to_precision = 0;
147
164k
                UInt32 to_scale = 0;
148
149
164k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
164k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
164k
                    const auto* to_decimal_type =
153
164k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
164k
                    to_precision = to_decimal_type->get_precision();
155
164k
                    ToDataType::check_type_precision(to_precision);
156
157
164k
                    to_scale = to_decimal_type->get_scale();
158
164k
                    ToDataType::check_type_scale(to_scale);
159
164k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
164k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
164k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
164k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
164k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
164k
                return narrow_integral || multiply_may_overflow;
174
164k
            }
175
0
            return false;
176
164k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_2EEESE_EEEEbSI_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
7
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
7
                using FromFieldType = typename FromDataType::FieldType;
133
7
                using ToFieldType = typename ToDataType::FieldType;
134
7
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
7
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
7
                UInt32 to_max_digits = 0;
146
7
                UInt32 to_precision = 0;
147
7
                UInt32 to_scale = 0;
148
149
7
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
7
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
7
                    const auto* to_decimal_type =
153
7
                            check_and_get_data_type<ToDataType>(to_type.get());
154
7
                    to_precision = to_decimal_type->get_precision();
155
7
                    ToDataType::check_type_precision(to_precision);
156
157
7
                    to_scale = to_decimal_type->get_scale();
158
7
                    ToDataType::check_type_scale(to_scale);
159
7
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
7
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
7
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
7
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
7
                if (to_scale > from_scale) {
170
6
                    multiply_may_overflow &=
171
6
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
6
                }
173
7
                return narrow_integral || multiply_may_overflow;
174
7
            }
175
0
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_3EEESE_EEEEbSI_
Line
Count
Source
123
160
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
160
            using Types2 = std::decay_t<decltype(types2)>;
125
160
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
160
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
160
                using FromFieldType = typename FromDataType::FieldType;
133
160
                using ToFieldType = typename ToDataType::FieldType;
134
160
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
160
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
160
                UInt32 to_max_digits = 0;
146
160
                UInt32 to_precision = 0;
147
160
                UInt32 to_scale = 0;
148
149
160
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
160
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
160
                    const auto* to_decimal_type =
153
160
                            check_and_get_data_type<ToDataType>(to_type.get());
154
160
                    to_precision = to_decimal_type->get_precision();
155
160
                    ToDataType::check_type_precision(to_precision);
156
157
160
                    to_scale = to_decimal_type->get_scale();
158
160
                    ToDataType::check_type_scale(to_scale);
159
160
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
160
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
160
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
160
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
160
                if (to_scale > from_scale) {
170
109
                    multiply_may_overflow &=
171
109
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
109
                }
173
160
                return narrow_integral || multiply_may_overflow;
174
160
            }
175
0
            return false;
176
160
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_4EEESE_EEEEbSI_
Line
Count
Source
123
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
158
            using Types2 = std::decay_t<decltype(types2)>;
125
158
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
158
                using FromFieldType = typename FromDataType::FieldType;
133
158
                using ToFieldType = typename ToDataType::FieldType;
134
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
158
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
158
                UInt32 to_max_digits = 0;
146
158
                UInt32 to_precision = 0;
147
158
                UInt32 to_scale = 0;
148
149
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
158
                    const auto* to_decimal_type =
153
158
                            check_and_get_data_type<ToDataType>(to_type.get());
154
158
                    to_precision = to_decimal_type->get_precision();
155
158
                    ToDataType::check_type_precision(to_precision);
156
157
158
                    to_scale = to_decimal_type->get_scale();
158
158
                    ToDataType::check_type_scale(to_scale);
159
158
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
158
                if (to_scale > from_scale) {
170
107
                    multiply_may_overflow &=
171
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
107
                }
173
158
                return narrow_integral || multiply_may_overflow;
174
158
            }
175
0
            return false;
176
158
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_5EEESE_EEEEbSI_
Line
Count
Source
123
176
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
176
            using Types2 = std::decay_t<decltype(types2)>;
125
176
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
176
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
176
                using FromFieldType = typename FromDataType::FieldType;
133
176
                using ToFieldType = typename ToDataType::FieldType;
134
176
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
176
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
176
                UInt32 to_max_digits = 0;
146
176
                UInt32 to_precision = 0;
147
176
                UInt32 to_scale = 0;
148
149
176
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
176
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
176
                    const auto* to_decimal_type =
153
176
                            check_and_get_data_type<ToDataType>(to_type.get());
154
176
                    to_precision = to_decimal_type->get_precision();
155
176
                    ToDataType::check_type_precision(to_precision);
156
157
176
                    to_scale = to_decimal_type->get_scale();
158
176
                    ToDataType::check_type_scale(to_scale);
159
176
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
176
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
176
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
176
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
176
                if (to_scale > from_scale) {
170
120
                    multiply_may_overflow &=
171
120
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
120
                }
173
176
                return narrow_integral || multiply_may_overflow;
174
176
            }
175
0
            return false;
176
176
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_6EEESE_EEEEbSI_
Line
Count
Source
123
158
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
158
            using Types2 = std::decay_t<decltype(types2)>;
125
158
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
158
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
158
                using FromFieldType = typename FromDataType::FieldType;
133
158
                using ToFieldType = typename ToDataType::FieldType;
134
158
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
158
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
158
                UInt32 to_max_digits = 0;
146
158
                UInt32 to_precision = 0;
147
158
                UInt32 to_scale = 0;
148
149
158
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
158
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
158
                    const auto* to_decimal_type =
153
158
                            check_and_get_data_type<ToDataType>(to_type.get());
154
158
                    to_precision = to_decimal_type->get_precision();
155
158
                    ToDataType::check_type_precision(to_precision);
156
157
158
                    to_scale = to_decimal_type->get_scale();
158
158
                    ToDataType::check_type_scale(to_scale);
159
158
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
158
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
158
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
158
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
158
                if (to_scale > from_scale) {
170
107
                    multiply_may_overflow &=
171
107
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
107
                }
173
158
                return narrow_integral || multiply_may_overflow;
174
158
            }
175
0
            return false;
176
158
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_7EEESE_EEEEbSI_
Line
Count
Source
123
232
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
232
            using Types2 = std::decay_t<decltype(types2)>;
125
232
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
232
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
232
                using FromFieldType = typename FromDataType::FieldType;
133
232
                using ToFieldType = typename ToDataType::FieldType;
134
232
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
232
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
232
                UInt32 to_max_digits = 0;
146
232
                UInt32 to_precision = 0;
147
232
                UInt32 to_scale = 0;
148
149
232
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
232
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
232
                    const auto* to_decimal_type =
153
232
                            check_and_get_data_type<ToDataType>(to_type.get());
154
232
                    to_precision = to_decimal_type->get_precision();
155
232
                    ToDataType::check_type_precision(to_precision);
156
157
232
                    to_scale = to_decimal_type->get_scale();
158
232
                    ToDataType::check_type_scale(to_scale);
159
232
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
232
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
232
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
232
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
232
                if (to_scale > from_scale) {
170
170
                    multiply_may_overflow &=
171
170
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
170
                }
173
232
                return narrow_integral || multiply_may_overflow;
174
232
            }
175
0
            return false;
176
232
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_8EEESE_EEEEbSI_
Line
Count
Source
123
224
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
224
            using Types2 = std::decay_t<decltype(types2)>;
125
224
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
224
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
224
                using FromFieldType = typename FromDataType::FieldType;
133
224
                using ToFieldType = typename ToDataType::FieldType;
134
224
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
224
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
224
                UInt32 to_max_digits = 0;
146
224
                UInt32 to_precision = 0;
147
224
                UInt32 to_scale = 0;
148
149
224
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
224
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
224
                    const auto* to_decimal_type =
153
224
                            check_and_get_data_type<ToDataType>(to_type.get());
154
224
                    to_precision = to_decimal_type->get_precision();
155
224
                    ToDataType::check_type_precision(to_precision);
156
157
224
                    to_scale = to_decimal_type->get_scale();
158
224
                    ToDataType::check_type_scale(to_scale);
159
224
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
224
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
224
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
224
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
224
                if (to_scale > from_scale) {
170
126
                    multiply_may_overflow &=
171
126
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
126
                }
173
224
                return narrow_integral || multiply_may_overflow;
174
224
            }
175
0
            return false;
176
224
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeNumberILSD_9EEESE_EEEEbSI_
Line
Count
Source
123
318
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
318
            using Types2 = std::decay_t<decltype(types2)>;
125
318
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
318
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
318
                using FromFieldType = typename FromDataType::FieldType;
133
318
                using ToFieldType = typename ToDataType::FieldType;
134
318
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
318
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
318
                UInt32 to_max_digits = 0;
146
318
                UInt32 to_precision = 0;
147
318
                UInt32 to_scale = 0;
148
149
318
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
318
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
318
                    const auto* to_decimal_type =
153
318
                            check_and_get_data_type<ToDataType>(to_type.get());
154
318
                    to_precision = to_decimal_type->get_precision();
155
318
                    ToDataType::check_type_precision(to_precision);
156
157
318
                    to_scale = to_decimal_type->get_scale();
158
318
                    ToDataType::check_type_scale(to_scale);
159
318
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
318
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
318
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
318
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
318
                if (to_scale > from_scale) {
170
208
                    multiply_may_overflow &=
171
208
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
208
                }
173
318
                return narrow_integral || multiply_may_overflow;
174
318
            }
175
0
            return false;
176
318
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_28EEESE_EEEEbSI_
Line
Count
Source
123
567
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
567
            using Types2 = std::decay_t<decltype(types2)>;
125
567
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
567
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
567
                using FromFieldType = typename FromDataType::FieldType;
133
567
                using ToFieldType = typename ToDataType::FieldType;
134
567
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
567
                UInt32 from_scale = 0;
136
137
567
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
567
                    const auto* from_decimal_type =
139
567
                            check_and_get_data_type<FromDataType>(from_type.get());
140
567
                    from_precision =
141
567
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
567
                    from_scale = from_decimal_type->get_scale();
143
567
                }
144
145
567
                UInt32 to_max_digits = 0;
146
567
                UInt32 to_precision = 0;
147
567
                UInt32 to_scale = 0;
148
149
567
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
567
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
567
                    const auto* to_decimal_type =
153
567
                            check_and_get_data_type<ToDataType>(to_type.get());
154
567
                    to_precision = to_decimal_type->get_precision();
155
567
                    ToDataType::check_type_precision(to_precision);
156
157
567
                    to_scale = to_decimal_type->get_scale();
158
567
                    ToDataType::check_type_scale(to_scale);
159
567
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
567
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
567
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
567
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
567
                if (to_scale > from_scale) {
170
499
                    multiply_may_overflow &=
171
499
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
499
                }
173
567
                return narrow_integral || multiply_may_overflow;
174
567
            }
175
0
            return false;
176
567
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_29EEESE_EEEEbSI_
Line
Count
Source
123
919
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
919
            using Types2 = std::decay_t<decltype(types2)>;
125
919
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
919
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
919
                using FromFieldType = typename FromDataType::FieldType;
133
919
                using ToFieldType = typename ToDataType::FieldType;
134
919
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
919
                UInt32 from_scale = 0;
136
137
919
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
919
                    const auto* from_decimal_type =
139
919
                            check_and_get_data_type<FromDataType>(from_type.get());
140
919
                    from_precision =
141
919
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
919
                    from_scale = from_decimal_type->get_scale();
143
919
                }
144
145
919
                UInt32 to_max_digits = 0;
146
919
                UInt32 to_precision = 0;
147
919
                UInt32 to_scale = 0;
148
149
919
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
919
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
919
                    const auto* to_decimal_type =
153
919
                            check_and_get_data_type<ToDataType>(to_type.get());
154
919
                    to_precision = to_decimal_type->get_precision();
155
919
                    ToDataType::check_type_precision(to_precision);
156
157
919
                    to_scale = to_decimal_type->get_scale();
158
919
                    ToDataType::check_type_scale(to_scale);
159
919
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
919
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
919
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
919
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
919
                if (to_scale > from_scale) {
170
792
                    multiply_may_overflow &=
171
792
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
792
                }
173
919
                return narrow_integral || multiply_may_overflow;
174
919
            }
175
0
            return false;
176
919
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INSC_ILSD_20EEESE_EEEEbSI_
Line
Count
Source
123
148
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
148
            using Types2 = std::decay_t<decltype(types2)>;
125
148
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
148
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
148
                using FromFieldType = typename FromDataType::FieldType;
133
148
                using ToFieldType = typename ToDataType::FieldType;
134
148
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
148
                UInt32 from_scale = 0;
136
137
148
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
148
                    const auto* from_decimal_type =
139
148
                            check_and_get_data_type<FromDataType>(from_type.get());
140
148
                    from_precision =
141
148
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
148
                    from_scale = from_decimal_type->get_scale();
143
148
                }
144
145
148
                UInt32 to_max_digits = 0;
146
148
                UInt32 to_precision = 0;
147
148
                UInt32 to_scale = 0;
148
149
148
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
148
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
148
                    const auto* to_decimal_type =
153
148
                            check_and_get_data_type<ToDataType>(to_type.get());
154
148
                    to_precision = to_decimal_type->get_precision();
155
148
                    ToDataType::check_type_precision(to_precision);
156
157
148
                    to_scale = to_decimal_type->get_scale();
158
148
                    ToDataType::check_type_scale(to_scale);
159
148
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
148
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
148
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
148
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
148
                if (to_scale > from_scale) {
170
84
                    multiply_may_overflow &=
171
84
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
84
                }
173
148
                return narrow_integral || multiply_may_overflow;
174
148
            }
175
0
            return false;
176
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
123
1.19k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1.19k
            using Types2 = std::decay_t<decltype(types2)>;
125
1.19k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1.19k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1.19k
                using FromFieldType = typename FromDataType::FieldType;
133
1.19k
                using ToFieldType = typename ToDataType::FieldType;
134
1.19k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1.19k
                UInt32 from_scale = 0;
136
137
1.19k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1.19k
                    const auto* from_decimal_type =
139
1.19k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1.19k
                    from_precision =
141
1.19k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1.19k
                    from_scale = from_decimal_type->get_scale();
143
1.19k
                }
144
145
1.19k
                UInt32 to_max_digits = 0;
146
1.19k
                UInt32 to_precision = 0;
147
1.19k
                UInt32 to_scale = 0;
148
149
1.19k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
1.19k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
1.19k
                    const auto* to_decimal_type =
153
1.19k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
1.19k
                    to_precision = to_decimal_type->get_precision();
155
1.19k
                    ToDataType::check_type_precision(to_precision);
156
157
1.19k
                    to_scale = to_decimal_type->get_scale();
158
1.19k
                    ToDataType::check_type_scale(to_scale);
159
1.19k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
1.19k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1.19k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1.19k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1.19k
                if (to_scale > from_scale) {
170
735
                    multiply_may_overflow &=
171
735
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
735
                }
173
1.19k
                return narrow_integral || multiply_may_overflow;
174
1.19k
            }
175
0
            return false;
176
1.19k
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_ISE_SE_EEEEbSI_
Line
Count
Source
123
919
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
919
            using Types2 = std::decay_t<decltype(types2)>;
125
919
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
919
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
919
                using FromFieldType = typename FromDataType::FieldType;
133
919
                using ToFieldType = typename ToDataType::FieldType;
134
919
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
919
                UInt32 from_scale = 0;
136
137
919
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
919
                    const auto* from_decimal_type =
139
919
                            check_and_get_data_type<FromDataType>(from_type.get());
140
919
                    from_precision =
141
919
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
919
                    from_scale = from_decimal_type->get_scale();
143
919
                }
144
145
919
                UInt32 to_max_digits = 0;
146
919
                UInt32 to_precision = 0;
147
919
                UInt32 to_scale = 0;
148
149
919
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
919
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
919
                    const auto* to_decimal_type =
153
919
                            check_and_get_data_type<ToDataType>(to_type.get());
154
919
                    to_precision = to_decimal_type->get_precision();
155
919
                    ToDataType::check_type_precision(to_precision);
156
157
919
                    to_scale = to_decimal_type->get_scale();
158
919
                    ToDataType::check_type_scale(to_scale);
159
919
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
919
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
919
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
919
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
919
                if (to_scale > from_scale) {
170
453
                    multiply_may_overflow &=
171
453
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
453
                }
173
919
                return narrow_integral || multiply_may_overflow;
174
919
            }
175
0
            return false;
176
919
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeDateESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeDateV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_18DataTypeDateTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_16DataTypeDateTimeESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeTimeV2ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_19DataTypeTimeStampTzESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv4ESE_EEEEbSI_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_12DataTypeIPv6ESE_EEEEbSI_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_ENKUlSI_E_clINSB_INS_14DataTypeStringESE_EEEEbSI_
Line
Count
Source
123
5.67k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.67k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.67k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
5.67k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
5.67k
                return false;
130
5.67k
            }
131
5.67k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.67k
                using FromFieldType = typename FromDataType::FieldType;
133
5.67k
                using ToFieldType = typename ToDataType::FieldType;
134
5.67k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.67k
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
5.67k
                UInt32 to_max_digits = 0;
146
5.67k
                UInt32 to_precision = 0;
147
5.67k
                UInt32 to_scale = 0;
148
149
5.67k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.67k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.67k
                    const auto* to_decimal_type =
153
5.67k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.67k
                    to_precision = to_decimal_type->get_precision();
155
5.67k
                    ToDataType::check_type_precision(to_precision);
156
157
5.67k
                    to_scale = to_decimal_type->get_scale();
158
5.67k
                    ToDataType::check_type_scale(to_scale);
159
5.67k
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5.67k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.67k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.67k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.67k
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5.67k
                return narrow_integral || multiply_may_overflow;
174
5.67k
            }
175
0
            return false;
176
5.67k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1
            return false;
176
1
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3
            using Types2 = std::decay_t<decltype(types2)>;
125
3
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
3
            return false;
176
3
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
28
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
28
            using Types2 = std::decay_t<decltype(types2)>;
125
28
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
28
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
28
                return false;
130
28
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
28
            return false;
176
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
123
10
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10
            using Types2 = std::decay_t<decltype(types2)>;
125
10
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
10
            return false;
176
10
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Line
Count
Source
123
445
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
445
            using Types2 = std::decay_t<decltype(types2)>;
125
445
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
445
            return false;
176
445
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Line
Count
Source
123
220
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
220
            using Types2 = std::decay_t<decltype(types2)>;
125
220
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
220
            return false;
176
220
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
1
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
2
            return false;
176
2
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
160k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
160k
            using Types2 = std::decay_t<decltype(types2)>;
125
160k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
160k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
160k
                return false;
130
160k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
160k
            return false;
176
160k
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Line
Count
Source
123
13
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
13
            using Types2 = std::decay_t<decltype(types2)>;
125
13
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
13
            return false;
176
13
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
33
            using Types2 = std::decay_t<decltype(types2)>;
125
33
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
33
            return false;
176
33
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
12
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Line
Count
Source
123
12
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
12
            using Types2 = std::decay_t<decltype(types2)>;
125
12
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
12
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
12
                using FromFieldType = typename FromDataType::FieldType;
133
12
                using ToFieldType = typename ToDataType::FieldType;
134
12
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
12
                UInt32 from_scale = 0;
136
137
12
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
12
                    const auto* from_decimal_type =
139
12
                            check_and_get_data_type<FromDataType>(from_type.get());
140
12
                    from_precision =
141
12
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
12
                    from_scale = from_decimal_type->get_scale();
143
12
                }
144
145
12
                UInt32 to_max_digits = 0;
146
12
                UInt32 to_precision = 0;
147
12
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
12
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
12
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
12
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
12
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
12
                return narrow_integral || multiply_may_overflow;
174
12
            }
175
0
            return false;
176
12
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
4
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
4
            using Types2 = std::decay_t<decltype(types2)>;
125
4
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
4
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
4
                using FromFieldType = typename FromDataType::FieldType;
133
4
                using ToFieldType = typename ToDataType::FieldType;
134
4
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
4
                UInt32 from_scale = 0;
136
137
4
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
4
                    const auto* from_decimal_type =
139
4
                            check_and_get_data_type<FromDataType>(from_type.get());
140
4
                    from_precision =
141
4
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
4
                    from_scale = from_decimal_type->get_scale();
143
4
                }
144
145
4
                UInt32 to_max_digits = 0;
146
4
                UInt32 to_precision = 0;
147
4
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
4
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
4
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
4
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
4
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
4
                return narrow_integral || multiply_may_overflow;
174
4
            }
175
0
            return false;
176
4
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Line
Count
Source
123
5
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5
            using Types2 = std::decay_t<decltype(types2)>;
125
5
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
5
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5
                using FromFieldType = typename FromDataType::FieldType;
133
5
                using ToFieldType = typename ToDataType::FieldType;
134
5
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5
                UInt32 from_scale = 0;
136
137
5
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5
                    const auto* from_decimal_type =
139
5
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5
                    from_precision =
141
5
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5
                    from_scale = from_decimal_type->get_scale();
143
5
                }
144
145
5
                UInt32 to_max_digits = 0;
146
5
                UInt32 to_precision = 0;
147
5
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
5
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
5
                return narrow_integral || multiply_may_overflow;
174
5
            }
175
0
            return false;
176
5
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
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
123
376
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
376
            using Types2 = std::decay_t<decltype(types2)>;
125
376
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
376
            return false;
176
376
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Line
Count
Source
123
390
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
390
            using Types2 = std::decay_t<decltype(types2)>;
125
390
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
390
            return false;
176
390
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Line
Count
Source
123
370
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
370
            using Types2 = std::decay_t<decltype(types2)>;
125
370
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
370
            return false;
176
370
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Line
Count
Source
123
6
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
6
            using Types2 = std::decay_t<decltype(types2)>;
125
6
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
6
            return false;
176
6
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Line
Count
Source
123
71
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
71
            using Types2 = std::decay_t<decltype(types2)>;
125
71
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
71
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
71
                return false;
130
71
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
71
            return false;
176
71
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
153k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
153k
            using Types2 = std::decay_t<decltype(types2)>;
125
153k
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
153k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
153k
                return false;
130
153k
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
153k
            return false;
176
153k
        });
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
123
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
26
            using Types2 = std::decay_t<decltype(types2)>;
125
26
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
26
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
26
                return false;
130
26
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
26
            return false;
176
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
123
30
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
30
            using Types2 = std::decay_t<decltype(types2)>;
125
30
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
30
            return false;
176
30
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Line
Count
Source
123
21
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21
            using Types2 = std::decay_t<decltype(types2)>;
125
21
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
21
            return false;
176
21
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Line
Count
Source
123
33
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
33
            using Types2 = std::decay_t<decltype(types2)>;
125
33
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
33
            return false;
176
33
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Line
Count
Source
123
9
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9
            using Types2 = std::decay_t<decltype(types2)>;
125
9
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
9
            return false;
176
9
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Line
Count
Source
123
3
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
3
            using Types2 = std::decay_t<decltype(types2)>;
125
3
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
3
            return false;
176
3
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Line
Count
Source
123
7
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
7
            using Types2 = std::decay_t<decltype(types2)>;
125
7
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
7
            return false;
176
7
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Line
Count
Source
123
18
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
18
            using Types2 = std::decay_t<decltype(types2)>;
125
18
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
18
            return false;
176
18
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Line
Count
Source
123
2
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2
            using Types2 = std::decay_t<decltype(types2)>;
125
2
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
2
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2
                using FromFieldType = typename FromDataType::FieldType;
133
2
                using ToFieldType = typename ToDataType::FieldType;
134
2
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2
                UInt32 from_scale = 0;
136
137
2
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2
                    const auto* from_decimal_type =
139
2
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2
                    from_precision =
141
2
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2
                    from_scale = from_decimal_type->get_scale();
143
2
                }
144
145
2
                UInt32 to_max_digits = 0;
146
2
                UInt32 to_precision = 0;
147
2
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
2
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2
                    to_precision = to_max_digits;
163
2
                }
164
165
2
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
2
                return narrow_integral || multiply_may_overflow;
174
2
            }
175
0
            return false;
176
2
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1
                using FromFieldType = typename FromDataType::FieldType;
133
1
                using ToFieldType = typename ToDataType::FieldType;
134
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1
                UInt32 from_scale = 0;
136
137
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1
                    const auto* from_decimal_type =
139
1
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1
                    from_precision =
141
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1
                    from_scale = from_decimal_type->get_scale();
143
1
                }
144
145
1
                UInt32 to_max_digits = 0;
146
1
                UInt32 to_precision = 0;
147
1
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
1
                    to_precision = to_max_digits;
163
1
                }
164
165
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
1
                return narrow_integral || multiply_may_overflow;
174
1
            }
175
0
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Line
Count
Source
123
1
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
1
            using Types2 = std::decay_t<decltype(types2)>;
125
1
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
1
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
1
                using FromFieldType = typename FromDataType::FieldType;
133
1
                using ToFieldType = typename ToDataType::FieldType;
134
1
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
1
                UInt32 from_scale = 0;
136
137
1
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
1
                    const auto* from_decimal_type =
139
1
                            check_and_get_data_type<FromDataType>(from_type.get());
140
1
                    from_precision =
141
1
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
1
                    from_scale = from_decimal_type->get_scale();
143
1
                }
144
145
1
                UInt32 to_max_digits = 0;
146
1
                UInt32 to_precision = 0;
147
1
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
1
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
1
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
1
                    to_precision = to_max_digits;
163
1
                }
164
165
1
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
1
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
1
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
1
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
1
                return narrow_integral || multiply_may_overflow;
174
1
            }
175
0
            return false;
176
1
        });
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Line
Count
Source
123
11
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
11
            using Types2 = std::decay_t<decltype(types2)>;
125
11
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
11
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
11
                using FromFieldType = typename FromDataType::FieldType;
133
11
                using ToFieldType = typename ToDataType::FieldType;
134
11
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
11
                UInt32 from_scale = 0;
136
137
11
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
11
                    const auto* from_decimal_type =
139
11
                            check_and_get_data_type<FromDataType>(from_type.get());
140
11
                    from_precision =
141
11
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
11
                    from_scale = from_decimal_type->get_scale();
143
11
                }
144
145
11
                UInt32 to_max_digits = 0;
146
11
                UInt32 to_precision = 0;
147
11
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
11
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
11
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
11
                    to_precision = to_max_digits;
163
11
                }
164
165
11
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
11
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
11
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
11
                if (to_scale > from_scale) {
170
0
                    multiply_may_overflow &=
171
0
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
0
                }
173
11
                return narrow_integral || multiply_may_overflow;
174
11
            }
175
0
            return false;
176
11
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Line
Count
Source
123
8
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
8
            using Types2 = std::decay_t<decltype(types2)>;
125
8
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
8
            return false;
176
8
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Line
Count
Source
123
20
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
20
            using Types2 = std::decay_t<decltype(types2)>;
125
20
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
                return false;
130
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
20
            return false;
176
20
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Line
Count
Source
123
301
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
301
            using Types2 = std::decay_t<decltype(types2)>;
125
301
            using FromDataType = typename Types2::LeftType;
126
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
301
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
301
                return false;
130
301
            }
131
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
                using FromFieldType = typename FromDataType::FieldType;
133
                using ToFieldType = typename ToDataType::FieldType;
134
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
                UInt32 from_scale = 0;
136
137
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
                    const auto* from_decimal_type =
139
                            check_and_get_data_type<FromDataType>(from_type.get());
140
                    from_precision =
141
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
                    from_scale = from_decimal_type->get_scale();
143
                }
144
145
                UInt32 to_max_digits = 0;
146
                UInt32 to_precision = 0;
147
                UInt32 to_scale = 0;
148
149
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
                    const auto* to_decimal_type =
153
                            check_and_get_data_type<ToDataType>(to_type.get());
154
                    to_precision = to_decimal_type->get_precision();
155
                    ToDataType::check_type_precision(to_precision);
156
157
                    to_scale = to_decimal_type->get_scale();
158
                    ToDataType::check_type_scale(to_scale);
159
                }
160
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
                    to_precision = to_max_digits;
163
                }
164
165
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
                if (to_scale > from_scale) {
170
                    multiply_may_overflow &=
171
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
                }
173
                return narrow_integral || multiply_may_overflow;
174
            }
175
301
            return false;
176
301
        });
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeStringESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE2EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE3EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE4EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE5EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE6EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE7EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE8EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeNumberILNS_13PrimitiveTypeE9EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeDateESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeDateV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_18DataTypeDateTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_16DataTypeDateTimeESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_14DataTypeTimeV2ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_19DataTypeTimeStampTzESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv4ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_INS_12DataTypeIPv6ESC_EEEEbSG_
Unexecuted instantiation: function_cast.cpp:_ZZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_ENKUlSG_E_clINSB_ISC_SC_EEEEbSG_
177
1.22M
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEvEEEEbRKT_
Line
Count
Source
113
2.46k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
2.46k
        using Types = std::decay_t<decltype(types)>;
115
2.46k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
2.46k
        return call_on_index_and_data_type<
123
2.46k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
2.46k
            using Types2 = std::decay_t<decltype(types2)>;
125
2.46k
            using FromDataType = typename Types2::LeftType;
126
2.46k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
2.46k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
2.46k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
2.46k
                return false;
130
2.46k
            }
131
2.46k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
2.46k
                using FromFieldType = typename FromDataType::FieldType;
133
2.46k
                using ToFieldType = typename ToDataType::FieldType;
134
2.46k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
2.46k
                UInt32 from_scale = 0;
136
137
2.46k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
2.46k
                    const auto* from_decimal_type =
139
2.46k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
2.46k
                    from_precision =
141
2.46k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
2.46k
                    from_scale = from_decimal_type->get_scale();
143
2.46k
                }
144
145
2.46k
                UInt32 to_max_digits = 0;
146
2.46k
                UInt32 to_precision = 0;
147
2.46k
                UInt32 to_scale = 0;
148
149
2.46k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
2.46k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
2.46k
                    const auto* to_decimal_type =
153
2.46k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
2.46k
                    to_precision = to_decimal_type->get_precision();
155
2.46k
                    ToDataType::check_type_precision(to_precision);
156
157
2.46k
                    to_scale = to_decimal_type->get_scale();
158
2.46k
                    ToDataType::check_type_scale(to_scale);
159
2.46k
                }
160
2.46k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
2.46k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
2.46k
                    to_precision = to_max_digits;
163
2.46k
                }
164
165
2.46k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
2.46k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
2.46k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
2.46k
                if (to_scale > from_scale) {
170
2.46k
                    multiply_may_overflow &=
171
2.46k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
2.46k
                }
173
2.46k
                return narrow_integral || multiply_may_overflow;
174
2.46k
            }
175
2.46k
            return false;
176
2.46k
        });
177
2.46k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE3EEEvEEEEbRKT_
Line
Count
Source
113
6.66k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
6.66k
        using Types = std::decay_t<decltype(types)>;
115
6.66k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
6.66k
        return call_on_index_and_data_type<
123
6.66k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
6.66k
            using Types2 = std::decay_t<decltype(types2)>;
125
6.66k
            using FromDataType = typename Types2::LeftType;
126
6.66k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
6.66k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
6.66k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
6.66k
                return false;
130
6.66k
            }
131
6.66k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
6.66k
                using FromFieldType = typename FromDataType::FieldType;
133
6.66k
                using ToFieldType = typename ToDataType::FieldType;
134
6.66k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
6.66k
                UInt32 from_scale = 0;
136
137
6.66k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
6.66k
                    const auto* from_decimal_type =
139
6.66k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
6.66k
                    from_precision =
141
6.66k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
6.66k
                    from_scale = from_decimal_type->get_scale();
143
6.66k
                }
144
145
6.66k
                UInt32 to_max_digits = 0;
146
6.66k
                UInt32 to_precision = 0;
147
6.66k
                UInt32 to_scale = 0;
148
149
6.66k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
6.66k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
6.66k
                    const auto* to_decimal_type =
153
6.66k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
6.66k
                    to_precision = to_decimal_type->get_precision();
155
6.66k
                    ToDataType::check_type_precision(to_precision);
156
157
6.66k
                    to_scale = to_decimal_type->get_scale();
158
6.66k
                    ToDataType::check_type_scale(to_scale);
159
6.66k
                }
160
6.66k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
6.66k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
6.66k
                    to_precision = to_max_digits;
163
6.66k
                }
164
165
6.66k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
6.66k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
6.66k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
6.66k
                if (to_scale > from_scale) {
170
6.66k
                    multiply_may_overflow &=
171
6.66k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
6.66k
                }
173
6.66k
                return narrow_integral || multiply_may_overflow;
174
6.66k
            }
175
6.66k
            return false;
176
6.66k
        });
177
6.66k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE4EEEvEEEEbRKT_
Line
Count
Source
113
5.48k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
5.48k
        using Types = std::decay_t<decltype(types)>;
115
5.48k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
5.48k
        return call_on_index_and_data_type<
123
5.48k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
5.48k
            using Types2 = std::decay_t<decltype(types2)>;
125
5.48k
            using FromDataType = typename Types2::LeftType;
126
5.48k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
5.48k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
5.48k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
5.48k
                return false;
130
5.48k
            }
131
5.48k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
5.48k
                using FromFieldType = typename FromDataType::FieldType;
133
5.48k
                using ToFieldType = typename ToDataType::FieldType;
134
5.48k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
5.48k
                UInt32 from_scale = 0;
136
137
5.48k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
5.48k
                    const auto* from_decimal_type =
139
5.48k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
5.48k
                    from_precision =
141
5.48k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
5.48k
                    from_scale = from_decimal_type->get_scale();
143
5.48k
                }
144
145
5.48k
                UInt32 to_max_digits = 0;
146
5.48k
                UInt32 to_precision = 0;
147
5.48k
                UInt32 to_scale = 0;
148
149
5.48k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
5.48k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
5.48k
                    const auto* to_decimal_type =
153
5.48k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
5.48k
                    to_precision = to_decimal_type->get_precision();
155
5.48k
                    ToDataType::check_type_precision(to_precision);
156
157
5.48k
                    to_scale = to_decimal_type->get_scale();
158
5.48k
                    ToDataType::check_type_scale(to_scale);
159
5.48k
                }
160
5.48k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
5.48k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
5.48k
                    to_precision = to_max_digits;
163
5.48k
                }
164
165
5.48k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
5.48k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
5.48k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
5.48k
                if (to_scale > from_scale) {
170
5.48k
                    multiply_may_overflow &=
171
5.48k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
5.48k
                }
173
5.48k
                return narrow_integral || multiply_may_overflow;
174
5.48k
            }
175
5.48k
            return false;
176
5.48k
        });
177
5.48k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE5EEEvEEEEbRKT_
Line
Count
Source
113
166k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
166k
        using Types = std::decay_t<decltype(types)>;
115
166k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
166k
        return call_on_index_and_data_type<
123
166k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
166k
            using Types2 = std::decay_t<decltype(types2)>;
125
166k
            using FromDataType = typename Types2::LeftType;
126
166k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
166k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
166k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
166k
                return false;
130
166k
            }
131
166k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
166k
                using FromFieldType = typename FromDataType::FieldType;
133
166k
                using ToFieldType = typename ToDataType::FieldType;
134
166k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
166k
                UInt32 from_scale = 0;
136
137
166k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
166k
                    const auto* from_decimal_type =
139
166k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
166k
                    from_precision =
141
166k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
166k
                    from_scale = from_decimal_type->get_scale();
143
166k
                }
144
145
166k
                UInt32 to_max_digits = 0;
146
166k
                UInt32 to_precision = 0;
147
166k
                UInt32 to_scale = 0;
148
149
166k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
166k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
166k
                    const auto* to_decimal_type =
153
166k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
166k
                    to_precision = to_decimal_type->get_precision();
155
166k
                    ToDataType::check_type_precision(to_precision);
156
157
166k
                    to_scale = to_decimal_type->get_scale();
158
166k
                    ToDataType::check_type_scale(to_scale);
159
166k
                }
160
166k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
166k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
166k
                    to_precision = to_max_digits;
163
166k
                }
164
165
166k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
166k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
166k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
166k
                if (to_scale > from_scale) {
170
166k
                    multiply_may_overflow &=
171
166k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
166k
                }
173
166k
                return narrow_integral || multiply_may_overflow;
174
166k
            }
175
166k
            return false;
176
166k
        });
177
166k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE6EEEvEEEEbRKT_
Line
Count
Source
113
45.2k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
45.2k
        using Types = std::decay_t<decltype(types)>;
115
45.2k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
45.2k
        return call_on_index_and_data_type<
123
45.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
45.2k
            using Types2 = std::decay_t<decltype(types2)>;
125
45.2k
            using FromDataType = typename Types2::LeftType;
126
45.2k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
45.2k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
45.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
45.2k
                return false;
130
45.2k
            }
131
45.2k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
45.2k
                using FromFieldType = typename FromDataType::FieldType;
133
45.2k
                using ToFieldType = typename ToDataType::FieldType;
134
45.2k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
45.2k
                UInt32 from_scale = 0;
136
137
45.2k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
45.2k
                    const auto* from_decimal_type =
139
45.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
45.2k
                    from_precision =
141
45.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
45.2k
                    from_scale = from_decimal_type->get_scale();
143
45.2k
                }
144
145
45.2k
                UInt32 to_max_digits = 0;
146
45.2k
                UInt32 to_precision = 0;
147
45.2k
                UInt32 to_scale = 0;
148
149
45.2k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
45.2k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
45.2k
                    const auto* to_decimal_type =
153
45.2k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
45.2k
                    to_precision = to_decimal_type->get_precision();
155
45.2k
                    ToDataType::check_type_precision(to_precision);
156
157
45.2k
                    to_scale = to_decimal_type->get_scale();
158
45.2k
                    ToDataType::check_type_scale(to_scale);
159
45.2k
                }
160
45.2k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
45.2k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
45.2k
                    to_precision = to_max_digits;
163
45.2k
                }
164
165
45.2k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
45.2k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
45.2k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
45.2k
                if (to_scale > from_scale) {
170
45.2k
                    multiply_may_overflow &=
171
45.2k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
45.2k
                }
173
45.2k
                return narrow_integral || multiply_may_overflow;
174
45.2k
            }
175
45.2k
            return false;
176
45.2k
        });
177
45.2k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE7EEEvEEEEbRKT_
Line
Count
Source
113
70.2k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
70.2k
        using Types = std::decay_t<decltype(types)>;
115
70.2k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
70.2k
        return call_on_index_and_data_type<
123
70.2k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
70.2k
            using Types2 = std::decay_t<decltype(types2)>;
125
70.2k
            using FromDataType = typename Types2::LeftType;
126
70.2k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
70.2k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
70.2k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
70.2k
                return false;
130
70.2k
            }
131
70.2k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
70.2k
                using FromFieldType = typename FromDataType::FieldType;
133
70.2k
                using ToFieldType = typename ToDataType::FieldType;
134
70.2k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
70.2k
                UInt32 from_scale = 0;
136
137
70.2k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
70.2k
                    const auto* from_decimal_type =
139
70.2k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
70.2k
                    from_precision =
141
70.2k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
70.2k
                    from_scale = from_decimal_type->get_scale();
143
70.2k
                }
144
145
70.2k
                UInt32 to_max_digits = 0;
146
70.2k
                UInt32 to_precision = 0;
147
70.2k
                UInt32 to_scale = 0;
148
149
70.2k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
70.2k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
70.2k
                    const auto* to_decimal_type =
153
70.2k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
70.2k
                    to_precision = to_decimal_type->get_precision();
155
70.2k
                    ToDataType::check_type_precision(to_precision);
156
157
70.2k
                    to_scale = to_decimal_type->get_scale();
158
70.2k
                    ToDataType::check_type_scale(to_scale);
159
70.2k
                }
160
70.2k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
70.2k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
70.2k
                    to_precision = to_max_digits;
163
70.2k
                }
164
165
70.2k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
70.2k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
70.2k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
70.2k
                if (to_scale > from_scale) {
170
70.2k
                    multiply_may_overflow &=
171
70.2k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
70.2k
                }
173
70.2k
                return narrow_integral || multiply_may_overflow;
174
70.2k
            }
175
70.2k
            return false;
176
70.2k
        });
177
70.2k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEvEEEEbRKT_
Line
Count
Source
113
10.8k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
10.8k
        using Types = std::decay_t<decltype(types)>;
115
10.8k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
10.8k
        return call_on_index_and_data_type<
123
10.8k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10.8k
            using Types2 = std::decay_t<decltype(types2)>;
125
10.8k
            using FromDataType = typename Types2::LeftType;
126
10.8k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
10.8k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
10.8k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
10.8k
                return false;
130
10.8k
            }
131
10.8k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10.8k
                using FromFieldType = typename FromDataType::FieldType;
133
10.8k
                using ToFieldType = typename ToDataType::FieldType;
134
10.8k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10.8k
                UInt32 from_scale = 0;
136
137
10.8k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10.8k
                    const auto* from_decimal_type =
139
10.8k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10.8k
                    from_precision =
141
10.8k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10.8k
                    from_scale = from_decimal_type->get_scale();
143
10.8k
                }
144
145
10.8k
                UInt32 to_max_digits = 0;
146
10.8k
                UInt32 to_precision = 0;
147
10.8k
                UInt32 to_scale = 0;
148
149
10.8k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
10.8k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
10.8k
                    const auto* to_decimal_type =
153
10.8k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
10.8k
                    to_precision = to_decimal_type->get_precision();
155
10.8k
                    ToDataType::check_type_precision(to_precision);
156
157
10.8k
                    to_scale = to_decimal_type->get_scale();
158
10.8k
                    ToDataType::check_type_scale(to_scale);
159
10.8k
                }
160
10.8k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
10.8k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
10.8k
                    to_precision = to_max_digits;
163
10.8k
                }
164
165
10.8k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10.8k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10.8k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10.8k
                if (to_scale > from_scale) {
170
10.8k
                    multiply_may_overflow &=
171
10.8k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
10.8k
                }
173
10.8k
                return narrow_integral || multiply_may_overflow;
174
10.8k
            }
175
10.8k
            return false;
176
10.8k
        });
177
10.8k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEvEEEEbRKT_
Line
Count
Source
113
27.4k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
27.4k
        using Types = std::decay_t<decltype(types)>;
115
27.4k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
27.4k
        return call_on_index_and_data_type<
123
27.4k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
27.4k
            using Types2 = std::decay_t<decltype(types2)>;
125
27.4k
            using FromDataType = typename Types2::LeftType;
126
27.4k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
27.4k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
27.4k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
27.4k
                return false;
130
27.4k
            }
131
27.4k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
27.4k
                using FromFieldType = typename FromDataType::FieldType;
133
27.4k
                using ToFieldType = typename ToDataType::FieldType;
134
27.4k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
27.4k
                UInt32 from_scale = 0;
136
137
27.4k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
27.4k
                    const auto* from_decimal_type =
139
27.4k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
27.4k
                    from_precision =
141
27.4k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
27.4k
                    from_scale = from_decimal_type->get_scale();
143
27.4k
                }
144
145
27.4k
                UInt32 to_max_digits = 0;
146
27.4k
                UInt32 to_precision = 0;
147
27.4k
                UInt32 to_scale = 0;
148
149
27.4k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
27.4k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
27.4k
                    const auto* to_decimal_type =
153
27.4k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
27.4k
                    to_precision = to_decimal_type->get_precision();
155
27.4k
                    ToDataType::check_type_precision(to_precision);
156
157
27.4k
                    to_scale = to_decimal_type->get_scale();
158
27.4k
                    ToDataType::check_type_scale(to_scale);
159
27.4k
                }
160
27.4k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
27.4k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
27.4k
                    to_precision = to_max_digits;
163
27.4k
                }
164
165
27.4k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
27.4k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
27.4k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
27.4k
                if (to_scale > from_scale) {
170
27.4k
                    multiply_may_overflow &=
171
27.4k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
27.4k
                }
173
27.4k
                return narrow_integral || multiply_may_overflow;
174
27.4k
            }
175
27.4k
            return false;
176
27.4k
        });
177
27.4k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEEvEEEEbRKT_
Line
Count
Source
113
9.87k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
9.87k
        using Types = std::decay_t<decltype(types)>;
115
9.87k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
9.87k
        return call_on_index_and_data_type<
123
9.87k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
9.87k
            using Types2 = std::decay_t<decltype(types2)>;
125
9.87k
            using FromDataType = typename Types2::LeftType;
126
9.87k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
9.87k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
9.87k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
9.87k
                return false;
130
9.87k
            }
131
9.87k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
9.87k
                using FromFieldType = typename FromDataType::FieldType;
133
9.87k
                using ToFieldType = typename ToDataType::FieldType;
134
9.87k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
9.87k
                UInt32 from_scale = 0;
136
137
9.87k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
9.87k
                    const auto* from_decimal_type =
139
9.87k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
9.87k
                    from_precision =
141
9.87k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
9.87k
                    from_scale = from_decimal_type->get_scale();
143
9.87k
                }
144
145
9.87k
                UInt32 to_max_digits = 0;
146
9.87k
                UInt32 to_precision = 0;
147
9.87k
                UInt32 to_scale = 0;
148
149
9.87k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
9.87k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
9.87k
                    const auto* to_decimal_type =
153
9.87k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
9.87k
                    to_precision = to_decimal_type->get_precision();
155
9.87k
                    ToDataType::check_type_precision(to_precision);
156
157
9.87k
                    to_scale = to_decimal_type->get_scale();
158
9.87k
                    ToDataType::check_type_scale(to_scale);
159
9.87k
                }
160
9.87k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
9.87k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
9.87k
                    to_precision = to_max_digits;
163
9.87k
                }
164
165
9.87k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
9.87k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
9.87k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
9.87k
                if (to_scale > from_scale) {
170
9.87k
                    multiply_may_overflow &=
171
9.87k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
9.87k
                }
173
9.87k
                return narrow_integral || multiply_may_overflow;
174
9.87k
            }
175
9.87k
            return false;
176
9.87k
        });
177
9.87k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEEvEEEEbRKT_
Line
Count
Source
113
21.8k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
21.8k
        using Types = std::decay_t<decltype(types)>;
115
21.8k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
21.8k
        return call_on_index_and_data_type<
123
21.8k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
21.8k
            using Types2 = std::decay_t<decltype(types2)>;
125
21.8k
            using FromDataType = typename Types2::LeftType;
126
21.8k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
21.8k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
21.8k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
21.8k
                return false;
130
21.8k
            }
131
21.8k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
21.8k
                using FromFieldType = typename FromDataType::FieldType;
133
21.8k
                using ToFieldType = typename ToDataType::FieldType;
134
21.8k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
21.8k
                UInt32 from_scale = 0;
136
137
21.8k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
21.8k
                    const auto* from_decimal_type =
139
21.8k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
21.8k
                    from_precision =
141
21.8k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
21.8k
                    from_scale = from_decimal_type->get_scale();
143
21.8k
                }
144
145
21.8k
                UInt32 to_max_digits = 0;
146
21.8k
                UInt32 to_precision = 0;
147
21.8k
                UInt32 to_scale = 0;
148
149
21.8k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
21.8k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
21.8k
                    const auto* to_decimal_type =
153
21.8k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
21.8k
                    to_precision = to_decimal_type->get_precision();
155
21.8k
                    ToDataType::check_type_precision(to_precision);
156
157
21.8k
                    to_scale = to_decimal_type->get_scale();
158
21.8k
                    ToDataType::check_type_scale(to_scale);
159
21.8k
                }
160
21.8k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
21.8k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
21.8k
                    to_precision = to_max_digits;
163
21.8k
                }
164
165
21.8k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
21.8k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
21.8k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
21.8k
                if (to_scale > from_scale) {
170
21.8k
                    multiply_may_overflow &=
171
21.8k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
21.8k
                }
173
21.8k
                return narrow_integral || multiply_may_overflow;
174
21.8k
            }
175
21.8k
            return false;
176
21.8k
        });
177
21.8k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEEvEEEEbRKT_
Line
Count
Source
113
225
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
225
        using Types = std::decay_t<decltype(types)>;
115
225
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
225
        return call_on_index_and_data_type<
123
225
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
225
            using Types2 = std::decay_t<decltype(types2)>;
125
225
            using FromDataType = typename Types2::LeftType;
126
225
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
225
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
225
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
225
                return false;
130
225
            }
131
225
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
225
                using FromFieldType = typename FromDataType::FieldType;
133
225
                using ToFieldType = typename ToDataType::FieldType;
134
225
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
225
                UInt32 from_scale = 0;
136
137
225
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
225
                    const auto* from_decimal_type =
139
225
                            check_and_get_data_type<FromDataType>(from_type.get());
140
225
                    from_precision =
141
225
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
225
                    from_scale = from_decimal_type->get_scale();
143
225
                }
144
145
225
                UInt32 to_max_digits = 0;
146
225
                UInt32 to_precision = 0;
147
225
                UInt32 to_scale = 0;
148
149
225
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
225
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
225
                    const auto* to_decimal_type =
153
225
                            check_and_get_data_type<ToDataType>(to_type.get());
154
225
                    to_precision = to_decimal_type->get_precision();
155
225
                    ToDataType::check_type_precision(to_precision);
156
157
225
                    to_scale = to_decimal_type->get_scale();
158
225
                    ToDataType::check_type_scale(to_scale);
159
225
                }
160
225
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
225
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
225
                    to_precision = to_max_digits;
163
225
                }
164
165
225
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
225
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
225
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
225
                if (to_scale > from_scale) {
170
225
                    multiply_may_overflow &=
171
225
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
225
                }
173
225
                return narrow_integral || multiply_may_overflow;
174
225
            }
175
225
            return false;
176
225
        });
177
225
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEEvEEEEbRKT_
Line
Count
Source
113
174k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
174k
        using Types = std::decay_t<decltype(types)>;
115
174k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
174k
        return call_on_index_and_data_type<
123
174k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
174k
            using Types2 = std::decay_t<decltype(types2)>;
125
174k
            using FromDataType = typename Types2::LeftType;
126
174k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
174k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
174k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
174k
                return false;
130
174k
            }
131
174k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
174k
                using FromFieldType = typename FromDataType::FieldType;
133
174k
                using ToFieldType = typename ToDataType::FieldType;
134
174k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
174k
                UInt32 from_scale = 0;
136
137
174k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
174k
                    const auto* from_decimal_type =
139
174k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
174k
                    from_precision =
141
174k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
174k
                    from_scale = from_decimal_type->get_scale();
143
174k
                }
144
145
174k
                UInt32 to_max_digits = 0;
146
174k
                UInt32 to_precision = 0;
147
174k
                UInt32 to_scale = 0;
148
149
174k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
174k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
174k
                    const auto* to_decimal_type =
153
174k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
174k
                    to_precision = to_decimal_type->get_precision();
155
174k
                    ToDataType::check_type_precision(to_precision);
156
157
174k
                    to_scale = to_decimal_type->get_scale();
158
174k
                    ToDataType::check_type_scale(to_scale);
159
174k
                }
160
174k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
174k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
174k
                    to_precision = to_max_digits;
163
174k
                }
164
165
174k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
174k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
174k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
174k
                if (to_scale > from_scale) {
170
174k
                    multiply_may_overflow &=
171
174k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
174k
                }
173
174k
                return narrow_integral || multiply_may_overflow;
174
174k
            }
175
174k
            return false;
176
174k
        });
177
174k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEEvEEEEbRKT_
Line
Count
Source
113
10.9k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
10.9k
        using Types = std::decay_t<decltype(types)>;
115
10.9k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
10.9k
        return call_on_index_and_data_type<
123
10.9k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
10.9k
            using Types2 = std::decay_t<decltype(types2)>;
125
10.9k
            using FromDataType = typename Types2::LeftType;
126
10.9k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
10.9k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
10.9k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
10.9k
                return false;
130
10.9k
            }
131
10.9k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
10.9k
                using FromFieldType = typename FromDataType::FieldType;
133
10.9k
                using ToFieldType = typename ToDataType::FieldType;
134
10.9k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
10.9k
                UInt32 from_scale = 0;
136
137
10.9k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
10.9k
                    const auto* from_decimal_type =
139
10.9k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
10.9k
                    from_precision =
141
10.9k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
10.9k
                    from_scale = from_decimal_type->get_scale();
143
10.9k
                }
144
145
10.9k
                UInt32 to_max_digits = 0;
146
10.9k
                UInt32 to_precision = 0;
147
10.9k
                UInt32 to_scale = 0;
148
149
10.9k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
10.9k
                    const auto* to_decimal_type =
153
10.9k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
10.9k
                    to_precision = to_decimal_type->get_precision();
155
10.9k
                    ToDataType::check_type_precision(to_precision);
156
157
10.9k
                    to_scale = to_decimal_type->get_scale();
158
10.9k
                    ToDataType::check_type_scale(to_scale);
159
10.9k
                }
160
10.9k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
10.9k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
10.9k
                    to_precision = to_max_digits;
163
10.9k
                }
164
165
10.9k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
10.9k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
10.9k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
10.9k
                if (to_scale > from_scale) {
170
10.9k
                    multiply_may_overflow &=
171
10.9k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
10.9k
                }
173
10.9k
                return narrow_integral || multiply_may_overflow;
174
10.9k
            }
175
10.9k
            return false;
176
10.9k
        });
177
10.9k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeDateEvEEEEbRKT_
Line
Count
Source
113
32
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
32
        using Types = std::decay_t<decltype(types)>;
115
32
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
32
        return call_on_index_and_data_type<
123
32
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
32
            using Types2 = std::decay_t<decltype(types2)>;
125
32
            using FromDataType = typename Types2::LeftType;
126
32
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
32
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
32
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
32
                return false;
130
32
            }
131
32
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
32
                using FromFieldType = typename FromDataType::FieldType;
133
32
                using ToFieldType = typename ToDataType::FieldType;
134
32
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
32
                UInt32 from_scale = 0;
136
137
32
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
32
                    const auto* from_decimal_type =
139
32
                            check_and_get_data_type<FromDataType>(from_type.get());
140
32
                    from_precision =
141
32
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
32
                    from_scale = from_decimal_type->get_scale();
143
32
                }
144
145
32
                UInt32 to_max_digits = 0;
146
32
                UInt32 to_precision = 0;
147
32
                UInt32 to_scale = 0;
148
149
32
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
32
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
32
                    const auto* to_decimal_type =
153
32
                            check_and_get_data_type<ToDataType>(to_type.get());
154
32
                    to_precision = to_decimal_type->get_precision();
155
32
                    ToDataType::check_type_precision(to_precision);
156
157
32
                    to_scale = to_decimal_type->get_scale();
158
32
                    ToDataType::check_type_scale(to_scale);
159
32
                }
160
32
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
32
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
32
                    to_precision = to_max_digits;
163
32
                }
164
165
32
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
32
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
32
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
32
                if (to_scale > from_scale) {
170
32
                    multiply_may_overflow &=
171
32
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
32
                }
173
32
                return narrow_integral || multiply_may_overflow;
174
32
            }
175
32
            return false;
176
32
        });
177
32
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeDateV2EvEEEEbRKT_
Line
Count
Source
113
162k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
162k
        using Types = std::decay_t<decltype(types)>;
115
162k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
162k
        return call_on_index_and_data_type<
123
162k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
162k
            using Types2 = std::decay_t<decltype(types2)>;
125
162k
            using FromDataType = typename Types2::LeftType;
126
162k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
162k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
162k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
162k
                return false;
130
162k
            }
131
162k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
162k
                using FromFieldType = typename FromDataType::FieldType;
133
162k
                using ToFieldType = typename ToDataType::FieldType;
134
162k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
162k
                UInt32 from_scale = 0;
136
137
162k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
162k
                    const auto* from_decimal_type =
139
162k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
162k
                    from_precision =
141
162k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
162k
                    from_scale = from_decimal_type->get_scale();
143
162k
                }
144
145
162k
                UInt32 to_max_digits = 0;
146
162k
                UInt32 to_precision = 0;
147
162k
                UInt32 to_scale = 0;
148
149
162k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
162k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
162k
                    const auto* to_decimal_type =
153
162k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
162k
                    to_precision = to_decimal_type->get_precision();
155
162k
                    ToDataType::check_type_precision(to_precision);
156
157
162k
                    to_scale = to_decimal_type->get_scale();
158
162k
                    ToDataType::check_type_scale(to_scale);
159
162k
                }
160
162k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
162k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
162k
                    to_precision = to_max_digits;
163
162k
                }
164
165
162k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
162k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
162k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
162k
                if (to_scale > from_scale) {
170
162k
                    multiply_may_overflow &=
171
162k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
162k
                }
173
162k
                return narrow_integral || multiply_may_overflow;
174
162k
            }
175
162k
            return false;
176
162k
        });
177
162k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_18DataTypeDateTimeV2EvEEEEbRKT_
Line
Count
Source
113
155k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
155k
        using Types = std::decay_t<decltype(types)>;
115
155k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
155k
        return call_on_index_and_data_type<
123
155k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
155k
            using Types2 = std::decay_t<decltype(types2)>;
125
155k
            using FromDataType = typename Types2::LeftType;
126
155k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
155k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
155k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
155k
                return false;
130
155k
            }
131
155k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
155k
                using FromFieldType = typename FromDataType::FieldType;
133
155k
                using ToFieldType = typename ToDataType::FieldType;
134
155k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
155k
                UInt32 from_scale = 0;
136
137
155k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
155k
                    const auto* from_decimal_type =
139
155k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
155k
                    from_precision =
141
155k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
155k
                    from_scale = from_decimal_type->get_scale();
143
155k
                }
144
145
155k
                UInt32 to_max_digits = 0;
146
155k
                UInt32 to_precision = 0;
147
155k
                UInt32 to_scale = 0;
148
149
155k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
155k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
155k
                    const auto* to_decimal_type =
153
155k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
155k
                    to_precision = to_decimal_type->get_precision();
155
155k
                    ToDataType::check_type_precision(to_precision);
156
157
155k
                    to_scale = to_decimal_type->get_scale();
158
155k
                    ToDataType::check_type_scale(to_scale);
159
155k
                }
160
155k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
155k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
155k
                    to_precision = to_max_digits;
163
155k
                }
164
165
155k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
155k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
155k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
155k
                if (to_scale > from_scale) {
170
155k
                    multiply_may_overflow &=
171
155k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
155k
                }
173
155k
                return narrow_integral || multiply_may_overflow;
174
155k
            }
175
155k
            return false;
176
155k
        });
177
155k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_16DataTypeDateTimeEvEEEEbRKT_
Line
Count
Source
113
26
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
26
        using Types = std::decay_t<decltype(types)>;
115
26
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
26
        return call_on_index_and_data_type<
123
26
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
26
            using Types2 = std::decay_t<decltype(types2)>;
125
26
            using FromDataType = typename Types2::LeftType;
126
26
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
26
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
26
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
26
                return false;
130
26
            }
131
26
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
26
                using FromFieldType = typename FromDataType::FieldType;
133
26
                using ToFieldType = typename ToDataType::FieldType;
134
26
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
26
                UInt32 from_scale = 0;
136
137
26
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
26
                    const auto* from_decimal_type =
139
26
                            check_and_get_data_type<FromDataType>(from_type.get());
140
26
                    from_precision =
141
26
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
26
                    from_scale = from_decimal_type->get_scale();
143
26
                }
144
145
26
                UInt32 to_max_digits = 0;
146
26
                UInt32 to_precision = 0;
147
26
                UInt32 to_scale = 0;
148
149
26
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
26
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
26
                    const auto* to_decimal_type =
153
26
                            check_and_get_data_type<ToDataType>(to_type.get());
154
26
                    to_precision = to_decimal_type->get_precision();
155
26
                    ToDataType::check_type_precision(to_precision);
156
157
26
                    to_scale = to_decimal_type->get_scale();
158
26
                    ToDataType::check_type_scale(to_scale);
159
26
                }
160
26
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
26
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
26
                    to_precision = to_max_digits;
163
26
                }
164
165
26
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
26
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
26
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
26
                if (to_scale > from_scale) {
170
26
                    multiply_may_overflow &=
171
26
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
26
                }
173
26
                return narrow_integral || multiply_may_overflow;
174
26
            }
175
26
            return false;
176
26
        });
177
26
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeTimeV2EvEEEEbRKT_
Line
Count
Source
113
465
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
465
        using Types = std::decay_t<decltype(types)>;
115
465
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
            return false;
121
        }
122
465
        return call_on_index_and_data_type<
123
465
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
465
            using Types2 = std::decay_t<decltype(types2)>;
125
465
            using FromDataType = typename Types2::LeftType;
126
465
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
465
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
465
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
465
                return false;
130
465
            }
131
465
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
465
                using FromFieldType = typename FromDataType::FieldType;
133
465
                using ToFieldType = typename ToDataType::FieldType;
134
465
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
465
                UInt32 from_scale = 0;
136
137
465
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
465
                    const auto* from_decimal_type =
139
465
                            check_and_get_data_type<FromDataType>(from_type.get());
140
465
                    from_precision =
141
465
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
465
                    from_scale = from_decimal_type->get_scale();
143
465
                }
144
145
465
                UInt32 to_max_digits = 0;
146
465
                UInt32 to_precision = 0;
147
465
                UInt32 to_scale = 0;
148
149
465
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
465
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
465
                    const auto* to_decimal_type =
153
465
                            check_and_get_data_type<ToDataType>(to_type.get());
154
465
                    to_precision = to_decimal_type->get_precision();
155
465
                    ToDataType::check_type_precision(to_precision);
156
157
465
                    to_scale = to_decimal_type->get_scale();
158
465
                    ToDataType::check_type_scale(to_scale);
159
465
                }
160
465
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
465
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
465
                    to_precision = to_max_digits;
163
465
                }
164
165
465
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
465
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
465
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
465
                if (to_scale > from_scale) {
170
465
                    multiply_may_overflow &=
171
465
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
465
                }
173
465
                return narrow_integral || multiply_may_overflow;
174
465
            }
175
465
            return false;
176
465
        });
177
465
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_19DataTypeTimeStampTzEvEEEEbRKT_
Line
Count
Source
113
590
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
590
        using Types = std::decay_t<decltype(types)>;
115
590
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
590
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
590
            return false;
121
590
        }
122
0
        return call_on_index_and_data_type<
123
590
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
590
            using Types2 = std::decay_t<decltype(types2)>;
125
590
            using FromDataType = typename Types2::LeftType;
126
590
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
590
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
590
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
590
                return false;
130
590
            }
131
590
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
590
                using FromFieldType = typename FromDataType::FieldType;
133
590
                using ToFieldType = typename ToDataType::FieldType;
134
590
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
590
                UInt32 from_scale = 0;
136
137
590
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
590
                    const auto* from_decimal_type =
139
590
                            check_and_get_data_type<FromDataType>(from_type.get());
140
590
                    from_precision =
141
590
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
590
                    from_scale = from_decimal_type->get_scale();
143
590
                }
144
145
590
                UInt32 to_max_digits = 0;
146
590
                UInt32 to_precision = 0;
147
590
                UInt32 to_scale = 0;
148
149
590
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
590
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
590
                    const auto* to_decimal_type =
153
590
                            check_and_get_data_type<ToDataType>(to_type.get());
154
590
                    to_precision = to_decimal_type->get_precision();
155
590
                    ToDataType::check_type_precision(to_precision);
156
157
590
                    to_scale = to_decimal_type->get_scale();
158
590
                    ToDataType::check_type_scale(to_scale);
159
590
                }
160
590
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
590
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
590
                    to_precision = to_max_digits;
163
590
                }
164
165
590
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
590
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
590
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
590
                if (to_scale > from_scale) {
170
590
                    multiply_may_overflow &=
171
590
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
590
                }
173
590
                return narrow_integral || multiply_may_overflow;
174
590
            }
175
590
            return false;
176
590
        });
177
590
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv4EvEEEEbRKT_
Line
Count
Source
113
85.5k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
85.5k
        using Types = std::decay_t<decltype(types)>;
115
85.5k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
85.5k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
85.5k
            return false;
121
85.5k
        }
122
0
        return call_on_index_and_data_type<
123
85.5k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
85.5k
            using Types2 = std::decay_t<decltype(types2)>;
125
85.5k
            using FromDataType = typename Types2::LeftType;
126
85.5k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
85.5k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
85.5k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
85.5k
                return false;
130
85.5k
            }
131
85.5k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
85.5k
                using FromFieldType = typename FromDataType::FieldType;
133
85.5k
                using ToFieldType = typename ToDataType::FieldType;
134
85.5k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
85.5k
                UInt32 from_scale = 0;
136
137
85.5k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
85.5k
                    const auto* from_decimal_type =
139
85.5k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
85.5k
                    from_precision =
141
85.5k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
85.5k
                    from_scale = from_decimal_type->get_scale();
143
85.5k
                }
144
145
85.5k
                UInt32 to_max_digits = 0;
146
85.5k
                UInt32 to_precision = 0;
147
85.5k
                UInt32 to_scale = 0;
148
149
85.5k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
85.5k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
85.5k
                    const auto* to_decimal_type =
153
85.5k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
85.5k
                    to_precision = to_decimal_type->get_precision();
155
85.5k
                    ToDataType::check_type_precision(to_precision);
156
157
85.5k
                    to_scale = to_decimal_type->get_scale();
158
85.5k
                    ToDataType::check_type_scale(to_scale);
159
85.5k
                }
160
85.5k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
85.5k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
85.5k
                    to_precision = to_max_digits;
163
85.5k
                }
164
165
85.5k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
85.5k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
85.5k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
85.5k
                if (to_scale > from_scale) {
170
85.5k
                    multiply_may_overflow &=
171
85.5k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
85.5k
                }
173
85.5k
                return narrow_integral || multiply_may_overflow;
174
85.5k
            }
175
85.5k
            return false;
176
85.5k
        });
177
85.5k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_12DataTypeIPv6EvEEEEbRKT_
Line
Count
Source
113
159k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
159k
        using Types = std::decay_t<decltype(types)>;
115
159k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
159k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
159k
            return false;
121
159k
        }
122
0
        return call_on_index_and_data_type<
123
159k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
159k
            using Types2 = std::decay_t<decltype(types2)>;
125
159k
            using FromDataType = typename Types2::LeftType;
126
159k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
159k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
159k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
159k
                return false;
130
159k
            }
131
159k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
159k
                using FromFieldType = typename FromDataType::FieldType;
133
159k
                using ToFieldType = typename ToDataType::FieldType;
134
159k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
159k
                UInt32 from_scale = 0;
136
137
159k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
159k
                    const auto* from_decimal_type =
139
159k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
159k
                    from_precision =
141
159k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
159k
                    from_scale = from_decimal_type->get_scale();
143
159k
                }
144
145
159k
                UInt32 to_max_digits = 0;
146
159k
                UInt32 to_precision = 0;
147
159k
                UInt32 to_scale = 0;
148
149
159k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
159k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
159k
                    const auto* to_decimal_type =
153
159k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
159k
                    to_precision = to_decimal_type->get_precision();
155
159k
                    ToDataType::check_type_precision(to_precision);
156
157
159k
                    to_scale = to_decimal_type->get_scale();
158
159k
                    ToDataType::check_type_scale(to_scale);
159
159k
                }
160
159k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
159k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
159k
                    to_precision = to_max_digits;
163
159k
                }
164
165
159k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
159k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
159k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
159k
                if (to_scale > from_scale) {
170
159k
                    multiply_may_overflow &=
171
159k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
159k
                }
173
159k
                return narrow_integral || multiply_may_overflow;
174
159k
            }
175
159k
            return false;
176
159k
        });
177
159k
    };
function_cast.cpp:_ZZN5doris11CastWrapper33need_replace_null_data_to_defaultEPNS_15FunctionContextERKSt10shared_ptrIKNS_9IDataTypeEES8_ENK3$_0clINS_8TypePairINS_14DataTypeStringEvEEEEbRKT_
Line
Count
Source
113
110k
    auto make_default_wrapper = [&](const auto& types) -> bool {
114
110k
        using Types = std::decay_t<decltype(types)>;
115
110k
        using ToDataType = typename Types::LeftType;
116
117
        if constexpr (!(IsDataTypeDecimalOrNumber<ToDataType> || IsDatelikeV1Types<ToDataType> ||
118
                        IsDatelikeV2Types<ToDataType> ||
119
110k
                        std::is_same_v<ToDataType, DataTypeTimeV2>)) {
120
110k
            return false;
121
110k
        }
122
0
        return call_on_index_and_data_type<
123
110k
                ToDataType>(from_type->get_primitive_type(), [&](const auto& types2) -> bool {
124
110k
            using Types2 = std::decay_t<decltype(types2)>;
125
110k
            using FromDataType = typename Types2::LeftType;
126
110k
            if constexpr (!(IsDataTypeDecimalOrNumber<FromDataType> ||
127
110k
                            IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
128
110k
                            std::is_same_v<FromDataType, DataTypeTimeV2>)) {
129
110k
                return false;
130
110k
            }
131
110k
            if constexpr (IsDataTypeDecimal<FromDataType> || IsDataTypeDecimal<ToDataType>) {
132
110k
                using FromFieldType = typename FromDataType::FieldType;
133
110k
                using ToFieldType = typename ToDataType::FieldType;
134
110k
                UInt32 from_precision = NumberTraits::max_ascii_len<FromFieldType>();
135
110k
                UInt32 from_scale = 0;
136
137
110k
                if constexpr (IsDataTypeDecimal<FromDataType>) {
138
110k
                    const auto* from_decimal_type =
139
110k
                            check_and_get_data_type<FromDataType>(from_type.get());
140
110k
                    from_precision =
141
110k
                            NumberTraits::max_ascii_len<typename FromFieldType::NativeType>();
142
110k
                    from_scale = from_decimal_type->get_scale();
143
110k
                }
144
145
110k
                UInt32 to_max_digits = 0;
146
110k
                UInt32 to_precision = 0;
147
110k
                UInt32 to_scale = 0;
148
149
110k
                if constexpr (IsDataTypeDecimal<ToDataType>) {
150
110k
                    to_max_digits = NumberTraits::max_ascii_len<typename ToFieldType::NativeType>();
151
152
110k
                    const auto* to_decimal_type =
153
110k
                            check_and_get_data_type<ToDataType>(to_type.get());
154
110k
                    to_precision = to_decimal_type->get_precision();
155
110k
                    ToDataType::check_type_precision(to_precision);
156
157
110k
                    to_scale = to_decimal_type->get_scale();
158
110k
                    ToDataType::check_type_scale(to_scale);
159
110k
                }
160
110k
                if constexpr (IsIntegralV<ToFieldType> || std::is_floating_point_v<ToFieldType>) {
161
110k
                    to_max_digits = NumberTraits::max_ascii_len<ToFieldType>();
162
110k
                    to_precision = to_max_digits;
163
110k
                }
164
165
110k
                bool narrow_integral = context->check_overflow_for_decimal() &&
166
110k
                                       (to_precision - to_scale) <= (from_precision - from_scale);
167
168
110k
                bool multiply_may_overflow = context->check_overflow_for_decimal();
169
110k
                if (to_scale > from_scale) {
170
110k
                    multiply_may_overflow &=
171
110k
                            (from_precision + to_scale - from_scale) >= to_max_digits;
172
110k
                }
173
110k
                return narrow_integral || multiply_may_overflow;
174
110k
            }
175
110k
            return false;
176
110k
        });
177
110k
    };
178
179
1.46M
    return call_on_index_and_data_type<void>(to_type->get_primitive_type(), make_default_wrapper);
180
1.55M
}
181
182
WrapperType prepare_remove_nullable(FunctionContext* context, const DataTypePtr& from_type,
183
1.58M
                                    const DataTypePtr& to_type) {
184
    /// Determine whether pre-processing and/or post-processing must take place during conversion.
185
1.58M
    bool result_is_nullable = to_type->is_nullable();
186
187
1.58M
    if (result_is_nullable) {
188
1.55M
        return [from_type, to_type](FunctionContext* context, Block& block,
189
1.55M
                                    const ColumnNumbers& arguments, uint32_t result,
190
1.55M
                                    size_t input_rows_count,
191
1.55M
                                    const NullMap::value_type* null_map = nullptr) {
192
1.55M
            auto from_type_not_nullable = remove_nullable(from_type);
193
1.55M
            auto to_type_not_nullable = remove_nullable(to_type);
194
195
1.55M
            bool replace_null_data_to_default = need_replace_null_data_to_default(
196
1.55M
                    context, from_type_not_nullable, to_type_not_nullable);
197
198
1.55M
            NullableColumnInfo source_info;
199
1.55M
            if (block.get_by_position(arguments[0]).type->is_nullable()) {
200
1.49M
                source_info = block.get_by_position(arguments[0]).get_nullable_column_info();
201
1.49M
            }
202
1.55M
            auto nested_result_index = block.columns();
203
1.55M
            const auto& result_column = block.get_by_position(result);
204
1.55M
            block.insert({nullptr, to_type_not_nullable, result_column.name});
205
1.55M
            auto nested_source_index = block.columns();
206
1.55M
            if (source_info.is_nullable) {
207
1.49M
                block.insert(block.get_by_position(arguments[0])
208
1.49M
                                     .unnest_nullable(source_info, replace_null_data_to_default));
209
1.49M
            } else {
210
53.9k
                block.insert(block.get_by_position(arguments[0]));
211
53.9k
            }
212
213
1.55M
            const NullMap::value_type* arg_null_map = nullptr;
214
1.55M
            if (source_info.is_nullable) {
215
1.49M
                arg_null_map = block.get_by_position(arguments[0])
216
1.49M
                                       .get_nullable_null_map_column()
217
1.49M
                                       ->get_data()
218
1.49M
                                       .data();
219
1.49M
            }
220
1.55M
            RETURN_IF_ERROR(prepare_impl(context, from_type_not_nullable, to_type_not_nullable)(
221
1.55M
                    context, block, {nested_source_index}, nested_result_index, input_rows_count,
222
1.55M
                    arg_null_map));
223
224
1.52M
            NullableColumnInfos nullable_column_infos(block.columns());
225
1.52M
            nullable_column_infos[arguments[0]] = std::move(source_info);
226
1.52M
            block.get_by_position(result).column =
227
1.52M
                    wrap_in_nullable(block.get_by_position(nested_result_index).column, block,
228
1.52M
                                     arguments, nullable_column_infos, input_rows_count);
229
230
1.52M
            block.erase(nested_source_index);
231
1.52M
            block.erase(nested_result_index);
232
1.52M
            return Status::OK();
233
1.55M
        };
234
1.55M
    } else {
235
30.0k
        return prepare_impl(context, from_type, to_type);
236
30.0k
    }
237
1.58M
}
238
239
/// 'from_type' and 'to_type' are nested types in case of Nullable.
240
/// 'requested_result_is_nullable' is true if CAST to Nullable type is requested.
241
// NOLINTNEXTLINE(readability-function-size)
242
WrapperType prepare_impl(FunctionContext* context, const DataTypePtr& origin_from_type,
243
1.59M
                         const DataTypePtr& origin_to_type) {
244
1.59M
    auto to_type = get_serialized_type(origin_to_type);
245
1.59M
    auto from_type = get_serialized_type(origin_from_type);
246
1.59M
    if (from_type->equals(*to_type)) {
247
89.9k
        return create_identity_wrapper(from_type);
248
89.9k
    }
249
250
1.50M
    const auto* from_variant_v1 =
251
1.50M
            dynamic_cast<const DataTypeVariant*>(remove_nullable(from_type).get());
252
1.50M
    const auto* to_variant_v1 =
253
1.50M
            dynamic_cast<const DataTypeVariant*>(remove_nullable(to_type).get());
254
1.50M
    const auto* from_variant_v2 =
255
1.50M
            dynamic_cast<const DataTypeVariantV2*>(remove_nullable(from_type).get());
256
1.50M
    const auto* to_variant_v2 =
257
1.50M
            dynamic_cast<const DataTypeVariantV2*>(remove_nullable(to_type).get());
258
1.50M
    if ((from_variant_v1 != nullptr && to_variant_v2 != nullptr) ||
259
1.50M
        (from_variant_v2 != nullptr && to_variant_v1 != nullptr)) {
260
0
        return CastWrapper::create_unsupport_wrapper(
261
0
                "Cast between legacy Variant and compute-only Variant V2 is not supported");
262
0
    }
263
264
    // variant needs to be judged first
265
1.50M
    if (to_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
266
11.8k
        if (to_variant_v2 != nullptr) {
267
0
            return create_cast_to_variant_v2_wrapper(from_type);
268
0
        }
269
11.8k
        DORIS_CHECK(to_variant_v1 != nullptr);
270
11.8k
        return create_cast_to_variant_wrapper(from_type, *to_variant_v1);
271
11.8k
    }
272
1.49M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_VARIANT) {
273
17.2k
        if (from_variant_v2 != nullptr) {
274
0
            auto wrapper = create_cast_from_variant_v2_wrapper(to_type);
275
0
            return [wrapper = std::move(wrapper)](
276
0
                           FunctionContext* context, Block& block, const ColumnNumbers& arguments,
277
0
                           uint32_t result, size_t rows, const NullMap::value_type* null_map) {
278
0
                RETURN_IF_ERROR(wrapper(context, block, arguments, result, rows, null_map));
279
0
                auto& result_column = block.get_by_position(result).column;
280
0
                if (null_map == nullptr) {
281
0
                    const auto* nullable = check_and_get_column<ColumnNullable>(*result_column);
282
0
                    if (nullable != nullptr && !nullable->has_null()) {
283
0
                        result_column = nullable->get_nested_column_ptr();
284
0
                    }
285
0
                }
286
0
                return Status::OK();
287
0
            };
288
0
        }
289
17.2k
        DORIS_CHECK(from_variant_v1 != nullptr);
290
17.2k
        return create_cast_from_variant_wrapper(*from_variant_v1, to_type);
291
17.2k
    }
292
293
1.47M
    if (from_type->get_primitive_type() == PrimitiveType::TYPE_JSONB) {
294
9.28k
        return create_cast_from_jsonb_wrapper(static_cast<const DataTypeJsonb&>(*from_type),
295
9.28k
                                              to_type,
296
18.4E
                                              context ? context->jsonb_string_as_string() : false);
297
9.28k
    }
298
299
1.46M
    switch (to_type->get_primitive_type()) {
300
1.09k
    case PrimitiveType::TYPE_BOOLEAN:
301
1.09k
        return create_boolean_wrapper(context, from_type);
302
6.76k
    case PrimitiveType::TYPE_TINYINT:
303
12.2k
    case PrimitiveType::TYPE_SMALLINT:
304
176k
    case PrimitiveType::TYPE_INT:
305
227k
    case PrimitiveType::TYPE_BIGINT:
306
297k
    case PrimitiveType::TYPE_LARGEINT:
307
297k
        return create_int_wrapper(context, from_type, to_type->get_primitive_type());
308
11.0k
    case PrimitiveType::TYPE_FLOAT:
309
40.3k
    case PrimitiveType::TYPE_DOUBLE:
310
40.3k
        return create_float_wrapper(context, from_type, to_type->get_primitive_type());
311
32
    case PrimitiveType::TYPE_DATE:
312
58
    case PrimitiveType::TYPE_DATETIME:
313
162k
    case PrimitiveType::TYPE_DATEV2:
314
318k
    case PrimitiveType::TYPE_DATETIMEV2:
315
318k
    case PrimitiveType::TYPE_TIMEV2:
316
318k
        return create_datelike_wrapper(context, from_type, to_type->get_primitive_type());
317
581
    case PrimitiveType::TYPE_TIMESTAMPTZ:
318
581
        return create_timestamptz_wrapper(context, from_type);
319
85.4k
    case PrimitiveType::TYPE_IPV4:
320
245k
    case PrimitiveType::TYPE_IPV6:
321
245k
        return create_ip_wrapper(context, from_type, to_type->get_primitive_type());
322
287
    case PrimitiveType::TYPE_DECIMALV2:
323
10.2k
    case PrimitiveType::TYPE_DECIMAL32:
324
35.1k
    case PrimitiveType::TYPE_DECIMAL64:
325
212k
    case PrimitiveType::TYPE_DECIMAL128I:
326
223k
    case PrimitiveType::TYPE_DECIMAL256:
327
223k
        return create_decimal_wrapper(context, from_type, to_type->get_primitive_type());
328
20
    case PrimitiveType::TYPE_CHAR:
329
7.86k
    case PrimitiveType::TYPE_VARCHAR:
330
108k
    case PrimitiveType::TYPE_STRING:
331
108k
        return create_string_wrapper(from_type);
332
167k
    case PrimitiveType::TYPE_ARRAY:
333
167k
        return create_array_wrapper(context, from_type,
334
167k
                                    static_cast<const DataTypeArray&>(*to_type));
335
3.04k
    case PrimitiveType::TYPE_STRUCT:
336
3.04k
        return create_struct_wrapper(context, from_type,
337
3.04k
                                     static_cast<const DataTypeStruct&>(*to_type));
338
2.49k
    case PrimitiveType::TYPE_MAP:
339
2.49k
        return create_map_wrapper(context, from_type, static_cast<const DataTypeMap&>(*to_type));
340
3
    case PrimitiveType::TYPE_HLL:
341
3
        return create_hll_wrapper(context, from_type, static_cast<const DataTypeHLL&>(*to_type));
342
3
    case PrimitiveType::TYPE_BITMAP:
343
3
        return create_bitmap_wrapper(context, from_type,
344
3
                                     static_cast<const DataTypeBitMap&>(*to_type));
345
1
    case PrimitiveType::TYPE_QUANTILE_STATE:
346
1
        return create_quantile_state_wrapper(context, from_type,
347
1
                                             static_cast<const DataTypeQuantileState&>(*to_type));
348
59.4k
    case PrimitiveType::TYPE_JSONB:
349
59.4k
        return create_cast_to_jsonb_wrapper(from_type, static_cast<const DataTypeJsonb&>(*to_type),
350
59.4k
                                            context ? context->string_as_jsonb_string() : false);
351
239
    case PrimitiveType::TYPE_VARBINARY:
352
239
        return create_varbinary_wrapper(from_type);
353
0
    default:
354
0
        break;
355
1.46M
    }
356
357
0
    return create_unsupport_wrapper(from_type->get_name(), to_type->get_name());
358
1.46M
}
359
360
} // namespace CastWrapper
361
362
class PreparedFunctionCast : public PreparedFunctionImpl {
363
public:
364
    explicit PreparedFunctionCast(CastWrapper::WrapperType&& wrapper_function_, const char* name_)
365
1.40M
            : wrapper_function(std::move(wrapper_function_)), name(name_) {}
366
367
0
    String get_name() const override { return name; }
368
369
protected:
370
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
371
1.40M
                        uint32_t result, size_t input_rows_count) const override {
372
1.40M
        return wrapper_function(context, block, arguments, result, input_rows_count, nullptr);
373
1.40M
    }
374
375
1.40M
    bool use_default_implementation_for_nulls() const override { return false; }
376
1.40M
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
377
378
private:
379
    CastWrapper::WrapperType wrapper_function;
380
    const char* name;
381
};
382
383
class FunctionCast final : public IFunctionBase {
384
public:
385
    FunctionCast(const char* name_, DataTypes argument_types_, DataTypePtr return_type_)
386
1.30M
            : name(name_),
387
1.30M
              argument_types(std::move(argument_types_)),
388
1.30M
              return_type(std::move(return_type_)) {}
389
390
1.40M
    const DataTypes& get_argument_types() const override { return argument_types; }
391
1.40M
    const DataTypePtr& get_return_type() const override { return return_type; }
392
393
    PreparedFunctionPtr prepare(FunctionContext* context, const Block& /*sample_block*/,
394
                                const ColumnNumbers& /*arguments*/,
395
1.40M
                                uint32_t /*result*/) const override {
396
1.40M
        return std::make_shared<PreparedFunctionCast>(
397
1.40M
                CastWrapper::prepare_unpack_dictionaries(context, get_argument_types()[0],
398
1.40M
                                                         get_return_type()),
399
1.40M
                name);
400
1.40M
    }
401
402
0
    String get_name() const override { return name; }
403
404
0
    bool is_use_default_implementation_for_constants() const override { return true; }
405
406
private:
407
    const char* name = nullptr;
408
409
    DataTypes argument_types;
410
    DataTypePtr return_type;
411
};
412
413
class FunctionBuilderCast : public FunctionBuilderImpl {
414
public:
415
    static constexpr auto name = "CAST";
416
1.30M
    static FunctionBuilderPtr create() { return std::make_shared<FunctionBuilderCast>(); }
417
418
1.30M
    FunctionBuilderCast() = default;
419
420
1
    String get_name() const override { return name; }
421
422
0
    size_t get_number_of_arguments() const override { return 2; }
423
424
0
    ColumnNumbers get_arguments_that_are_always_constant() const override { return {1}; }
425
426
protected:
427
    FunctionBasePtr build_impl(const ColumnsWithTypeAndName& arguments,
428
1.30M
                               const DataTypePtr& return_type) const override {
429
1.30M
        DataTypes data_types(arguments.size());
430
431
3.89M
        for (size_t i = 0; i < arguments.size(); ++i) {
432
2.59M
            data_types[i] = arguments[i].type;
433
2.59M
        }
434
435
1.30M
        return std::make_shared<FunctionCast>(name, data_types, return_type);
436
1.30M
    }
437
438
1.30M
    bool skip_return_type_check() const override { return true; }
439
0
    DataTypePtr get_return_type_impl(const ColumnsWithTypeAndName& arguments) const override {
440
0
        return nullptr;
441
0
    }
442
443
0
    bool use_default_implementation_for_nulls() const override { return false; }
444
};
445
446
7
void register_function_cast(SimpleFunctionFactory& factory) {
447
7
    factory.register_function<FunctionBuilderCast>();
448
7
}
449
} // namespace doris