Coverage Report

Created: 2026-03-16 08:08

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/vcase_expr.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 <string>
21
22
#include "common/exception.h"
23
#include "common/status.h"
24
#include "core/column/column_array.h"
25
#include "core/column/column_complex.h"
26
#include "core/column/column_const.h"
27
#include "core/column/column_decimal.h"
28
#include "core/column/column_map.h"
29
#include "core/column/column_nullable.h"
30
#include "core/column/column_struct.h"
31
#include "core/column/column_variant.h"
32
#include "core/data_type/define_primitive_type.h"
33
#include "core/data_type/primitive_type.h"
34
#include "exprs/function/function.h"
35
#include "exprs/function_context.h"
36
#include "exprs/vexpr.h"
37
38
namespace doris {
39
class RowDescriptor;
40
class RuntimeState;
41
class TExprNode;
42
43
class Block;
44
} // namespace doris
45
46
namespace doris {
47
48
class VCaseExpr final : public VExpr {
49
    ENABLE_FACTORY_CREATOR(VCaseExpr);
50
51
public:
52
    VCaseExpr(const TExprNode& node);
53
    ~VCaseExpr() override = default;
54
    Status execute_column(VExprContext* context, const Block* block, Selector* selector,
55
                          size_t count, ColumnPtr& result_column) const override;
56
    Status prepare(RuntimeState* state, const RowDescriptor& desc, VExprContext* context) override;
57
    Status open(RuntimeState* state, VExprContext* context,
58
                FunctionContext::FunctionStateScope scope) override;
59
    void close(VExprContext* context, FunctionContext::FunctionStateScope scope) override;
60
    const std::string& expr_name() const override;
61
    std::string debug_string() const override;
62
63
private:
64
    template <typename IndexType, typename ColumnType>
65
    ColumnPtr _execute_update_result_impl(const IndexType* then_idx,
66
                                          std::vector<ColumnPtr>& then_columns,
67
341
                                          size_t rows_count) const {
68
341
        auto result_column_ptr = data_type()->create_column();
69
341
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
141
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
141
            if (data_type()->is_nullable()) {
83
63
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
63
                                                                  then_columns, rows_count);
85
78
            } else {
86
78
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
78
                                                                   then_columns, rows_count);
88
78
            }
89
200
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
24
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
24
                                                              then_columns, rows_count);
93
176
        } else {
94
176
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
176
                                                           then_columns, rows_count);
96
176
        }
97
341
        return result_column_ptr;
98
341
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE2EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE3EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE4EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE5EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE6EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE7EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE8EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE9EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_9ColumnStrIjEEEENS_3COWINS_7IColumnEE13immutable_ptrIS5_EEPKT_RSt6vectorIS8_SaIS8_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE11EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE12EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE25EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE26EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE42EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE37EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnVectorILNS_13PrimitiveTypeE36EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_11ColumnArrayEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_9ColumnMapEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_12ColumnStructEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_13ColumnVariantEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE2EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE3EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
34
                                          size_t rows_count) const {
68
34
        auto result_column_ptr = data_type()->create_column();
69
34
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
34
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
5
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
5
                                                              then_columns, rows_count);
93
29
        } else {
94
29
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
29
                                                           then_columns, rows_count);
96
29
        }
97
34
        return result_column_ptr;
98
34
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE4EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE5EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
12
                                          size_t rows_count) const {
68
12
        auto result_column_ptr = data_type()->create_column();
69
12
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
12
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
12
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
12
                                                              then_columns, rows_count);
93
12
        } else {
94
0
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
0
                                                           then_columns, rows_count);
96
0
        }
97
12
        return result_column_ptr;
98
12
    }
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE6EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
147
                                          size_t rows_count) const {
68
147
        auto result_column_ptr = data_type()->create_column();
69
147
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
147
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
2
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
2
                                                              then_columns, rows_count);
93
145
        } else {
94
145
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
145
                                                           then_columns, rows_count);
96
145
        }
97
147
        return result_column_ptr;
98
147
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE7EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE8EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE9EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
3
                                          size_t rows_count) const {
68
3
        auto result_column_ptr = data_type()->create_column();
69
3
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
3
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
3
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
3
                                                              then_columns, rows_count);
93
3
        } else {
94
0
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
0
                                                           then_columns, rows_count);
96
0
        }
97
3
        return result_column_ptr;
98
3
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
1
                                          size_t rows_count) const {
68
1
        auto result_column_ptr = data_type()->create_column();
69
1
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
1
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
1
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
1
                                                              then_columns, rows_count);
93
1
        } else {
94
0
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
0
                                                           then_columns, rows_count);
96
0
        }
97
1
        return result_column_ptr;
98
1
    }
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
1
                                          size_t rows_count) const {
68
1
        auto result_column_ptr = data_type()->create_column();
69
1
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
1
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
1
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
1
                                                              then_columns, rows_count);
93
1
        } else {
94
0
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
0
                                                           then_columns, rows_count);
96
0
        }
97
1
        return result_column_ptr;
98
1
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_9ColumnStrIjEEEENS_3COWINS_7IColumnEE13immutable_ptrIS5_EEPKT_RSt6vectorIS8_SaIS8_EEm
Line
Count
Source
67
141
                                          size_t rows_count) const {
68
141
        auto result_column_ptr = data_type()->create_column();
69
141
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
141
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
141
            if (data_type()->is_nullable()) {
83
63
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
63
                                                                  then_columns, rows_count);
85
78
            } else {
86
78
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
78
                                                                   then_columns, rows_count);
