@@ -76,30 +76,6 @@ namespace ErrorCodes
7676 extern const int SIZES_OF_ARRAYS_DONT_MATCH;
7777}
7878
79- namespace
80- {
81- template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
82- inline auto decimalResultType (const DecimalType<T> & tx, const DecimalType<U> & ty)
83- {
84- const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
85- return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
86- }
87-
88- template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
89- inline DecimalType<T> decimalResultType (const DecimalType<T> & tx, const DataTypeNumber<U> & ty)
90- {
91- const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
92- return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
93- }
94-
95- template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
96- inline DecimalType<U> decimalResultType (const DataTypeNumber<T> & tx, const DecimalType<U> & ty)
97- {
98- const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
99- return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
100- }
101- }
102-
10379namespace traits_
10480{
10581struct InvalidType ; // / Used to indicate undefined operation
@@ -256,6 +232,27 @@ struct BinaryOperationTraits
256232namespace impl_
257233{
258234
235+ template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
236+ inline auto decimalResultType (const DecimalType<T> & tx, const DecimalType<U> & ty)
237+ {
238+ const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
239+ return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
240+ }
241+
242+ template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
243+ inline DecimalType<T> decimalResultType (const DecimalType<T> & tx, const DataTypeNumber<U> & ty)
244+ {
245+ const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
246+ return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
247+ }
248+
249+ template <bool is_multiply, bool is_division, typename T, typename U, template <typename > typename DecimalType>
250+ inline DecimalType<U> decimalResultType (const DataTypeNumber<T> & tx, const DecimalType<U> & ty)
251+ {
252+ const auto result_trait = DecimalUtils::binaryOpResult<is_multiply, is_division>(tx, ty);
253+ return DecimalType<typename decltype (result_trait)::FieldType>(result_trait.precision , result_trait.scale );
254+ }
255+
259256/* * Arithmetic operations: +, -, *, /, %,
260257 * intDiv (integer division)
261258 * Bitwise operations: |, &, ^, ~.
0 commit comments