/root/doris/be/src/vec/functions/plus.cpp
Line | Count | Source (jump to first uncovered line) |
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/Plus.cpp |
19 | | // and modified by Doris |
20 | | |
21 | | #include <utility> |
22 | | |
23 | | #include "runtime/decimalv2_value.h" |
24 | | #include "vec/common/arithmetic_overflow.h" |
25 | | #include "vec/data_types/number_traits.h" |
26 | | #include "vec/functions/function_binary_arithmetic.h" |
27 | | #include "vec/functions/simple_function_factory.h" |
28 | | |
29 | | namespace doris::vectorized { |
30 | | |
31 | | template <PrimitiveType TypeA, PrimitiveType TypeB> |
32 | | struct PlusImpl { |
33 | | using A = typename PrimitiveTypeTraits<TypeA>::CppNativeType; |
34 | | using B = typename PrimitiveTypeTraits<TypeB>::CppNativeType; |
35 | | static constexpr PrimitiveType ResultType = |
36 | | NumberTraits::ResultOfAdditionMultiplication<A, B>::Type; |
37 | | static const constexpr bool allow_decimal = true; |
38 | | |
39 | | template <PrimitiveType Result = ResultType> |
40 | 0 | static inline typename PrimitiveTypeTraits<Result>::CppNativeType apply(A a, B b) { |
41 | | /// Next everywhere, static_cast - so that there is no wrong result in expressions of the form Int64 c = UInt32(a) * Int32(-1). |
42 | 0 | return static_cast<typename PrimitiveTypeTraits<Result>::CppNativeType>(a) + b; |
43 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_2EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_3EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEba Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbs Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbi Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbl Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE2ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEbd Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE28ELS2_28EE5applyILS2_28EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEii Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE29ELS2_29EE5applyILS2_29EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEll Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_20EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_30EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE35ELS2_35EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEN4wide7integerILm256EiEESA_ Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_2EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEab Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_3EE5applyILS2_4EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEaa Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEas Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEai Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEal Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEan Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEaf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE3ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEad Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_2EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_3EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsa Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_4EE5applyILS2_5EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEss Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsi Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsl Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE4ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEsd Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_2EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEib Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_3EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEia Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_4EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEis Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEii Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEil Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEin Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEif Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE5ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEid Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_2EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeElb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_3EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEla Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_4EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEls Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_5EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEli Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_6EE5applyILS2_6EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEll Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEln Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeElf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE6ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEld Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_2EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_3EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEna Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_4EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEns Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_5EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEni Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_6EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnl Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_7EE5applyILS2_7EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE7ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnd Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_2EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_3EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfa Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_4EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfs Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_5EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfi Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_6EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfl Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_7EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEff Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE8ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEfd Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_2EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdb Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_3EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEda Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_4EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEds Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_5EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdi Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_6EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdl Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_7EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_8EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdf Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE9ELS2_9EE5applyILS2_9EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEdd Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_35EEENS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeEnn |
44 | | |
45 | | template <typename Result = DecimalV2Value> |
46 | 0 | static inline DecimalV2Value apply(DecimalV2Value a, DecimalV2Value b) { |
47 | 0 | return DecimalV2Value(a.value() + b.value()); |
48 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE28ELS2_28EE5applyINS_14DecimalV2ValueEEES5_S5_S5_ Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE29ELS2_29EE5applyINS_14DecimalV2ValueEEES5_S5_S5_ Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE20ELS2_20EE5applyINS_14DecimalV2ValueEEES5_S5_S5_ Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE30ELS2_30EE5applyINS_14DecimalV2ValueEEES5_S5_S5_ Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE35ELS2_35EE5applyINS_14DecimalV2ValueEEES5_S5_S5_ |
49 | | |
50 | | /// Apply operation and check overflow. It's used for Decimal operations. @returns true if overflowed, false otherwise. |
51 | | template <PrimitiveType Result = ResultType> |
52 | 0 | static inline bool apply(A a, B b, typename PrimitiveTypeTraits<Result>::CppNativeType& c) { |
53 | 0 | return common::add_overflow( |
54 | 0 | static_cast<typename PrimitiveTypeTraits<Result>::CppNativeType>(a), b, c); |
55 | 0 | } Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE28ELS2_28EE5applyILS2_28EEEbiiRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE29ELS2_29EE5applyILS2_29EEEbllRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE20ELS2_20EE5applyILS2_20EEEbnnRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE30ELS2_30EE5applyILS2_30EEEbnnRNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE Unexecuted instantiation: _ZN5doris10vectorized8PlusImplILNS_13PrimitiveTypeE35ELS2_35EE5applyILS2_35EEEbN4wide7integerILm256EiEES7_RNS_19PrimitiveTypeTraitsIXT_EE13CppNativeTypeE |
56 | | }; |
57 | | |
58 | | struct NamePlus { |
59 | | static constexpr auto name = "add"; |
60 | | }; |
61 | | using FunctionPlus = FunctionBinaryArithmetic<PlusImpl, NamePlus, false>; |
62 | | |
63 | 1 | void register_function_plus(SimpleFunctionFactory& factory) { |
64 | 1 | factory.register_function<FunctionPlus>(); |
65 | 1 | } |
66 | | } // namespace doris::vectorized |