88
78
            }
89
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
                                                              then_columns, rows_count);
93
        } else {
94
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
                                                           then_columns, rows_count);
96
        }
97
141
        return result_column_ptr;
98
141
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE11EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE12EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
_ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE25EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Line
Count
Source
67
2
                                          size_t rows_count) const {
68
2
        auto result_column_ptr = data_type()->create_column();
69
2
        result_column_ptr->reserve(rows_count);
70
        if constexpr (std::is_same_v<ColumnType, ColumnString> ||
71
                      std::is_same_v<ColumnType, ColumnBitmap> ||
72
                      std::is_same_v<ColumnType, ColumnArray> ||
73
                      std::is_same_v<ColumnType, ColumnMap> ||
74
                      std::is_same_v<ColumnType, ColumnStruct> ||
75
                      std::is_same_v<ColumnType, ColumnVariant> ||
76
                      std::is_same_v<ColumnType, ColumnHLL> ||
77
                      std::is_same_v<ColumnType, ColumnQuantileState> ||
78
                      std::is_same_v<ColumnType, ColumnIPv4> ||
79
                      std::is_same_v<ColumnType, ColumnIPv6>) {
80
            // result_column and all then_column is not nullable.
81
            // can't simd when type is string.
82
            if (data_type()->is_nullable()) {
83
                update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
84
                                                                  then_columns, rows_count);
85
            } else {
86
                update_result_normal<IndexType, ColumnType, false>(result_column_ptr, then_idx,
87
                                                                   then_columns, rows_count);
88
            }
89
2
        } else if (data_type()->is_nullable()) {
90
            // result_column and all then_column is nullable.
91
0
            update_result_normal<IndexType, ColumnType, true>(result_column_ptr, then_idx,
92
0
                                                              then_columns, rows_count);
93
2
        } else {
94
2
            update_result_auto_simd<IndexType, ColumnType>(result_column_ptr, then_idx,
95
2
                                                           then_columns, rows_count);
96
2
        }
97
2
        return result_column_ptr;
98
2
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE26EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE42EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE37EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnVectorILNS_13PrimitiveTypeE36EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_11ColumnArrayEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_9ColumnMapEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_12ColumnStructEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_13ColumnVariantEEENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEPKT_RSt6vectorIS7_SaIS7_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr27_execute_update_result_implIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEEEENS_3COWINS_7IColumnEE13immutable_ptrIS6_EEPKT_RSt6vectorIS9_SaIS9_EEm
99
100
    template <typename IndexType>
101
    ColumnPtr _execute_update_result(const IndexType* then_idx,
102
                                     std::vector<ColumnPtr>& then_columns,
103
341
                                     size_t rows_count) const {
104
341
#define CASE_TYPE(ptype, coltype) \
105
341
    case PrimitiveType::ptype:    \
106
341
        return _execute_update_result_impl<IndexType, coltype>(then_idx, then_columns, rows_count);
107
108
341
        switch (data_type()->get_primitive_type()) {
109
0
            CASE_TYPE(TYPE_BOOLEAN, ColumnUInt8)
110
34
            CASE_TYPE(TYPE_TINYINT, ColumnInt8)
111
0
            CASE_TYPE(TYPE_SMALLINT, ColumnInt16)
112
12
            CASE_TYPE(TYPE_INT, ColumnInt32)
113
147
            CASE_TYPE(TYPE_BIGINT, ColumnInt64)
114
0
            CASE_TYPE(TYPE_LARGEINT, ColumnInt128)
115
0
            CASE_TYPE(TYPE_FLOAT, ColumnFloat32)
116
3
            CASE_TYPE(TYPE_DOUBLE, ColumnFloat64)
117
0
            CASE_TYPE(TYPE_DECIMAL32, ColumnDecimal32)
118
0
            CASE_TYPE(TYPE_DECIMAL64, ColumnDecimal64)
119
1
            CASE_TYPE(TYPE_DECIMAL256, ColumnDecimal256)
120
1
            CASE_TYPE(TYPE_DECIMAL128I, ColumnDecimal128V3)
121
0
            CASE_TYPE(TYPE_DECIMALV2, ColumnDecimal128V2)
122
0
            CASE_TYPE(TYPE_STRING, ColumnString)
123
0
            CASE_TYPE(TYPE_CHAR, ColumnString)
124
141
            CASE_TYPE(TYPE_VARCHAR, ColumnString)
125
0
            CASE_TYPE(TYPE_JSONB, ColumnString)
126
0
            CASE_TYPE(TYPE_DATE, ColumnDate)
127
0
            CASE_TYPE(TYPE_DATETIME, ColumnDateTime)
128
2
            CASE_TYPE(TYPE_DATEV2, ColumnDateV2)
129
0
            CASE_TYPE(TYPE_DATETIMEV2, ColumnDateTimeV2)
130
0
            CASE_TYPE(TYPE_TIMESTAMPTZ, ColumnTimeStampTz)
131
0
            CASE_TYPE(TYPE_IPV6, ColumnIPv6)
132
0
            CASE_TYPE(TYPE_IPV4, ColumnIPv4)
133
0
            CASE_TYPE(TYPE_ARRAY, ColumnArray)
134
0
            CASE_TYPE(TYPE_MAP, ColumnMap)
135
0
            CASE_TYPE(TYPE_STRUCT, ColumnStruct)
136
0
            CASE_TYPE(TYPE_VARIANT, ColumnVariant)
137
0
            CASE_TYPE(TYPE_BITMAP, ColumnBitmap)
138
0
            CASE_TYPE(TYPE_HLL, ColumnHLL)
139
0
            CASE_TYPE(TYPE_QUANTILE_STATE, ColumnQuantileState)
140
0
        default:
141
0
            throw Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, "argument_type {} not supported",
142
0
                            data_type()->get_name());
143
341
        }
