Coverage Report

Created: 2026-04-15 16:23

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/exprs/function/cast/cast_to_float.h
Line
Count
Source
1
// Licensed to the Apache Software Foundation (ASF) under one
2
// or more contributor license agreements.  See the NOTICE file
3
// distributed with this work for additional information
4
// regarding copyright ownership.  The ASF licenses this file
5
// to you under the Apache License, Version 2.0 (the
6
// "License"); you may not use this file except in compliance
7
// with the License.  You may obtain a copy of the License at
8
//
9
//   http://www.apache.org/licenses/LICENSE-2.0
10
//
11
// Unless required by applicable law or agreed to in writing,
12
// software distributed under the License is distributed on an
13
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
// KIND, either express or implied.  See the License for the
15
// specific language governing permissions and limitations
16
// under the License.
17
18
#pragma once
19
20
#include <type_traits>
21
22
#include "core/data_type/data_type_decimal.h"
23
#include "core/data_type/data_type_number.h"
24
#include "core/data_type/primitive_type.h"
25
#include "exprs/function/cast/cast_to_basic_number_common.h"
26
27
namespace doris {
28
// cast bool, integer, float to double, will not overflow
29
template <CastModeType CastMode, typename FromDataType, typename ToDataType>
30
    requires(IsDataTypeFloat<ToDataType> && IsDataTypeNumber<FromDataType>)
31
class CastToImpl<CastMode, FromDataType, ToDataType> : public CastToBase {
32
public:
33
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
34
                        uint32_t result, size_t input_rows_count,
35
114
                        const NullMap::value_type* null_map = nullptr) const override {
36
114
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
114
                                                                 input_rows_count);
38
114
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEES4_E12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEES4_E12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEENS2_ILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE2EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
87
                        const NullMap::value_type* null_map = nullptr) const override {
36
87
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
87
                                                                 input_rows_count);
38
87
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE3EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE4EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE5EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE6EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE7EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEENS2_ILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
35
1
                        const NullMap::value_type* null_map = nullptr) const override {
36
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
37
1
                                                                 input_rows_count);
38
1
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEES4_E12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEES4_E12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
39
};
40
41
// cast decimal to float and double
42
template <CastModeType CastMode, typename FromDataType, typename ToDataType>
43
    requires(IsDataTypeFloat<ToDataType> && IsDataTypeDecimal<FromDataType>)
44
class CastToImpl<CastMode, FromDataType, ToDataType> : public CastToBase {
45
public:
46
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
47
                        uint32_t result, size_t input_rows_count,
48
182
                        const NullMap::value_type* null_map = nullptr) const override {
49
182
        using FromFieldType = typename FromDataType::FieldType;
50
182
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
182
        const auto* col_from =
52
182
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
182
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
182
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
182
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
182
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
182
        const auto& vec_from = col_from->get_data();
63
182
        const auto* vec_from_data = vec_from.data();
64
182
        auto& vec_to = col_to->get_data();
65
182
        auto* vec_to_data = vec_to.data();
66
67
182
        CastParameters params;
68
182
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
182
        size_t size = vec_from.size();
70
71
182
        typename FromFieldType::NativeType scale_multiplier =
72
182
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
8.33k
        for (size_t i = 0; i < size; ++i) {
74
8.14k
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
8.14k
                                         scale_multiplier, params);
76
8.14k
        }
77
78
182
        block.get_by_position(result).column = std::move(col_to);
79
182
        return Status::OK();
80
182
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
311
        for (size_t i = 0; i < size; ++i) {
74
304
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
304
                                         scale_multiplier, params);
76
304
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
311
        for (size_t i = 0; i < size; ++i) {
74
304
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
304
                                         scale_multiplier, params);
76
304
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
129
        for (size_t i = 0; i < size; ++i) {
74
122
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
122
                                         scale_multiplier, params);
76
122
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
129
        for (size_t i = 0; i < size; ++i) {
74
122
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
122
                                         scale_multiplier, params);
76
122
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
18
                        const NullMap::value_type* null_map = nullptr) const override {
49
18
        using FromFieldType = typename FromDataType::FieldType;
50
18
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
18
        const auto* col_from =
52
18
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
18
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
18
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
18
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
18
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
18
        const auto& vec_from = col_from->get_data();
63
18
        const auto* vec_from_data = vec_from.data();
64
18
        auto& vec_to = col_to->get_data();
65
18
        auto* vec_to_data = vec_to.data();
66
67
18
        CastParameters params;
68
18
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
18
        size_t size = vec_from.size();
70
71
18
        typename FromFieldType::NativeType scale_multiplier =
72
18
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
680
        for (size_t i = 0; i < size; ++i) {
74
662
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
662
                                         scale_multiplier, params);
76
662
        }
77
78
18
        block.get_by_position(result).column = std::move(col_to);
79
18
        return Status::OK();
80
18
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
18
                        const NullMap::value_type* null_map = nullptr) const override {
49
18
        using FromFieldType = typename FromDataType::FieldType;
50
18
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
18
        const auto* col_from =
52
18
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
18
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
18
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
18
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
18
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
18
        const auto& vec_from = col_from->get_data();
63
18
        const auto* vec_from_data = vec_from.data();
64
18
        auto& vec_to = col_to->get_data();
65
18
        auto* vec_to_data = vec_to.data();
66
67
18
        CastParameters params;
68
18
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
18
        size_t size = vec_from.size();
70
71
18
        typename FromFieldType::NativeType scale_multiplier =
72
18
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
680
        for (size_t i = 0; i < size; ++i) {
74
662
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
662
                                         scale_multiplier, params);
76
662
        }
77
78
18
        block.get_by_position(result).column = std::move(col_to);
