Coverage Report

Created: 2026-10-28 19:36

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/cast/cast_to_boolean.h
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
#pragma once
19
20
#include "core/types.h"
21
#include "exprs/function/cast/cast_base.h"
22
#include "util/string_parser.hpp"
23
24
namespace doris {
25
26
struct CastToBool {
27
    template <class SRC>
28
    static inline bool from_number(const SRC& from, UInt8& to, CastParameters& params);
29
30
    template <class SRC>
31
    static inline bool from_decimal(const SRC& from, UInt8& to, UInt32 precision, UInt32 scale,
32
                                    CastParameters& params);
33
34
    static inline bool from_string(const StringRef& from, UInt8& to, CastParameters& params);
35
};
36
37
template <>
38
4
inline bool CastToBool::from_number(const UInt8& from, UInt8& to, CastParameters&) {
39
4
    to = from;
40
4
    return true;
41
4
}
42
43
template <>
44
2
inline bool CastToBool::from_number(const Int8& from, UInt8& to, CastParameters&) {
45
2
    to = (from != 0);
46
2
    return true;
47
2
}
48
template <>
49
2
inline bool CastToBool::from_number(const Int16& from, UInt8& to, CastParameters&) {
50
2
    to = (from != 0);
51
2
    return true;
52
2
}
53
template <>
54
8
inline bool CastToBool::from_number(const Int32& from, UInt8& to, CastParameters&) {
55
8
    to = (from != 0);
56
8
    return true;
57
8
}
58
template <>
59
19
inline bool CastToBool::from_number(const Int64& from, UInt8& to, CastParameters&) {
60
19
    to = (from != 0);
61
19
    return true;
62
19
}
63
template <>
64
7
inline bool CastToBool::from_number(const Int128& from, UInt8& to, CastParameters&) {
65
7
    to = (from != 0);
66
7
    return true;
67
7
}
68
69
template <>
70
15
inline bool CastToBool::from_number(const Float32& from, UInt8& to, CastParameters&) {
71
15
    to = (from != 0);
72
15
    return true;
73
15
}
74
template <>
75
16
inline bool CastToBool::from_number(const Float64& from, UInt8& to, CastParameters&) {
76
16
    to = (from != 0);
77
16
    return true;
78
16
}
79
80
template <>
81
inline bool CastToBool::from_decimal(const Decimal32& from, UInt8& to, UInt32, UInt32,
82
15
                                     CastParameters&) {
83
15
    to = (from.value != 0);
84
15
    return true;
85
15
}
86
87
template <>
88
inline bool CastToBool::from_decimal(const Decimal64& from, UInt8& to, UInt32, UInt32,
89
15
                                     CastParameters&) {
90
15
    to = (from.value != 0);
91
15
    return true;
92
15
}
93
94
template <>
95
inline bool CastToBool::from_decimal(const DecimalV2Value& from, UInt8& to, UInt32, UInt32,
96
14
                                     CastParameters&) {
97
14
    to = (from.value() != 0);
98
14
    return true;
99
14
}
100
101
template <>
102
inline bool CastToBool::from_decimal(const Decimal128V3& from, UInt8& to, UInt32, UInt32,
103
15
                                     CastParameters&) {
104
15
    to = (from.value != 0);
105
15
    return true;
106
15
}
107
108
template <>
109
inline bool CastToBool::from_decimal(const Decimal256& from, UInt8& to, UInt32, UInt32,
110
15
                                     CastParameters&) {
111
15
    to = (from.value != 0);
112
15
    return true;
113
15
}
114
115
11.6k
inline bool CastToBool::from_string(const StringRef& from, UInt8& to, CastParameters&) {
116
11.6k
    StringParser::ParseResult result;
117
11.6k
    to = StringParser::string_to_bool(from.data, from.size, &result);
118
11.6k
    return result == StringParser::PARSE_SUCCESS;
119
11.6k
}
120
121
template <CastModeType Mode>
122
class CastToImpl<Mode, DataTypeString, DataTypeBool> : public CastToBase {
123
public:
124
    Status execute_impl(RuntimeState* /*state*/, const ColumnWithTypeAndName& source_column,
125
                        ColumnWithTypeAndName& target_column, size_t /*input_rows_count*/,
126
14
                        const NullMap::value_type* null_map = nullptr) const override {
127
14
        const auto* col_from =
128
14
                assert_cast<const DataTypeString::ColumnType*>(source_column.column.get());
129
14
        auto nested_to_type = remove_nullable(target_column.type);
130
14
        auto serde = nested_to_type->get_serde();
131
14
        if constexpr (Mode == CastModeType::NonStrictMode) {
132
2
            auto nullable_col_to = create_empty_nullable_column(nested_to_type);
133
2
            RETURN_IF_ERROR(serde->from_string_batch(*col_from, *nullable_col_to, {}));
134
2
            target_column.column = std::move(nullable_col_to);
135
12
        } else {
136
12
            MutableColumnPtr column_to = nested_to_type->create_column();
137
12
            RETURN_IF_ERROR(
138
12
                    serde->from_string_strict_mode_batch(*col_from, *column_to, {}, null_map));
139
2
            target_column.column = std::move(column_to);
140
2
        }
141
0
        return Status::OK();
142
14
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeStringENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
126
12
                        const NullMap::value_type* null_map = nullptr) const override {
127
12
        const auto* col_from =
128
12
                assert_cast<const DataTypeString::ColumnType*>(source_column.column.get());
129
12
        auto nested_to_type = remove_nullable(target_column.type);
130
12
        auto serde = nested_to_type->get_serde();
131
        if constexpr (Mode == CastModeType::NonStrictMode) {
132
            auto nullable_col_to = create_empty_nullable_column(nested_to_type);
133
            RETURN_IF_ERROR(serde->from_string_batch(*col_from, *nullable_col_to, {}));
134
            target_column.column = std::move(nullable_col_to);
135
12
        } else {
136
12
            MutableColumnPtr column_to = nested_to_type->create_column();
137
12
            RETURN_IF_ERROR(
138
12
                    serde->from_string_strict_mode_batch(*col_from, *column_to, {}, null_map));
139
2
            target_column.column = std::move(column_to);
140
2
        }
141
0
        return Status::OK();
142
12
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeStringENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
126
2
                        const NullMap::value_type* null_map = nullptr) const override {
127
2
        const auto* col_from =
128
2
                assert_cast<const DataTypeString::ColumnType*>(source_column.column.get());
129
2
        auto nested_to_type = remove_nullable(target_column.type);
130
2
        auto serde = nested_to_type->get_serde();
131
2
        if constexpr (Mode == CastModeType::NonStrictMode) {
132
2
            auto nullable_col_to = create_empty_nullable_column(nested_to_type);
133
2
            RETURN_IF_ERROR(serde->from_string_batch(*col_from, *nullable_col_to, {}));
134
2
            target_column.column = std::move(nullable_col_to);
135
        } else {
136
            MutableColumnPtr column_to = nested_to_type->create_column();
137
            RETURN_IF_ERROR(
138
                    serde->from_string_strict_mode_batch(*col_from, *column_to, {}, null_map));
139
            target_column.column = std::move(column_to);
140
        }
141
0
        return Status::OK();
142
2
    }
143
};
144
template <CastModeType AllMode, typename NumberType>
145
    requires(IsDataTypeNumber<NumberType>)
146
class CastToImpl<AllMode, NumberType, DataTypeBool> : public CastToBase {
147
public:
148
    Status execute_impl(RuntimeState* state, const ColumnWithTypeAndName& source_column,
149
                        ColumnWithTypeAndName& target_column, size_t input_rows_count,
150
16
                        const NullMap::value_type* null_map = nullptr) const override {
151
16
        const auto* col_from =
152
16
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
16
        DataTypeBool::ColumnType::MutablePtr col_to =
154
16
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
16
        CastParameters params;
157
16
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
16
        const auto* from_data = col_from->get_data().data();
159
16
        auto* to_data = col_to->get_data().data();
160
74
        for (size_t i = 0; i < input_rows_count; ++i) {
161
58
            if (null_map != nullptr && null_map[i] != 0) {
162
1
                continue;
163
1
            }
164
57
            CastToBool::from_number(from_data[i], to_data[i], params);
165
57
        }
166
167
16
        target_column.column = std::move(col_to);
168
16
        return Status::OK();
169
16
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEES4_E12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS8_mPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEES4_E12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS8_mPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
4
        for (size_t i = 0; i < input_rows_count; ++i) {
161
3
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
3
            CastToBool::from_number(from_data[i], to_data[i], params);
165
3
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
4
        for (size_t i = 0; i < input_rows_count; ++i) {
161
3
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
3
            CastToBool::from_number(from_data[i], to_data[i], params);
165
3
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
4
        for (size_t i = 0; i < input_rows_count; ++i) {
161
3
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
3
            CastToBool::from_number(from_data[i], to_data[i], params);
165
3
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
7
                        const NullMap::value_type* null_map = nullptr) const override {
151
7
        const auto* col_from =
152
7
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
7
        DataTypeBool::ColumnType::MutablePtr col_to =
154
7
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
7
        CastParameters params;
157
7
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
7
        const auto* from_data = col_from->get_data().data();
159
7
        auto* to_data = col_to->get_data().data();
160
22
        for (size_t i = 0; i < input_rows_count; ++i) {
161
15
            if (null_map != nullptr && null_map[i] != 0) {
162
1
                continue;
163
1
            }
164
14
            CastToBool::from_number(from_data[i], to_data[i], params);
165
14
        }
166
167
7
        target_column.column = std::move(col_to);
168
7
        return Status::OK();
169
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
4
        for (size_t i = 0; i < input_rows_count; ++i) {
161
3
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
3
            CastToBool::from_number(from_data[i], to_data[i], params);
165
3
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
4
        for (size_t i = 0; i < input_rows_count; ++i) {
161
3
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
3
            CastToBool::from_number(from_data[i], to_data[i], params);
165
3
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
8
        for (size_t i = 0; i < input_rows_count; ++i) {
161
7
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
7
            CastToBool::from_number(from_data[i], to_data[i], params);
165
7
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
8
        for (size_t i = 0; i < input_rows_count; ++i) {
161
7
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
7
            CastToBool::from_number(from_data[i], to_data[i], params);
165
7
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
8
        for (size_t i = 0; i < input_rows_count; ++i) {
161
7
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
7
            CastToBool::from_number(from_data[i], to_data[i], params);
165
7
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEENS2_ILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERS9_mPKh
Line
Count
Source
150
1
                        const NullMap::value_type* null_map = nullptr) const override {
151
1
        const auto* col_from =
152
1
                assert_cast<const typename NumberType::ColumnType*>(source_column.column.get());
153
1
        DataTypeBool::ColumnType::MutablePtr col_to =
154
1
                DataTypeBool::ColumnType::create(input_rows_count);
155
156
1
        CastParameters params;
157
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
158
1
        const auto* from_data = col_from->get_data().data();
159
1
        auto* to_data = col_to->get_data().data();
160
8
        for (size_t i = 0; i < input_rows_count; ++i) {
161
7
            if (null_map != nullptr && null_map[i] != 0) {
162
0
                continue;
163
0
            }
164
7
            CastToBool::from_number(from_data[i], to_data[i], params);
165
7
        }
166
167
1
        target_column.column = std::move(col_to);
168
1
        return Status::OK();
169
1
    }
170
};
171
172
template <CastModeType AllMode, typename DecimalType>
173
    requires(IsDataTypeDecimal<DecimalType>)
174
class CastToImpl<AllMode, DecimalType, DataTypeBool> : public CastToBase {
175
public:
176
    Status execute_impl(RuntimeState* state, const ColumnWithTypeAndName& source_column,
177
                        ColumnWithTypeAndName& target_column, size_t input_rows_count,
178
10
                        const NullMap::value_type* null_map = nullptr) const override {
179
10
        const auto* col_from =
180
10
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
10
        const auto type_from = source_column.type;
182
10
        DataTypeBool::ColumnType::MutablePtr col_to =
183
10
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
10
        CastParameters params;
186
10
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
10
        auto precision = type_from->get_precision();
189
10
        auto scale = type_from->get_scale();
190
10
        const auto* from_data = col_from->get_data().data();
191
10
        auto* to_data = col_to->get_data().data();
192
80
        for (size_t i = 0; i < input_rows_count; ++i) {
193
70
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
70
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
70
        }
198
199
10
        target_column.column = std::move(col_to);
200
10
        return Status::OK();
201
10
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_2EEEE12execute_implEPNS_12RuntimeStateERKNS_21ColumnWithTypeAndNameERSA_mPKh
Line
Count
Source
178
1
                        const NullMap::value_type* null_map = nullptr) const override {
179
1
        const auto* col_from =
180
1
                assert_cast<const typename DecimalType::ColumnType*>(source_column.column.get());
181
1
        const auto type_from = source_column.type;
182
1
        DataTypeBool::ColumnType::MutablePtr col_to =
183
1
                DataTypeBool::ColumnType::create(input_rows_count);
184
185
1
        CastParameters params;
186
1
        params.is_strict = (AllMode == CastModeType::StrictMode);
187
188
1
        auto precision = type_from->get_precision();
189
1
        auto scale = type_from->get_scale();
190
1
        const auto* from_data = col_from->get_data().data();
191
1
        auto* to_data = col_to->get_data().data();
192
8
        for (size_t i = 0; i < input_rows_count; ++i) {
193
7
            if (null_map != nullptr && null_map[i] != 0) {
194
0
                continue;
195
0
            }
196
7
            CastToBool::from_decimal(from_data[i], to_data[i], precision, scale, params);
197
7
        }
198
199
1
        target_column.column = std::move(col_to);
200
1
        return Status::OK();
201
1
    }
202
};
203
204
} // namespace doris