144
341
#undef CASE_TYPE
145
341
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr22_execute_update_resultItEENS_3COWINS_7IColumnEE13immutable_ptrIS3_EEPKT_RSt6vectorIS6_SaIS6_EEm
_ZNK5doris9VCaseExpr22_execute_update_resultIhEENS_3COWINS_7IColumnEE13immutable_ptrIS3_EEPKT_RSt6vectorIS6_SaIS6_EEm
Line
Count
Source
103
341
                                     size_t rows_count) const {
104
341
#define CASE_TYPE(ptype, coltype) \
105
341
    case PrimitiveType::ptype:    \
106
341
        return _execute_update_result_impl<IndexType, coltype>(then_idx, then_columns, rows_count);
107
108
341
        switch (data_type()->get_primitive_type()) {
109
0
            CASE_TYPE(TYPE_BOOLEAN, ColumnUInt8)
110
34
            CASE_TYPE(TYPE_TINYINT, ColumnInt8)
111
0
            CASE_TYPE(TYPE_SMALLINT, ColumnInt16)
112
12
            CASE_TYPE(TYPE_INT, ColumnInt32)
113
147
            CASE_TYPE(TYPE_BIGINT, ColumnInt64)
114
0
            CASE_TYPE(TYPE_LARGEINT, ColumnInt128)
115
0
            CASE_TYPE(TYPE_FLOAT, ColumnFloat32)
116
3
            CASE_TYPE(TYPE_DOUBLE, ColumnFloat64)
117
0
            CASE_TYPE(TYPE_DECIMAL32, ColumnDecimal32)
118
0
            CASE_TYPE(TYPE_DECIMAL64, ColumnDecimal64)
119
1
            CASE_TYPE(TYPE_DECIMAL256, ColumnDecimal256)
120
1
            CASE_TYPE(TYPE_DECIMAL128I, ColumnDecimal128V3)
121
0
            CASE_TYPE(TYPE_DECIMALV2, ColumnDecimal128V2)
122
0
            CASE_TYPE(TYPE_STRING, ColumnString)
123
0
            CASE_TYPE(TYPE_CHAR, ColumnString)
124
141
            CASE_TYPE(TYPE_VARCHAR, ColumnString)
125
0
            CASE_TYPE(TYPE_JSONB, ColumnString)
126
0
            CASE_TYPE(TYPE_DATE, ColumnDate)
127
0
            CASE_TYPE(TYPE_DATETIME, ColumnDateTime)
128
2
            CASE_TYPE(TYPE_DATEV2, ColumnDateV2)
129
0
            CASE_TYPE(TYPE_DATETIMEV2, ColumnDateTimeV2)
130
0
            CASE_TYPE(TYPE_TIMESTAMPTZ, ColumnTimeStampTz)
131
0
            CASE_TYPE(TYPE_IPV6, ColumnIPv6)
132
0
            CASE_TYPE(TYPE_IPV4, ColumnIPv4)
133
0
            CASE_TYPE(TYPE_ARRAY, ColumnArray)
134
0
            CASE_TYPE(TYPE_MAP, ColumnMap)
135
0
            CASE_TYPE(TYPE_STRUCT, ColumnStruct)
136
0
            CASE_TYPE(TYPE_VARIANT, ColumnVariant)
137
0
            CASE_TYPE(TYPE_BITMAP, ColumnBitmap)
138
0
            CASE_TYPE(TYPE_HLL, ColumnHLL)
139
0
            CASE_TYPE(TYPE_QUANTILE_STATE, ColumnQuantileState)
140
0
        default:
141
0
            throw Exception(ErrorCode::NOT_IMPLEMENTED_ERROR, "argument_type {} not supported",
142
0
                            data_type()->get_name());
143
341
        }
144
341
#undef CASE_TYPE
145
341
    }
146
147
    template <typename IndexType, typename ColumnType, bool then_null>
148
    void update_result_normal(MutableColumnPtr& result_column_ptr,
149
                              const IndexType* __restrict then_idx,
150
165
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
165
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
165
        std::vector<uint8_t> is_consts(then_columns.size());
153
165
        std::vector<uint8_t> is_nullable(then_columns.size());
154
550
        for (size_t i = 0; i < then_columns.size(); i++) {
155
385
            if (!then_columns[i]) {
156
49
                continue;
157
49
            }
158
336
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
336
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
336
        }
161
162
165
        auto* raw_result_column = result_column_ptr.get();
163
5.02k
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
4.85k
            if (!_has_else_expr && !then_idx[row_idx]) {
165
14
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
14
                        ->insert_default();
167
14
                continue;
168
14
            }
169
4.84k
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
4.84k
            if constexpr (then_null) {
171
4.54k
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
4.54k
                        result_column_ptr.get());
173
4.54k
                if (is_nullable[then_idx[row_idx]]) {
174
3.71k
                    nullable->insert_from_with_type<ColumnType>(
175
3.71k
                            *raw_then_columns[then_idx[row_idx]], target);
176
3.71k
                } else {
177
836
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
836
                            nullable->get_nested_column_ptr().get());
179
836
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
836
                    nullable->push_false_to_nullmap(1);
181
836
                }