79
18
        return Status::OK();
80
18
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
311
        for (size_t i = 0; i < size; ++i) {
74
304
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
304
                                         scale_multiplier, params);
76
304
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE28EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
311
        for (size_t i = 0; i < size; ++i) {
74
304
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
304
                                         scale_multiplier, params);
76
304
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE29EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
129
        for (size_t i = 0; i < size; ++i) {
74
122
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
122
                                         scale_multiplier, params);
76
122
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE20EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
7
                        const NullMap::value_type* null_map = nullptr) const override {
49
7
        using FromFieldType = typename FromDataType::FieldType;
50
7
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
7
        const auto* col_from =
52
7
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
7
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
7
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
7
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
7
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
7
        const auto& vec_from = col_from->get_data();
63
7
        const auto* vec_from_data = vec_from.data();
64
7
        auto& vec_to = col_to->get_data();
65
7
        auto* vec_to_data = vec_to.data();
66
67
7
        CastParameters params;
68
7
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
7
        size_t size = vec_from.size();
70
71
7
        typename FromFieldType::NativeType scale_multiplier =
72
7
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
129
        for (size_t i = 0; i < size; ++i) {
74
122
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
122
                                         scale_multiplier, params);
76
122
        }
77
78
7
        block.get_by_position(result).column = std::move(col_to);
79
7
        return Status::OK();
80
7
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE30EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE0ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_15DataTypeDecimalILNS_13PrimitiveTypeE35EEENS_14DataTypeNumberILS3_9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
48
9
                        const NullMap::value_type* null_map = nullptr) const override {
49
9
        using FromFieldType = typename FromDataType::FieldType;
50
9
        const ColumnWithTypeAndName& named_from = block.get_by_position(arguments[0]);
51
9
        const auto* col_from =
52
9
                check_and_get_column<typename FromDataType::ColumnType>(named_from.column.get());
53
9
        if (!col_from) {
54
0
            return Status::InternalError(fmt::format("Column type mismatch: expected {}, got {}",
55
0
                                                     type_to_string(FromDataType::PType),
56
0
                                                     named_from.column->get_name()));
57
0
        }
58
9
        const auto& from_decimal_type = assert_cast<const FromDataType&>(*named_from.type);
59
9
        UInt32 from_scale = from_decimal_type.get_scale();
60
61
9
        auto col_to = ToDataType::ColumnType::create(input_rows_count);
62
9
        const auto& vec_from = col_from->get_data();
63
9
        const auto* vec_from_data = vec_from.data();
64
9
        auto& vec_to = col_to->get_data();
65
9
        auto* vec_to_data = vec_to.data();
66
67
9
        CastParameters params;
68
9
        params.is_strict = (CastMode == CastModeType::StrictMode);
69
9
        size_t size = vec_from.size();
70
71
9
        typename FromFieldType::NativeType scale_multiplier =
72
9
                DataTypeDecimal<FromFieldType::PType>::get_scale_multiplier(from_scale);
73
521
        for (size_t i = 0; i < size; ++i) {
74
512
            CastToFloat::_from_decimalv3(vec_from_data[i], from_scale, vec_to_data[i],
75
512
                                         scale_multiplier, params);
76
512
        }
77
78
9
        block.get_by_position(result).column = std::move(col_to);
79
9
        return Status::OK();
80
9
    }
81
};
82
83
// cast date and datetime to float/double, will not overflow
84
// only support in non-strict mode. strict mode it's illegal!
85
template <typename FromDataType, typename ToDataType>
86
    requires(IsDataTypeFloat<ToDataType> &&
87
             (IsDatelikeV1Types<FromDataType> || IsDatelikeV2Types<FromDataType> ||
88
              std::is_same_v<FromDataType, DataTypeTimeV2>))
89
class CastToImpl<CastModeType::NonStrictMode, FromDataType, ToDataType> : public CastToBase {
90
public:
91
    Status execute_impl(FunctionContext* context, Block& block, const ColumnNumbers& arguments,
92
                        uint32_t result, size_t input_rows_count,
93
14
                        const NullMap::value_type* null_map = nullptr) const override {
94
14
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
14
                                                                 input_rows_count);
96
14
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_12DataTypeDateENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeDateV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
1
                        const NullMap::value_type* null_map = nullptr) const override {
94
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
1
                                                                 input_rows_count);
96
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_18DataTypeDateTimeV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
4
                        const NullMap::value_type* null_map = nullptr) const override {
94
4
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
4
                                                                 input_rows_count);
96
4
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_16DataTypeDateTimeENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeTimeV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE8EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
2
                        const NullMap::value_type* null_map = nullptr) const override {
94
2
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
2
                                                                 input_rows_count);
96
2
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_12DataTypeDateENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeDateV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
1
                        const NullMap::value_type* null_map = nullptr) const override {
94
1
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
1
                                                                 input_rows_count);
96
1
    }
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_18DataTypeDateTimeV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
4
                        const NullMap::value_type* null_map = nullptr) const override {
94
4
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
4
                                                                 input_rows_count);
96
4
    }
Unexecuted instantiation: _ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_16DataTypeDateTimeENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
_ZNK5doris10CastToImplILNS_12CastModeTypeE1ENS_14DataTypeTimeV2ENS_14DataTypeNumberILNS_13PrimitiveTypeE9EEEE12execute_implEPNS_15FunctionContextERNS_5BlockERKSt6vectorIjSaIjEEjmPKh
Line
Count
Source
93
2
                        const NullMap::value_type* null_map = nullptr) const override {
94
2
        return static_cast_no_overflow<FromDataType, ToDataType>(context, block, arguments, result,
95
2
                                                                 input_rows_count);
96
2
    }
97
};
98
} // namespace doris