Coverage Report

Created: 2026-03-16 19:58

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 <utility>
24
25
#include "core/data_type/data_type_number.h"
26
#include "exprs/function/simple_function_factory.h"
27
28
namespace doris {
29
30
template <typename Impl>
31
class FunctionIntDiv : public IFunction {
32
public:
33
    static constexpr auto name = "int_divide";
34
35
10
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE6createEv
Line
Count
Source
35
2
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE6createEv
Line
Count
Source
35
2
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE6createEv
Line
Count
Source
35
2
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE6createEv
Line
Count
Source
35
2
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE6createEv
Line
Count
Source
35
2
    static FunctionPtr create() { return std::make_shared<FunctionIntDiv>(); }
36
37
10
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEEC2Ev
Line
Count
Source
37
2
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEEC2Ev
Line
Count
Source
37
2
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEEC2Ev
Line
Count
Source
37
2
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEEC2Ev
Line
Count
Source
37
2
    FunctionIntDiv() = default;
_ZN5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEEC2Ev
Line
Count
Source
37
2
    FunctionIntDiv() = default;
38
39
5
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE8get_nameB5cxx11Ev
Line
Count
Source
39
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE8get_nameB5cxx11Ev
Line
Count
Source
39
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE8get_nameB5cxx11Ev
Line
Count
Source
39
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE8get_nameB5cxx11Ev
Line
Count
Source
39
1
    String get_name() const override { return name; }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE8get_nameB5cxx11Ev
Line
Count
Source
39
1
    String get_name() const override { return name; }
40
41
0
    size_t get_number_of_arguments() const override { return 2; }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE23get_number_of_argumentsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE23get_number_of_argumentsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE23get_number_of_argumentsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE23get_number_of_argumentsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE23get_number_of_argumentsEv
42
43
5
    DataTypes get_variadic_argument_types_impl() const override {
44
5
        return Impl::get_variadic_argument_types();
45
5
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE32get_variadic_argument_types_implEv
Line
Count
Source
43
1
    DataTypes get_variadic_argument_types_impl() const override {
44
1
        return Impl::get_variadic_argument_types();
45
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE32get_variadic_argument_types_implEv
Line
Count
Source
43
1
    DataTypes get_variadic_argument_types_impl() const override {
44
1
        return Impl::get_variadic_argument_types();
45
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE32get_variadic_argument_types_implEv
Line
Count
Source
43
1
    DataTypes get_variadic_argument_types_impl() const override {
44
1
        return Impl::get_variadic_argument_types();
45
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE32get_variadic_argument_types_implEv
Line
Count
Source
43
1
    DataTypes get_variadic_argument_types_impl() const override {
44
1
        return Impl::get_variadic_argument_types();
45
1
    }
_ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE32get_variadic_argument_types_implEv
Line
Count
Source
43
1
    DataTypes get_variadic_argument_types_impl() const override {
44
1
        return Impl::get_variadic_argument_types();
45
1
    }
46
47
0
    DataTypePtr get_return_type_impl(const DataTypes& arguments) const override {
48
0
        DataTypePtr type_res =
49
0
                std::make_shared<typename PrimitiveTypeTraits<Impl::ResultType>::DataType>();
50
0
        return make_nullable(type_res);
51
0
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE20get_return_type_implERKSt6vectorISt10shared_ptrIKNS_9IDataTypeEESaIS9_EE
52
53
0
    bool use_default_implementation_for_constants() const final { return false; }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE40use_default_implementation_for_constantsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE40use_default_implementation_for_constantsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE40use_default_implementation_for_constantsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE40use_default_implementation_for_constantsEv
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE40use_default_implementation_for_constantsEv
54
55
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
56
0
                        uint32_t result, size_t input_rows_count) const override {
57
0
        auto& column_left = block.get_by_position(arguments[0]).column;
58
0
        auto& column_right = block.get_by_position(arguments[1]).column;
59
0
        bool is_const_left = is_column_const(*column_left);
60
0
        bool is_const_right = is_column_const(*column_right);
61
62
0
        ColumnPtr column_result = nullptr;
63
0
        if (is_const_left && is_const_right) {
64
0
            column_result = constant_constant(column_left, column_right);
65
0
        } else if (is_const_left) {
66
0
            column_result = constant_vector(column_left, column_right);
67
0
        } else if (is_const_right) {
68
0
            column_result = vector_constant(column_left, column_right);
69
0
        } else {
70
0
            column_result = vector_vector(column_left, column_right);
71
0
        }
72
0
        block.replace_by_position(result, std::move(column_result));
73
0
        return Status::OK();
74
0
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjm
75
76
private:
77
0
    ColumnPtr constant_constant(ColumnPtr column_left, ColumnPtr column_right) const {
78
0
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
79
0
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
80
0
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
81
82
0
        ColumnPtr column_result = nullptr;
83
84
0
        column_result =
85
0
                Impl::constant_constant(column_left_ptr->template get_value<Impl::ResultType>(),
86
0
                                        column_right_ptr->template get_value<Impl::ResultType>());
87
88
0
        return ColumnConst::create(std::move(column_result), column_left->size());
89
0
    }
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_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE17constant_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
90
91
0
    ColumnPtr vector_constant(ColumnPtr column_left, ColumnPtr column_right) const {
92
0
        const auto* column_right_ptr = assert_cast<const ColumnConst*>(column_right.get());
93
0
        DCHECK(column_right_ptr != nullptr);
94
95
0
        return Impl::vector_constant(column_left->get_ptr(),
96
0
                                     column_right_ptr->template get_value<Impl::ResultType>());
97
0
    }
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_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
98
99
0
    ColumnPtr constant_vector(ColumnPtr column_left, ColumnPtr column_right) const {
100
0
        const auto* column_left_ptr = assert_cast<const ColumnConst*>(column_left.get());
101
0
        DCHECK(column_left_ptr != nullptr);
102
103
0
        return Impl::constant_vector(column_left_ptr->template get_value<Impl::ResultType>(),
104
0
                                     column_right->get_ptr());
105
0
    }
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_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE15constant_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
106
107
0
    ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) const {
108
0
        return Impl::vector_vector(column_left->get_ptr(), column_right->get_ptr());
109
0
    }
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE3EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE4EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE5EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE6EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
Unexecuted instantiation: _ZNK5doris14FunctionIntDivINS_18DivideIntegralImplILNS_13PrimitiveTypeE7EEEE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS6_EES9_
110
};
111
112
template <PrimitiveType Type>
113
struct DivideIntegralImpl {
114
    using Arg = typename PrimitiveTypeTraits<Type>::CppType;
115
    using ColumnType = typename PrimitiveTypeTraits<Type>::ColumnType;
116
    static constexpr PrimitiveType ResultType = Type;
117
118
5
    static DataTypes get_variadic_argument_types() {
119
5
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
5
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
5
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE27get_variadic_argument_typesEv
Line
Count
Source
118
1
    static DataTypes get_variadic_argument_types() {
119
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE27get_variadic_argument_typesEv
Line
Count
Source
118
1
    static DataTypes get_variadic_argument_types() {
119
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE27get_variadic_argument_typesEv
Line
Count
Source
118
1
    static DataTypes get_variadic_argument_types() {
119
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE27get_variadic_argument_typesEv
Line
Count
Source
118
1
    static DataTypes get_variadic_argument_types() {
119
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
1
    }
_ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE27get_variadic_argument_typesEv
Line
Count
Source
118
1
    static DataTypes get_variadic_argument_types() {
119
1
        return {std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>(),
120
1
                std::make_shared<typename PrimitiveTypeTraits<Type>::DataType>()};
121
1
    }
122
123
    static void apply(const typename ColumnType::Container& a, Arg b,
124
                      typename PrimitiveTypeTraits<ResultType>::ColumnType::Container& c,
125
0
                      PaddedPODArray<UInt8>& null_map) {
126
0
        size_t size = c.size();
127
0
        UInt8 is_null = b == 0;
128
0
        memset(null_map.data(), is_null, size);
129
130
0
        if (!is_null) {
131
            if constexpr (!std::is_floating_point_v<Arg> && !std::is_same_v<Arg, Int128> &&
132
0
                          !std::is_same_v<Arg, Int8> && !std::is_same_v<Arg, UInt8>) {
133
0
                const auto divider = libdivide::divider<Arg>(Arg(b));
134
0
                for (size_t i = 0; i < size; i++) {
135
0
                    c[i] = a[i] / divider;
136
0
                }
137
0
            } else {
138
0
                for (size_t i = 0; i < size; i++) {
139
0
                    c[i] = typename PrimitiveTypeTraits<ResultType>::CppType(a[i] / b);
140
0
                }
141
0
            }
142
0
        }
143
0
    }
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
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE5applyERKNS_8PODArrayIlLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEElRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE5applyERKNS_8PODArrayInLm4096ENS_9AllocatorILb0ELb0ELb0ENS_22DefaultMemoryAllocatorELb1EEELm16ELm15EEEnRS7_RNS3_IhLm4096ES6_Lm16ELm15EEE
144
145
    static inline typename PrimitiveTypeTraits<ResultType>::CppType apply(Arg a, Arg b,
146
0
                                                                          UInt8& is_null) {
147
0
        is_null = b == 0;
148
0
        return typename PrimitiveTypeTraits<ResultType>::CppType(a / (b + is_null));
149
0
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE5applyEaaRh
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE5applyEssRh
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE5applyEiiRh
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE5applyEllRh
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE5applyEnnRh
150
151
0
    static ColumnPtr constant_constant(Arg a, Arg b) {
152
0
        auto column_result = ColumnType ::create(1);
153
154
0
        auto null_map = ColumnUInt8::create(1, 0);
155
0
        column_result->get_element(0) = apply(a, b, null_map->get_element(0));
156
0
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
157
0
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE17constant_constantEaa
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE17constant_constantEss
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE17constant_constantEii
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE17constant_constantEll
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE17constant_constantEnn
158
159
0
    static ColumnPtr vector_constant(ColumnPtr column_left, Arg b) {
160
0
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
161
0
        auto column_result = ColumnType::create(column_left->size());
162
0
        DCHECK(column_left_ptr != nullptr);
163
164
0
        auto null_map = ColumnUInt8::create(column_left->size(), 0);
165
0
        apply(column_left_ptr->get_data(), b, column_result->get_data(), null_map->get_data());
166
0
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
167
0
    }
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
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEl
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE15vector_constantENS_3COWINS_7IColumnEE13immutable_ptrIS4_EEn
168
169
0
    static ColumnPtr constant_vector(Arg a, ColumnPtr column_right) {
170
0
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
171
0
        auto column_result = ColumnType::create(column_right->size());
172
0
        DCHECK(column_right_ptr != nullptr);
173
174
0
        auto null_map = ColumnUInt8::create(column_right->size(), 0);
175
0
        auto& b = column_right_ptr->get_data();
176
0
        auto& c = column_result->get_data();
177
0
        auto& n = null_map->get_data();
178
0
        size_t size = b.size();
179
0
        for (size_t i = 0; i < size; ++i) {
180
0
            c[i] = apply(a, b[i], n[i]);
181
0
        }
182
0
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
183
0
    }
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
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE15constant_vectorElNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE15constant_vectorEnNS_3COWINS_7IColumnEE13immutable_ptrIS4_EE
184
185
0
    static ColumnPtr vector_vector(ColumnPtr column_left, ColumnPtr column_right) {
186
0
        const auto* column_left_ptr = assert_cast<const ColumnType*>(column_left.get());
187
0
        const auto* column_right_ptr = assert_cast<const ColumnType*>(column_right.get());
188
189
0
        auto column_result = ColumnType::create(column_left->size());
190
0
        DCHECK(column_left_ptr != nullptr && column_right_ptr != nullptr);
191
192
0
        auto null_map = ColumnUInt8::create(column_result->size(), 0);
193
0
        auto& a = column_left_ptr->get_data();
194
0
        auto& b = column_right_ptr->get_data();
195
0
        auto& c = column_result->get_data();
196
0
        auto& n = null_map->get_data();
197
0
        size_t size = a.size();
198
0
        for (size_t i = 0; i < size; ++i) {
199
0
            c[i] = apply(a[i], b[i], n[i]);
200
0
        }
201
0
        return ColumnNullable::create(std::move(column_result), std::move(null_map));
202
0
    }
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE3EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE4EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE5EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE6EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
Unexecuted instantiation: _ZN5doris18DivideIntegralImplILNS_13PrimitiveTypeE7EE13vector_vectorENS_3COWINS_7IColumnEE13immutable_ptrIS4_EES7_
203
};
204
205
1
void register_function_int_div(SimpleFunctionFactory& factory) {
206
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_TINYINT>>>();
207
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_SMALLINT>>>();
208
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_INT>>>();
209
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_BIGINT>>>();
210
1
    factory.register_function<FunctionIntDiv<DivideIntegralImpl<TYPE_LARGEINT>>>();
211
1
}
212
213
} // namespace doris