182
4.54k
            } else {
183
299
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
299
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
299
            }
186
4.84k
        }
187
165
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE2EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE3EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE4EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE5EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE6EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE7EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE8EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE9EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_9ColumnStrIjEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS5_EEPKT_RSt6vectorINS6_13immutable_ptrIS5_EESaISF_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_9ColumnStrIjEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS5_EEPKT_RSt6vectorINS6_13immutable_ptrIS5_EESaISF_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE11EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE12EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE25EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE26EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE42EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE37EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE37EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE36EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnVectorILNS_13PrimitiveTypeE36EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_11ColumnArrayELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_11ColumnArrayELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_9ColumnMapELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_9ColumnMapELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnStructELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_12ColumnStructELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnVariantELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_13ColumnVariantELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalItNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE2EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE3EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
5
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
5
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
5
        std::vector<uint8_t> is_consts(then_columns.size());
153
5
        std::vector<uint8_t> is_nullable(then_columns.size());
154
16
        for (size_t i = 0; i < then_columns.size(); i++) {
155
11
            if (!then_columns[i]) {
156
5
                continue;
157
5
            }
158
6
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
6
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
6
        }
161
162
5
        auto* raw_result_column = result_column_ptr.get();
163
13
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
8
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
8
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
8
            if constexpr (then_null) {
171
8
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
8
                        result_column_ptr.get());
173
8
                if (is_nullable[then_idx[row_idx]]) {
174
0
                    nullable->insert_from_with_type<ColumnType>(
175
0
                            *raw_then_columns[then_idx[row_idx]], target);
176
8
                } else {
177
8
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
8
                            nullable->get_nested_column_ptr().get());
179
8
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
8
                    nullable->push_false_to_nullmap(1);
181
8
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
8
        }
187
5
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE4EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE5EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
12
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
12
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
12
        std::vector<uint8_t> is_consts(then_columns.size());
153
12
        std::vector<uint8_t> is_nullable(then_columns.size());
154
29
        for (size_t i = 0; i < then_columns.size(); i++) {
155
17
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
17
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
17
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
17
        }
161
162
12
        auto* raw_result_column = result_column_ptr.get();
163
2.08k
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
2.07k
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
2.07k
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
2.07k
            if constexpr (then_null) {
171
2.07k
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
2.07k
                        result_column_ptr.get());
173
2.07k
                if (is_nullable[then_idx[row_idx]]) {
174
1.79k
                    nullable->insert_from_with_type<ColumnType>(
175
1.79k
                            *raw_then_columns[then_idx[row_idx]], target);
176
1.79k
                } else {
177
272
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
272
                            nullable->get_nested_column_ptr().get());
179
272
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
272
                    nullable->push_false_to_nullmap(1);
181
272
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
2.07k
        }
187
12
    }
_ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE6EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
2
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
2
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
2
        std::vector<uint8_t> is_consts(then_columns.size());
153
2
        std::vector<uint8_t> is_nullable(then_columns.size());
154
8
        for (size_t i = 0; i < then_columns.size(); i++) {
155
6
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
6
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
6
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
6
        }
161
162
2
        auto* raw_result_column = result_column_ptr.get();
163
2.05k
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
2.05k
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
2.05k
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
2.05k
            if constexpr (then_null) {
171
2.05k
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
2.05k
                        result_column_ptr.get());
173
2.05k
                if (is_nullable[then_idx[row_idx]]) {
174
1.78k
                    nullable->insert_from_with_type<ColumnType>(
175
1.78k
                            *raw_then_columns[then_idx[row_idx]], target);
176
1.78k
                } else {
177
272
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
272
                            nullable->get_nested_column_ptr().get());
179
272
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
272
                    nullable->push_false_to_nullmap(1);
181
272
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
2.05k
        }
187
2
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE7EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE8EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE9EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
3
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
3
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
3
        std::vector<uint8_t> is_consts(then_columns.size());
153
3
        std::vector<uint8_t> is_nullable(then_columns.size());
154
11
        for (size_t i = 0; i < then_columns.size(); i++) {
155
8
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
8
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
8
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
8
        }
161
162
3
        auto* raw_result_column = result_column_ptr.get();
163
13
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
10
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
10
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
10
            if constexpr (then_null) {
171
10
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
10
                        result_column_ptr.get());
173
10
                if (is_nullable[then_idx[row_idx]]) {
174
7
                    nullable->insert_from_with_type<ColumnType>(
175
7
                            *raw_then_columns[then_idx[row_idx]], target);
176
7
                } else {
177
3
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
3
                            nullable->get_nested_column_ptr().get());
179
3
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
3
                    nullable->push_false_to_nullmap(1);
181
3
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
10
        }
