Coverage Report

Created: 2026-07-01 11:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/int_div.cpp
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
// This file is copied from
18
// https://github.com/ClickHouse/ClickHouse/blob/master/src/Functions/IntDiv.cpp
19
// and modified by Doris
20
21
#include <libdivide.h>
22
23
#include <limits>
24
#include <utility>
25
26
#include "core/data_type/data_type_number.h"
27
#include "exprs/function/simple_function_factory.h"
28
29
namespace doris {
30
31
template <typename Impl>
32
class FunctionIntDiv : public IFunction {
33
public:
34
    static constexpr auto name = "int_divide";
35
36
21
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE6createEv
Line
Count
Source
36
3
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE6createEv
Line
Count
Source
36
3
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE6createEv
Line
Count
Source
36
3
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE6createEv
Line
Count
Source
36
6
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE6createEv
Line
Count
Source
36
6
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
37
38
21
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEEC2Ev
Line
Count
Source
38
3
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEEC2Ev
Line
Count
Source
38
3
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEEC2Ev
Line
Count
Source
38
3
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEEC2Ev
Line
Count
Source
38
6
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEEC2Ev
Line
Count
Source
38
6
    FunctionIntDiv() = default;
39
40
5
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE8get_nameB5cxx11Ev
Line
Count
Source
40
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE8get_nameB5cxx11Ev
Line
Count
Source
40
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE8get_nameB5cxx11Ev
Line
Count
Source
40
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE8get_nameB5cxx11Ev
Line
Count
Source
40
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE8get_nameB5cxx11Ev
Line
Count
Source
40
1
    String get_name() const override { return name; }
41
42
11
    size_t get_number_of_arguments() const override { return 2; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE23get_number_of_argumentsEv
Line
Count
Source
42
1
    size_t get_number_of_arguments() const override { return 2; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE23get_number_of_argumentsEv
Line
Count
Source
42
1
    size_t get_number_of_arguments() const override { return 2; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE23get_number_of_argumentsEv
Line
Count
Source
42
1
    size_t get_number_of_arguments() const override { return 2; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE23get_number_of_argumentsEv
Line
Count
Source
42
4
    size_t get_number_of_arguments() const override { return 2; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE23get_number_of_argumentsEv
Line
Count
Source
42
4
    size_t get_number_of_arguments() const override { return 2; }
43
44
5
    DataTypes get_variadic_argument_types_impl() const override {
45
5
        return Impl::get_variadic_argument_types();
46
5
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE32get_variadic_argument_types_implEv
Line
Count
Source
44
1
    DataTypes get_variadic_argument_types_impl() const override {
45
1
        return Impl::get_variadic_argument_types();
46
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE32get_variadic_argument_types_implEv
Line
Count
Source
44
1
    DataTypes get_variadic_argument_types_impl() const override {
45
1
        return Impl::get_variadic_argument_types();
46
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE32get_variadic_argument_types_implEv
Line
Count
Source
44
1
    DataTypes get_variadic_argument_types_impl() const override {
45
1
        return Impl::get_variadic_argument_types();
46
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE32get_variadic_argument_types_implEv
Line
Count
Source
44
1
    DataTypes get_variadic_argument_types_impl() const override {
45
1
        return Impl::get_variadic_argument_types();
46
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE32get_variadic_argument_types_implEv
Line
Count
Source
44
1
    DataTypes get_variadic_argument_types_impl() const override {
45
1
        return Impl::get_variadic_argument_types();
46
1
    }
47
48
11
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
11
        DataTypePtr type_res =
50
11
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
11
        return make_nullable(type_res);
52
11
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Line
Count
Source
48
1
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
1
        DataTypePtr type_res =
50
1
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
1
        return make_nullable(type_res);
52
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Line
Count
Source
48
1
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
1
        DataTypePtr type_res =
50
1
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
1
        return make_nullable(type_res);
52
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Line
Count
Source
48
1
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
1
        DataTypePtr type_res =
50
1
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
1
        return make_nullable(type_res);
52
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Line
Count
Source
48
4
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
4
        DataTypePtr type_res =
50
4
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
4
        return make_nullable(type_res);
52
4
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Line
Count
Source
48
4
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
49
4
        DataTypePtr type_res =
50
4
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
51
4
        return make_nullable(type_res);
52
4
    }
53
54
22
    bool use_default_implementation_for_constants() const final { return false; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE40use_default_implementation_for_constantsEv
Line
Count
Source
54
2
    bool use_default_implementation_for_constants() const final { return false; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE40use_default_implementation_for_constantsEv
Line
Count
Source
54
2
    bool use_default_implementation_for_constants() const final { return false; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE40use_default_implementation_for_constantsEv
Line
Count
Source
54
2
    bool use_default_implementation_for_constants() const final { return false; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE40use_default_implementation_for_constantsEv
Line
Count
Source
54
8
    bool use_default_implementation_for_constants() const final { return false; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE40use_default_implementation_for_constantsEv
Line
Count
Source
54
8
    bool use_default_implementation_for_constants() const final { return false; }
55
56
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
57
11
                        uint32_t result, size_t input_rows_count) const override {
58
11
        auto& column_left = block.get_by_position(arguments[0]).column;
59
11
        auto& column_right = block.get_by_position(arguments[1]).column;
60
11
        bool is_const_left = is_column_const(*column_left);
61
11
        bool is_const_right = is_column_const(*column_right);
62
63
11
        ColumnPtr column_result = nullptr;
64
11
        if (is_const_left && is_const_right) {
65
2
            column_result = constant_constant(column_left, column_right);
66
9
        } else if (is_const_left) {
67
2
            column_result = constant_vector(column_left, column_right);
68
7
        } else if (is_const_right) {
69
2
            column_result = vector_constant(column_left, column_right);
70
5
        } else {
71
5
            column_result = vector_vector(column_left, column_right);
72
5
        }
73
11
        block.replace_by_position(result, std::move(column_result));
74
11
        return Status::OK();
75
11
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Line
Count
Source
57
1
                        uint32_t result, size_t input_rows_count) const override {
58
1
        auto& column_left = block.get_by_position(arguments[0]).column;
59
1
        auto& column_right = block.get_by_position(arguments[1]).column;
60
1
        bool is_const_left = is_column_const(*column_left);
61
1
        bool is_const_right = is_column_const(*column_right);
62
63
1
        ColumnPtr column_result = nullptr;
64
1
        if (is_const_left && is_const_right) {
65
0
            column_result = constant_constant(column_left, column_right);
66
1
        } else if (is_const_left) {
67
0
            column_result = constant_vector(column_left, column_right);
68
1
        } else if (is_const_right) {
69
0
            column_result = vector_constant(column_left, column_right);
70
1
        } else {
71
1
            column_result = vector_vector(column_left, column_right);
72
1
        }
73
1
        block.replace_by_position(result, std::move(column_result));
74
1
        return Status::OK();
75
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Line
Count
Source
57
1
                        uint32_t result, size_t input_rows_count) const override {
58
1
        auto& column_left = block.get_by_position(arguments[0]).column;
59
1
        auto& column_right = block.get_by_position(arguments[1]).column;
60
1
        bool is_const_left = is_column_const(*column_left);
61
1
        bool is_const_right = is_column_const(*column_right);
62
63
1
        ColumnPtr column_result = nullptr;
64
1
        if (is_const_left && is_const_right) {
65
0
            column_result = constant_constant(column_left, column_right);
66
1
        } else if (is_const_left) {
67
0
            column_result = constant_vector(column_left, column_right);
68
1
        } else if (is_const_right) {
69
0
            column_result = vector_constant(column_left, column_right);
70
1
        } else {
71
1
            column_result = vector_vector(column_left, column_right);
72
1
        }
73
1
        block.replace_by_position(result, std::move(column_result));
74
1
        return Status::OK();
75
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Line
Count
Source
57
1
                        uint32_t result, size_t input_rows_count) const override {
58
1
        auto& column_left = block.get_by_position(arguments[0]).column;
59
1
        auto& column_right = block.get_by_position(arguments[1]).column;
60
1
        bool is_const_left = is_column_const(*column_left);
61
1
        bool is_const_right = is_column_const(*column_right);
62
63
1
        ColumnPtr column_result = nullptr;
64
1
        if (is_const_left && is_const_right) {
65
0
            column_result = constant_constant(column_left, column_right);
66
1
        } else if (is_const_left) {
67
0
            column_result = constant_vector(column_left, column_right);
68
1
        } else if (is_const_right) {
69
0
            column_result = vector_constant(column_left, column_right);
70
1
        } else {
71
1
            column_result = vector_vector(column_left, column_right);
72
1
        }
73
1
        block.replace_by_position(result, std::move(column_result));
74
1
        return Status::OK();
75
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Line
Count
Source
57
4
                        uint32_t result, size_t input_rows_count) const override {
58
4
        auto& column_left = block.get_by_position(arguments[0]).column;
59
4
        auto& column_right = block.get_by_position(arguments[1]).column;
60
4
        bool is_const_left = is_column_const(*column_left);
61
4
        bool is_const_right = is_column_const(*column_right);
62
63
4
        ColumnPtr column_result = nullptr;
64
4
        if (is_const_left && is_const_right) {
65
1
            column_result = constant_constant(column_left, column_right);
66
3
        } else if (is_const_left) {
67
1
            column_result = constant_vector(column_left, column_right);
68
2
        } else if (is_const_right) {
69
1
            column_result = vector_constant(column_left, column_right);
70
1
        } else {
71
1
            column_result = vector_vector(column_left, column_right);
72
1
        }
73
4
        block.replace_by_position(result, std::move(column_result));
74
4
        return Status::OK();
75
4
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Line
Count
Source
57
4
                        uint32_t result, size_t input_rows_count) const override {
58
4
        auto& column_left = block.get_by_position(arguments[0]).column;
59
4
        auto& column_right = block.get_by_position(arguments[1]).column;
60
4
        bool is_const_left = is_column_const(*column_left);
61
4
        bool is_const_right = is_column_const(*column_right);
62
63
4
        ColumnPtr column_result = nullptr;
64
4
        if (is_const_left && is_const_right) {
65
1
            column_result = constant_constant(column_left, column_right);
66
3
        } else if (is_const_left) {
67
1
            column_result = constant_vector(column_left, column_right);
68
2
        } else if (is_const_right) {
69
1
            column_result = vector_constant(column_left, column_right);
70
1
        } else {
71
1
            column_result = vector_vector(column_left, column_right);
72
1
        }
73
4
        block.replace_by_position(result, std::move(column_result));
74
4
        return Status::OK();
75
4
    }
76
77
private:
78
2
    ColumnPtr constant_constant(ColumnPtr column_left, ColumnPtr column_right) const {
79
2
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
80
2
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
81
2
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
82
83
2
        ColumnPtr column_result = nullptr;
84
85
2
        column_result =
86
2
                Impl::constant_constant(column_left_ptr->template get_value<Impl::ResultType>(),
87
2
                                        column_right_ptr->template get_value<Impl::ResultType>());
88
89
2
        return ColumnConst::create(std::move(column_result), column_left->size());
90
2
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
78
1
    ColumnPtr constant_constant(ColumnPtr column_left, ColumnPtr column_right) const {
79
1
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
80
1
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
81
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
82
83
1
        ColumnPtr column_result = nullptr;
84
85
1
        column_result =
86
1
                Impl::constant_constant(column_left_ptr->template get_value<Impl::ResultType>(),
87
1
                                        column_right_ptr->template get_value<Impl::ResultType>());
88
89
1
        return ColumnConst::create(std::move(column_result), column_left->size());
90
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
78
1
    ColumnPtr constant_constant(ColumnPtr column_left, ColumnPtr column_right) const {
79
1
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
80
1
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
81
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
82
83
1
        ColumnPtr column_result = nullptr;
84
85
1
        column_result =
86
1
                Impl::constant_constant(column_left_ptr->template get_value<Impl::ResultType>(),
87
1
                                        column_right_ptr->template get_value<Impl::ResultType>());
88
89
1
        return ColumnConst::create(std::move(column_result), column_left->size());
90
1
    }
91
92
2
    ColumnPtr vector_constant(ColumnPtr column_left, ColumnPtr column_right) const {
93
2
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
94
2
        DCHECK(column_right_ptr != nullptr);
95
96
2
        return Impl::vector_constant(column_left->get_ptr(),
97
2
                                     column_right_ptr->template get_value<Impl::ResultType>());
98
2
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
92
1
    ColumnPtr vector_constant(ColumnPtr column_left, ColumnPtr column_right) const {
93
1
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
94
1
        DCHECK(column_right_ptr != nullptr);
95
96
1
        return Impl::vector_constant(column_left->get_ptr(),
97
1
                                     column_right_ptr->template get_value<Impl::ResultType>());
98
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
92
1
    ColumnPtr vector_constant(ColumnPtr column_left, ColumnPtr column_right) const {
93
1
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
94
1
        DCHECK(column_right_ptr != nullptr);
95
96
1
        return Impl::vector_constant(column_left->get_ptr(),
97
1
                                     column_right_ptr->template get_value<Impl::ResultType>());
98
1
    }
99
100
2
    ColumnPtr constant_vector(ColumnPtr column_left, ColumnPtr column_right) const {
101
2
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
102
2
        DCHECK(column_left_ptr != nullptr);
103
104
2
        return Impl::constant_vector(column_left_ptr->template get_value<Impl::ResultType>(),
105
2
                                     column_right->get_ptr());
106
2
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
100
1
    ColumnPtr constant_vector(ColumnPtr column_left, ColumnPtr column_right) const {
101
1
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
102
1
        DCHECK(column_left_ptr != nullptr);
103
104
1
        return Impl::constant_vector(column_left_ptr->template get_value<Impl::ResultType>(),
105
1
                                     column_right->get_ptr());
106
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
100
1
    ColumnPtr constant_vector(ColumnPtr column_left, ColumnPtr column_right) const {
101
1
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
102
1
        DCHECK(column_left_ptr != nullptr);
103
104
1
        return Impl::constant_vector(column_left_ptr->template get_value<Impl::ResultType>(),
105
1
                                     column_right->get_ptr());
106
1
    }
107
108
5
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
5
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
5
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
108
1
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
1
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
108
1
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
1
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
108
1
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
1
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
108
1
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
1
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Line
Count
Source
108
1
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
109
1
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
110
1
    }
111
};
112
113
template <PrimitiveType Type>
114
struct DivideIntegralImpl {
115
    using Arg = typename PrimitiveTypeTraits<Type>::CppType;
116
    using ColumnType = typename PrimitiveTypeTraits<Type>::ColumnType;
117
    static constexpr PrimitiveType ResultType = Type;
118
    static constexpr bool is_signed_integer = std::is_signed_v<Arg> || std::is_same_v<Arg, Int128>;
119
120
5
    static DataTypes get_variadic_argument_types() {
121
5
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
5
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
5
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE27get_variadic_argument_typesEv
Line
Count
Source
120
1
    static DataTypes get_variadic_argument_types() {
121
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE27get_variadic_argument_typesEv
Line
Count
Source
120
1
    static DataTypes get_variadic_argument_types() {
121
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE27get_variadic_argument_typesEv
Line
Count
Source
120
1
    static DataTypes get_variadic_argument_types() {
121
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE27get_variadic_argument_typesEv
Line
Count
Source
120
1
    static DataTypes get_variadic_argument_types() {
121
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE27get_variadic_argument_typesEv
Line
Count
Source
120
1
    static DataTypes get_variadic_argument_types() {
121
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
122
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
123
1
    }
124
125
16
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
16
        if constexpr (is_signed_integer) {
127
16
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
16
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE21division_leads_to_fpeEaa
Line
Count
Source
125
2
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
2
        if constexpr (is_signed_integer) {
127
2
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE21division_leads_to_fpeEss
Line
Count
Source
125
2
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
2
        if constexpr (is_signed_integer) {
127
2
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE21division_leads_to_fpeEii
Line
Count
Source
125
2
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
2
        if constexpr (is_signed_integer) {
127
2
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE21division_leads_to_fpeEll
Line
Count
Source
125
5
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
5
        if constexpr (is_signed_integer) {
127
5
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
5
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE21division_leads_to_fpeEnn
Line
Count
Source
125
5
    static bool division_leads_to_fpe(Arg a, Arg b) {
126
5
        if constexpr (is_signed_integer) {
127
5
            return b == -1 && a == std::numeric_limits<Arg>::min();
128
        } else {
129
            return false;
130
        }
131
5
    }
132
133
    static void apply(const typename ColumnType::Container& a, Arg b,
134
                      typename PrimitiveTypeTraits<ResultType>::ColumnType::Container& c,
135
2
                      PaddedPODArray<UInt8>& null_map) {
136
2
        size_t size = c.size();
137
2
        UInt8 is_null = b == 0;
138
2
        memset(null_map.data(), is_null, size);
139
140
2
        if (!is_null) {
141
2
            if constexpr (is_signed_integer) {
142
2
                if (b == -1) {
143
4
                    for (size_t i = 0; i < size; i++) {
144
2
                        null_map[i] = division_leads_to_fpe(a[i], b);
145
2
                        if (!null_map[i]) {
146
0
                            c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
147
2
                        } else {
148
2
                            c[i] = {};
149
2
                        }
150
2
                    }
151
2
                    return;
152
2
                }
153
2
            }
154
            if constexpr (!std::is_floating_point_v<Arg> && !std::is_same_v<Arg, Int128> &&
155
1
                          !std::is_same_v<Arg, Int8> && !std::is_same_v<Arg, UInt8>) {
156
1
                const auto divider = libdivide::divider<Arg>(Arg(b));
157
1
                for (size_t i = 0; i < size; i++) {
158
0
                    c[i] = a[i] / divider;
159
0
                }
160
1
            } else {
161
1
                for (size_t i = 0; i < size; i++) {
162
0
                    c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
163
0
                }
164
1
            }
165
2
        }
166
2
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE5applyERKNS_8PODArrayIaLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEaRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE5applyERKNS_8PODArrayIsLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEsRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE5applyERKNS_8PODArrayIiLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEiRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE5applyERKNS_8PODArrayIlLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEElRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
Line
Count
Source
135
1
                      PaddedPODArray<UInt8>& null_map) {
136
1
        size_t size = c.size();
137
1
        UInt8 is_null = b == 0;
138
1
        memset(null_map.data(), is_null, size);
139
140
1
        if (!is_null) {
141
1
            if constexpr (is_signed_integer) {
142
1
                if (b == -1) {
143
2
                    for (size_t i = 0; i < size; i++) {
144
1
                        null_map[i] = division_leads_to_fpe(a[i], b);
145
1
                        if (!null_map[i]) {
146
0
                            c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
147
1
                        } else {
148
1
                            c[i] = {};
149
1
                        }
150
1
                    }
151
1
                    return;
152
1
                }
153
1
            }
154
            if constexpr (!std::is_floating_point_v<Arg> && !std::is_same_v<Arg, Int128> &&
155
1
                          !std::is_same_v<Arg, Int8> && !std::is_same_v<Arg, UInt8>) {
156
1
                const auto divider = libdivide::divider<Arg>(Arg(b));
157
1
                for (size_t i = 0; i < size; i++) {
158
0
                    c[i] = a[i] / divider;
159
0
                }
160
            } else {
161
                for (size_t i = 0; i < size; i++) {
162
                    c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
163
                }
164
            }
165
1
        }
166
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE5applyERKNS_8PODArrayInLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEnRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
Line
Count
Source
135
1
                      PaddedPODArray<UInt8>& null_map) {
136
1
        size_t size = c.size();
137
1
        UInt8 is_null = b == 0;
138
1
        memset(null_map.data(), is_null, size);
139
140
1
        if (!is_null) {
141
1
            if constexpr (is_signed_integer) {
142
1
                if (b == -1) {
143
2
                    for (size_t i = 0; i < size; i++) {
144
1
                        null_map[i] = division_leads_to_fpe(a[i], b);
145
1
                        if (!null_map[i]) {
146
0
                            c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
147
1
                        } else {
148
1
                            c[i] = {};
149
1
                        }
150
1
                    }
151
1
                    return;
152
1
                }
153
1
            }
154
            if constexpr (!std::is_floating_point_v<Arg> && !std::is_same_v<Arg, Int128> &&
155
                          !std::is_same_v<Arg, Int8> && !std::is_same_v<Arg, UInt8>) {
156
                const auto divider = libdivide::divider<Arg>(Arg(b));
157
                for (size_t i = 0; i < size; i++) {
158
                    c[i] = a[i] / divider;
159
                }
160
1
            } else {
161
1
                for (size_t i = 0; i < size; i++) {
162
0
                    c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
163
0
                }
164
1
            }
165
1
        }
166
1
    }
167
168
    static inline typename PrimitiveTypeTraits<ResultType>::CppType apply(Arg a, Arg b,
169
14
                                                                          UInt8& is_null) {
170
14
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
14
        if (is_null) {
172
9
            return {};
173
9
        }
174
5
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
14
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE5applyEaaRh
Line
Count
Source
169
2
                                                                          UInt8& is_null) {
170
2
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
2
        if (is_null) {
172
1
            return {};
173
1
        }
174
1
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE5applyEssRh
Line
Count
Source
169
2
                                                                          UInt8& is_null) {
170
2
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
2
        if (is_null) {
172
1
            return {};
173
1
        }
174
1
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE5applyEiiRh
Line
Count
Source
169
2
                                                                          UInt8& is_null) {
170
2
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
2
        if (is_null) {
172
1
            return {};
173
1
        }
174
1
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
2
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE5applyEllRh
Line
Count
Source
169
4
                                                                          UInt8& is_null) {
170
4
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
4
        if (is_null) {
172
3
            return {};
173
3
        }
174
1
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
4
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE5applyEnnRh
Line
Count
Source
169
4
                                                                          UInt8& is_null) {
170
4
        is_null = b == 0 || division_leads_to_fpe(a, b);
171
4
        if (is_null) {
172
3
            return {};
173
3
        }
174
1
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / b);
175
4
    }
176
177
2
    static ColumnPtr constant_constant(Arg a, Arg b) {
178
2
        auto column_result = ColumnType ::create(1);
179
180
2
        auto null_map = ColumnUInt8::create(1, 0);
181
2
        column_result->get_element(0) = apply(a, b, null_map->get_element(0));
182
2
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
183
2
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE17constant_constantEaa
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE17constant_constantEss
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE17constant_constantEii
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE17constant_constantEll
Line
Count
Source
177
1
    static ColumnPtr constant_constant(Arg a, Arg b) {
178
1
        auto column_result = ColumnType ::create(1);
179
180
1
        auto null_map = ColumnUInt8::create(1, 0);
181
1
        column_result->get_element(0) = apply(a, b, null_map->get_element(0));
182
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
183
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE17constant_constantEnn
Line
Count
Source
177
1
    static ColumnPtr constant_constant(Arg a, Arg b) {
178
1
        auto column_result = ColumnType ::create(1);
179
180
1
        auto null_map = ColumnUInt8::create(1, 0);
181
1
        column_result->get_element(0) = apply(a, b, null_map->get_element(0));
182
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
183
1
    }
184
185
2
    static ColumnPtr vector_constant(ColumnPtr column_left, Arg b) {
186
2
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
187
2
        auto column_result = ColumnType::create(column_left->size());
188
2
        DCHECK(column_left_ptr != nullptr);
189
190
2
        auto null_map = ColumnUInt8::create(column_left->size(), 0);
191
2
        apply(column_left_ptr->get_data(), b, column_result->get_data(), null_map->get_data());
192
2
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
193
2
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEa
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEs
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEi
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEl
Line
Count
Source
185
1
    static ColumnPtr vector_constant(ColumnPtr column_left, Arg b) {
186
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
187
1
        auto column_result = ColumnType::create(column_left->size());
188
1
        DCHECK(column_left_ptr != nullptr);
189
190
1
        auto null_map = ColumnUInt8::create(column_left->size(), 0);
191
1
        apply(column_left_ptr->get_data(), b, column_result->get_data(), null_map->get_data());
192
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
193
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEn
Line
Count
Source
185
1
    static ColumnPtr vector_constant(ColumnPtr column_left, Arg b) {
186
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
187
1
        auto column_result = ColumnType::create(column_left->size());
188
1
        DCHECK(column_left_ptr != nullptr);
189
190
1
        auto null_map = ColumnUInt8::create(column_left->size(), 0);
191
1
        apply(column_left_ptr->get_data(), b, column_result->get_data(), null_map->get_data());
192
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
193
1
    }
194
195
2
    static ColumnPtr constant_vector(Arg a, ColumnPtr column_right) {
196
2
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
197
2
        auto column_result = ColumnType::create(column_right->size());
198
2
        DCHECK(column_right_ptr != nullptr);
199
200
2
        auto null_map = ColumnUInt8::create(column_right->size(), 0);
201
2
        auto& b = column_right_ptr->get_data();
202
2
        auto& c = column_result->get_data();
203
2
        auto& n = null_map->get_data();
204
2
        size_t size = b.size();
205
4
        for (size_t i = 0; i < size; ++i) {
206
2
            c[i] = apply(a, b[i], n[i]);
207
2
        }
208
2
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
209
2
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE15constant_vectorEaNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE15constant_vectorEsNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE15constant_vectorEiNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE15constant_vectorElNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
Line
Count
Source
195
1
    static ColumnPtr constant_vector(Arg a, ColumnPtr column_right) {
196
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
197
1
        auto column_result = ColumnType::create(column_right->size());
198
1
        DCHECK(column_right_ptr != nullptr);
199
200
1
        auto null_map = ColumnUInt8::create(column_right->size(), 0);
201
1
        auto& b = column_right_ptr->get_data();
202
1
        auto& c = column_result->get_data();
203
1
        auto& n = null_map->get_data();
204
1
        size_t size = b.size();
205
2
        for (size_t i = 0; i < size; ++i) {
206
1
            c[i] = apply(a, b[i], n[i]);
207
1
        }
208
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
209
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE15constant_vectorEnNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
Line
Count
Source
195
1
    static ColumnPtr constant_vector(Arg a, ColumnPtr column_right) {
196
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
197
1
        auto column_result = ColumnType::create(column_right->size());
198
1
        DCHECK(column_right_ptr != nullptr);
199
200
1
        auto null_map = ColumnUInt8::create(column_right->size(), 0);
201
1
        auto& b = column_right_ptr->get_data();
202
1
        auto& c = column_result->get_data();
203
1
        auto& n = null_map->get_data();
204
1
        size_t size = b.size();
205
2
        for (size_t i = 0; i < size; ++i) {
206
1
            c[i] = apply(a, b[i], n[i]);
207
1
        }
208
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
209
1
    }
210
211
5
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
5
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
5
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
5
        auto column_result = ColumnType::create(column_left->size());
216
5
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
5
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
5
        auto& a = column_left_ptr->get_data();
220
5
        auto& b = column_right_ptr->get_data();
221
5
        auto& c = column_result->get_data();
222
5
        auto& n = null_map->get_data();
223
5
        size_t size = a.size();
224
15
        for (size_t i = 0; i < size; ++i) {
225
10
            c[i] = apply(a[i], b[i], n[i]);
226
10
        }
227
5
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
5
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Line
Count
Source
211
1
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
1
        auto column_result = ColumnType::create(column_left->size());
216
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
1
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
1
        auto& a = column_left_ptr->get_data();
220
1
        auto& b = column_right_ptr->get_data();
221
1
        auto& c = column_result->get_data();
222
1
        auto& n = null_map->get_data();
223
1
        size_t size = a.size();
224
3
        for (size_t i = 0; i < size; ++i) {
225
2
            c[i] = apply(a[i], b[i], n[i]);
226
2
        }
227
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Line
Count
Source
211
1
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
1
        auto column_result = ColumnType::create(column_left->size());
216
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
1
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
1
        auto& a = column_left_ptr->get_data();
220
1
        auto& b = column_right_ptr->get_data();
221
1
        auto& c = column_result->get_data();
222
1
        auto& n = null_map->get_data();
223
1
        size_t size = a.size();
224
3
        for (size_t i = 0; i < size; ++i) {
225
2
            c[i] = apply(a[i], b[i], n[i]);
226
2
        }
227
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Line
Count
Source
211
1
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
1
        auto column_result = ColumnType::create(column_left->size());
216
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
1
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
1
        auto& a = column_left_ptr->get_data();
220
1
        auto& b = column_right_ptr->get_data();
221
1
        auto& c = column_result->get_data();
222
1
        auto& n = null_map->get_data();
223
1
        size_t size = a.size();
224
3
        for (size_t i = 0; i < size; ++i) {
225
2
            c[i] = apply(a[i], b[i], n[i]);
226
2
        }
227
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Line
Count
Source
211
1
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
1
        auto column_result = ColumnType::create(column_left->size());
216
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
1
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
1
        auto& a = column_left_ptr->get_data();
220
1
        auto& b = column_right_ptr->get_data();
221
1
        auto& c = column_result->get_data();
222
1
        auto& n = null_map->get_data();
223
1
        size_t size = a.size();
224
3
        for (size_t i = 0; i < size; ++i) {
225
2
            c[i] = apply(a[i], b[i], n[i]);
226
2
        }
227
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Line
Count
Source
211
1
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
212
1
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
213
1
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
214
215
1
        auto column_result = ColumnType::create(column_left->size());
216
1
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
217
218
1
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
219
1
        auto& a = column_left_ptr->get_data();
220
1
        auto& b = column_right_ptr->get_data();
221
1
        auto& c = column_result->get_data();
222
1
        auto& n = null_map->get_data();
223
1
        size_t size = a.size();
224
3
        for (size_t i = 0; i < size; ++i) {
225
2
            c[i] = apply(a[i], b[i], n[i]);
226
2
        }
227
1
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
228
1
    }
229
};
230
231
1
void register_function_int_div(SimpleFunctionFactory& factory) {
232
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_TINYINT>>>();
233
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_SMALLINT>>>();
234
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_INT>>>();
235
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_BIGINT>>>();
236
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_LARGEINT>>>();
237
1
}
238
239
} // namespace doris