187
3
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
1
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
1
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
1
        std::vector<uint8_t> is_consts(then_columns.size());
153
1
        std::vector<uint8_t> is_nullable(then_columns.size());
154
3
        for (size_t i = 0; i < then_columns.size(); i++) {
155
2
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
2
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
2
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
2
        }
161
162
1
        auto* raw_result_column = result_column_ptr.get();
163
2
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
1
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
1
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
1
            if constexpr (then_null) {
171
1
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
1
                        result_column_ptr.get());
173
1
                if (is_nullable[then_idx[row_idx]]) {
174
1
                    nullable->insert_from_with_type<ColumnType>(
175
1
                            *raw_then_columns[then_idx[row_idx]], target);
176
1
                } else {
177
0
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
0
                            nullable->get_nested_column_ptr().get());
179
0
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
0
                    nullable->push_false_to_nullmap(1);
181
0
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
1
        }
187
1
    }
_ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
150
1
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
1
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
1
        std::vector<uint8_t> is_consts(then_columns.size());
153
1
        std::vector<uint8_t> is_nullable(then_columns.size());
154
3
        for (size_t i = 0; i < then_columns.size(); i++) {
155
2
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
2
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
2
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
2
        }
161
162
1
        auto* raw_result_column = result_column_ptr.get();
163
2
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
1
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
1
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
1
            if constexpr (then_null) {
171
1
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
1
                        result_column_ptr.get());
173
1
                if (is_nullable[then_idx[row_idx]]) {
174
1
                    nullable->insert_from_with_type<ColumnType>(
175
1
                            *raw_then_columns[then_idx[row_idx]], target);
176
1
                } else {
177
0
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
0
                            nullable->get_nested_column_ptr().get());
179
0
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
0
                    nullable->push_false_to_nullmap(1);
181
0
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
1
        }
187
1
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr20update_result_normalIhNS_9ColumnStrIjEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS5_EEPKT_RSt6vectorINS6_13immutable_ptrIS5_EESaISF_EEm
Line
Count
Source
150
63
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
63
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
63
        std::vector<uint8_t> is_consts(then_columns.size());
153
63
        std::vector<uint8_t> is_nullable(then_columns.size());
154
217
        for (size_t i = 0; i < then_columns.size(); i++) {
155
154
            if (!then_columns[i]) {
156
44
                continue;
157
44
            }
158
110
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
110
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
110
        }
161
162
63
        auto* raw_result_column = result_column_ptr.get();
163
481
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
418
            if (!_has_else_expr && !then_idx[row_idx]) {
165
14
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
14
                        ->insert_default();
167
14
                continue;
168
14
            }
169
404
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
404
            if constexpr (then_null) {
171
404
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
404
                        result_column_ptr.get());
173
404
                if (is_nullable[then_idx[row_idx]]) {
174
123
                    nullable->insert_from_with_type<ColumnType>(
175
123
                            *raw_then_columns[then_idx[row_idx]], target);
176
281
                } else {
177
281
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
281
                            nullable->get_nested_column_ptr().get());
179
281
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
281
                    nullable->push_false_to_nullmap(1);
181
281
                }
182
            } else {
183
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
            }
186
404
        }
187
63
    }
_ZNK5doris9VCaseExpr20update_result_normalIhNS_9ColumnStrIjEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS5_EEPKT_RSt6vectorINS6_13immutable_ptrIS5_EESaISF_EEm
Line
Count
Source
150
78
                              std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
151
78
        std::vector<ColumnPtr> raw_then_columns(then_columns.size());
152
78
        std::vector<uint8_t> is_consts(then_columns.size());
153
78
        std::vector<uint8_t> is_nullable(then_columns.size());
154
263
        for (size_t i = 0; i < then_columns.size(); i++) {
155
185
            if (!then_columns[i]) {
156
0
                continue;
157
0
            }
158
185
            std::tie(raw_then_columns[i], is_consts[i]) = unpack_if_const(then_columns[i]);
159
185
            is_nullable[i] = raw_then_columns[i]->is_nullable();
160
185
        }
161
162
78
        auto* raw_result_column = result_column_ptr.get();
163
377
        for (int row_idx = 0; row_idx < rows_count; row_idx++) {
164
299
            if (!_has_else_expr && !then_idx[row_idx]) {
165
0
                assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(raw_result_column)
166
0
                        ->insert_default();
167
0
                continue;
168
0
            }
169
299
            size_t target = is_consts[then_idx[row_idx]] ? 0 : row_idx;
170
            if constexpr (then_null) {
171
                auto* nullable = assert_cast<ColumnNullable*, TypeCheckOnRelease::DISABLE>(
172
                        result_column_ptr.get());
173
                if (is_nullable[then_idx[row_idx]]) {
174
                    nullable->insert_from_with_type<ColumnType>(
175
                            *raw_then_columns[then_idx[row_idx]], target);
176
                } else {
177
                    auto* nested = assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
178
                            nullable->get_nested_column_ptr().get());
179
                    nested->insert_from(*raw_then_columns[then_idx[row_idx]], target);
180
                    nullable->push_false_to_nullmap(1);
181
                }
182
299
            } else {
183
299
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
184
299
                        ->insert_from(*raw_then_columns[then_idx[row_idx]], target);
185
299
            }
186
299
        }
187
78
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE11EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE12EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE25EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE26EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE42EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE37EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE37EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE36EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnVectorILNS_13PrimitiveTypeE36EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_11ColumnArrayELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_11ColumnArrayELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_9ColumnMapELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_9ColumnMapELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnStructELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_12ColumnStructELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnVariantELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_13ColumnVariantELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS4_EEPKT_RSt6vectorINS5_13immutable_ptrIS4_EESaISE_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE22EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE19EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEELb1EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr20update_result_normalIhNS_17ColumnComplexTypeILNS_13PrimitiveTypeE24EEELb0EEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
188
189
    template <typename IndexType, typename ColumnType>
190
    void update_result_auto_simd(MutableColumnPtr& result_column_ptr,
191
                                 const IndexType* __restrict then_idx,
192
176
                                 std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
193
322
        for (auto& then_ptr : then_columns) {
194
322
            then_ptr = then_ptr->convert_to_full_column_if_const();
195
322
        }
196
197
176
        result_column_ptr->resize(rows_count);
198
176
        auto* __restrict result_raw_data =
199
176
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
200
176
                        ->get_data()
201
176
                        .data();
202
203
        // set default value
204
727
        for (int i = 0; i < rows_count; i++) {
205
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
206
                          std::is_same_v<ColumnType, ColumnDateTime> ||
207
                          std::is_same_v<ColumnType, ColumnDateV2> ||
208
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
209
10
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
210
10
                result_raw_data[i] = ColumnType::default_value();
211
541
            } else {
212
541
                result_raw_data[i] = {};
213
541
            }
214
551
        }
215
216
498
        for (IndexType i = 0; i < then_columns.size(); i++) {
217
322
            if (!then_columns[i]) {
218
0
                continue;
219
0
            }
220
322
            auto* __restrict column_raw_data =
221
322
                    assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
222
322
                            then_columns[i]->assume_mutable().get())
223
322
                            ->get_data()
224
322
                            .data();
225
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
226
                          std::is_same_v<ColumnType, ColumnDateTime> ||
227
                          std::is_same_v<ColumnType, ColumnDateV2> ||
228
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
229
6
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
230
36
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
231
30
                    result_raw_data[row_idx] = (then_idx[row_idx] == i) ? column_raw_data[row_idx]
232
30
                                                                        : result_raw_data[row_idx];
233
30
                }
234
316
            } else {
235
1.77k
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
236
1.45k
                    result_raw_data[row_idx] +=
237
1.45k
                            typename ColumnType::value_type(then_idx[row_idx] == i) *
238
1.45k
                            column_raw_data[row_idx];
239
1.45k
                }
240
316
            }
241
322
        }
242
176
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE2EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE3EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE4EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE5EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE6EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE7EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE8EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE9EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE11EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE12EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE25EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE26EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdItNS_12ColumnVectorILNS_13PrimitiveTypeE42EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE2EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE3EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
192
29
                                 std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
193
102
        for (auto& then_ptr : then_columns) {
194
102
            then_ptr = then_ptr->convert_to_full_column_if_const();
195
102
        }
196
197
29
        result_column_ptr->resize(rows_count);
198
29
        auto* __restrict result_raw_data =
199
29
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
200
29
                        ->get_data()
201
29
                        .data();
202
203
        // set default value
204
250
        for (int i = 0; i < rows_count; i++) {
205
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
206
                          std::is_same_v<ColumnType, ColumnDateTime> ||
207
                          std::is_same_v<ColumnType, ColumnDateV2> ||
208
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
209
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
210
                result_raw_data[i] = ColumnType::default_value();
211
221
            } else {
212
221
                result_raw_data[i] = {};
213
221
            }
214
221
        }
215
216
131
        for (IndexType i = 0; i < then_columns.size(); i++) {
217
102
            if (!then_columns[i]) {
218
0
                continue;
219
0
            }
220
102
            auto* __restrict column_raw_data =
221
102
                    assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
222
102
                            then_columns[i]->assume_mutable().get())
223
102
                            ->get_data()
224
102
                            .data();
225
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
226
                          std::is_same_v<ColumnType, ColumnDateTime> ||
227
                          std::is_same_v<ColumnType, ColumnDateV2> ||
228
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
229
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
230
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
231
                    result_raw_data[row_idx] = (then_idx[row_idx] == i) ? column_raw_data[row_idx]
232
                                                                        : result_raw_data[row_idx];
233
                }
234
102
            } else {
235
961
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
236
859
                    result_raw_data[row_idx] +=
237
859
                            typename ColumnType::value_type(then_idx[row_idx] == i) *
238
859
                            column_raw_data[row_idx];
239
859
                }
240
102
            }
241
102
        }
242
29
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE4EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE5EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE6EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
192
145
                                 std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
193
214
        for (auto& then_ptr : then_columns) {
194
214
            then_ptr = then_ptr->convert_to_full_column_if_const();
195
214
        }
196
197
145
        result_column_ptr->resize(rows_count);
198
145
        auto* __restrict result_raw_data =
199
145
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
200
145
                        ->get_data()
201
145
                        .data();
202
203
        // set default value
204
465
        for (int i = 0; i < rows_count; i++) {
205
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
206
                          std::is_same_v<ColumnType, ColumnDateTime> ||
207
                          std::is_same_v<ColumnType, ColumnDateV2> ||
208
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
209
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
210
                result_raw_data[i] = ColumnType::default_value();
211
320
            } else {
212
320
                result_raw_data[i] = {};
213
320
            }
214
320
        }
215
216
359
        for (IndexType i = 0; i < then_columns.size(); i++) {
217
214
            if (!then_columns[i]) {
218
0
                continue;
219
0
            }
220
214
            auto* __restrict column_raw_data =
221
214
                    assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
222
214
                            then_columns[i]->assume_mutable().get())
223
214
                            ->get_data()
224
214
                            .data();
225
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
226
                          std::is_same_v<ColumnType, ColumnDateTime> ||
227
                          std::is_same_v<ColumnType, ColumnDateV2> ||
228
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
229
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
230
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
231
                    result_raw_data[row_idx] = (then_idx[row_idx] == i) ? column_raw_data[row_idx]
232
                                                                        : result_raw_data[row_idx];
233
                }
234
214
            } else {
235
812
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
236
598
                    result_raw_data[row_idx] +=
237
598
                            typename ColumnType::value_type(then_idx[row_idx] == i) *
238
598
                            column_raw_data[row_idx];
239
598
                }
240
214
            }
241
214
        }
242
145
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE7EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE8EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE9EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_13ColumnDecimalILNS_13PrimitiveTypeE28EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_13ColumnDecimalILNS_13PrimitiveTypeE29EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_13ColumnDecimalILNS_13PrimitiveTypeE35EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_13ColumnDecimalILNS_13PrimitiveTypeE30EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_13ColumnDecimalILNS_13PrimitiveTypeE20EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE11EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE12EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
_ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE25EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Line
Count
Source
192
2
                                 std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
193
6
        for (auto& then_ptr : then_columns) {
194
6
            then_ptr = then_ptr->convert_to_full_column_if_const();
195
6
        }
196
197
2
        result_column_ptr->resize(rows_count);
198
2
        auto* __restrict result_raw_data =
199
2
                assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(result_column_ptr.get())
200
2
                        ->get_data()
201
2
                        .data();
202
203
        // set default value
204
12
        for (int i = 0; i < rows_count; i++) {
205
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
206
                          std::is_same_v<ColumnType, ColumnDateTime> ||
207
                          std::is_same_v<ColumnType, ColumnDateV2> ||
208
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
209
10
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
210
10
                result_raw_data[i] = ColumnType::default_value();
211
            } else {
212
                result_raw_data[i] = {};
213
            }
214
10
        }
215
216
8
        for (IndexType i = 0; i < then_columns.size(); i++) {
217
6
            if (!then_columns[i]) {
218
0
                continue;
219
0
            }
220
6
            auto* __restrict column_raw_data =
221
6
                    assert_cast<ColumnType*, TypeCheckOnRelease::DISABLE>(
222
6
                            then_columns[i]->assume_mutable().get())
223
6
                            ->get_data()
224
6
                            .data();
225
            if constexpr (std::is_same_v<ColumnType, ColumnDate> ||
226
                          std::is_same_v<ColumnType, ColumnDateTime> ||
227
                          std::is_same_v<ColumnType, ColumnDateV2> ||
228
                          std::is_same_v<ColumnType, ColumnDateTimeV2> ||
229
6
                          std::is_same_v<ColumnType, ColumnTimeStampTz>) {
230
36
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
231
30
                    result_raw_data[row_idx] = (then_idx[row_idx] == i) ? column_raw_data[row_idx]
232
30
                                                                        : result_raw_data[row_idx];
233
30
                }
234
            } else {
235
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
236
                    result_raw_data[row_idx] +=
237
                            typename ColumnType::value_type(then_idx[row_idx] == i) *
238
                            column_raw_data[row_idx];
239
                }
240
            }
241
6
        }
242
2
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE26EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
Unexecuted instantiation: _ZNK5doris9VCaseExpr23update_result_auto_simdIhNS_12ColumnVectorILNS_13PrimitiveTypeE42EEEEEvRNS_3COWINS_7IColumnEE11mutable_ptrIS6_EEPKT_RSt6vectorINS7_13immutable_ptrIS6_EESaISG_EEm
243
244
    template <typename IndexType>
245
    ColumnPtr _execute_impl(const std::vector<ColumnPtr>& when_columns,
246
341
                            std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
247
341
        std::vector<IndexType> then_idx(rows_count, 0);
248
341
        IndexType* __restrict then_idx_ptr = then_idx.data();
249
707
        for (IndexType i = 0; i < when_columns.size(); i++) {
250
366
            IndexType column_idx = i + 1;
251
366
            auto [raw_when_column, is_consts] = unpack_if_const(when_columns[i]);
252
253
366
            if (is_consts) {
254
0
                if (raw_when_column->get_bool(0)) {
255
0
                    for (int row_idx = 0; row_idx < rows_count; row_idx++) {
256
0
                        then_idx_ptr[row_idx] |= (!then_idx_ptr[row_idx]) * column_idx;
257
0
                    }
258
0
                    break;
259
0
                }
260
0
                continue;
261
0
            }
262
263
366
            if (raw_when_column->is_nullable()) {
264
333
                const auto* column_nullable_ptr =
265
333
                        assert_cast<const ColumnNullable*, TypeCheckOnRelease::DISABLE>(
266
333
                                raw_when_column.get());
267
333
                const auto* __restrict cond_raw_data =
268
333
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
269
333
                                column_nullable_ptr->get_nested_column_ptr().get())
270
333
                                ->get_data()
271
333
                                .data();
272
333
                if (!column_nullable_ptr->has_null()) {
273
10.0k
                    for (int row_idx = 0; row_idx < rows_count; row_idx++) {
274
9.77k
                        then_idx_ptr[row_idx] |=
275
9.77k
                                (!then_idx_ptr[row_idx]) * cond_raw_data[row_idx] * column_idx;
276
9.77k
                    }
277
253
                    continue;
278
253
                }
279
80
                const auto* __restrict cond_raw_nullmap =
280
80
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
281
80
                                column_nullable_ptr->get_null_map_column_ptr().get())
282
80
                                ->get_data()
283
80
                                .data();
284
634
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
285
554
                    then_idx_ptr[row_idx] |= (!then_idx_ptr[row_idx] * cond_raw_data[row_idx] *
286
554
                                              !cond_raw_nullmap[row_idx]) *
287
554
                                             column_idx;
288
554
                }
289
80
            } else {
290
33
                const auto* __restrict cond_raw_data =
291
33
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
292
33
                                raw_when_column.get())
293
33
                                ->get_data()
294
33
                                .data();
295
161
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
296
128
                    then_idx_ptr[row_idx] |=
297
128
                            (!then_idx_ptr[row_idx]) * cond_raw_data[row_idx] * column_idx;
298
128
                }
299
33
            }
300
366
        }
301
302
341
        return _execute_update_result<IndexType>(then_idx_ptr, then_columns, rows_count);
303
341
    }
Unexecuted instantiation: _ZNK5doris9VCaseExpr13_execute_implItEENS_3COWINS_7IColumnEE13immutable_ptrIS3_EERKSt6vectorIS6_SaIS6_EERS9_m
_ZNK5doris9VCaseExpr13_execute_implIhEENS_3COWINS_7IColumnEE13immutable_ptrIS3_EERKSt6vectorIS6_SaIS6_EERS9_m
Line
Count
Source
246
341
                            std::vector<ColumnPtr>& then_columns, size_t rows_count) const {
247
341
        std::vector<IndexType> then_idx(rows_count, 0);
248
341
        IndexType* __restrict then_idx_ptr = then_idx.data();
249
707
        for (IndexType i = 0; i < when_columns.size(); i++) {
250
366
            IndexType column_idx = i + 1;
251
366
            auto [raw_when_column, is_consts] = unpack_if_const(when_columns[i]);
252
253
366
            if (is_consts) {
254
0
                if (raw_when_column->get_bool(0)) {
255
0
                    for (int row_idx = 0; row_idx < rows_count; row_idx++) {
256
0
                        then_idx_ptr[row_idx] |= (!then_idx_ptr[row_idx]) * column_idx;
257
0
                    }
258
0
                    break;
259
0
                }
260
0
                continue;
261
0
            }
262
263
366
            if (raw_when_column->is_nullable()) {
264
333
                const auto* column_nullable_ptr =
265
333
                        assert_cast<const ColumnNullable*, TypeCheckOnRelease::DISABLE>(
266
333
                                raw_when_column.get());
267
333
                const auto* __restrict cond_raw_data =
268
333
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
269
333
                                column_nullable_ptr->get_nested_column_ptr().get())
270
333
                                ->get_data()
271
333
                                .data();
272
333
                if (!column_nullable_ptr->has_null()) {
273
10.0k
                    for (int row_idx = 0; row_idx < rows_count; row_idx++) {
274
9.77k
                        then_idx_ptr[row_idx] |=
275
9.77k
                                (!then_idx_ptr[row_idx]) * cond_raw_data[row_idx] * column_idx;
276
9.77k
                    }
277
253
                    continue;
278
253
                }
279
80
                const auto* __restrict cond_raw_nullmap =
280
80
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
281
80
                                column_nullable_ptr->get_null_map_column_ptr().get())
282
80
                                ->get_data()
283
80
                                .data();
284
634
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
285
554
                    then_idx_ptr[row_idx] |= (!then_idx_ptr[row_idx] * cond_raw_data[row_idx] *
286
554
                                              !cond_raw_nullmap[row_idx]) *
287
554
                                             column_idx;
288
554
                }
289
80
            } else {
290
33
                const auto* __restrict cond_raw_data =
291
33
                        assert_cast<const ColumnUInt8*, TypeCheckOnRelease::DISABLE>(
292
33
                                raw_when_column.get())
293
33
                                ->get_data()
294
33
                                .data();
295
161
                for (int row_idx = 0; row_idx < rows_count; row_idx++) {
296
128
                    then_idx_ptr[row_idx] |=
297
128
                            (!then_idx_ptr[row_idx]) * cond_raw_data[row_idx] * column_idx;
298
128
                }
299
33
            }
300
366
        }
301
302
341
        return _execute_update_result<IndexType>(then_idx_ptr, then_columns, rows_count);
303
341
    }
304
305
    bool _has_else_expr;
306
307
    inline static const std::string FUNCTION_NAME = "case";
308
    inline static const std::string EXPR_NAME = "vcase expr";
309
};
310
} // namespace doris