Coverage Report

Created: 2026-10-27 06:26

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
be/src/storage/key_coder.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 <glog/logging.h>
21
#include <limits.h>
22
#include <stdint.h>
23
#include <string.h>
24
25
#include <algorithm>
26
#include <ostream>
27
#include <string>
28
#include <type_traits>
29
30
#include "absl/strings/substitute.h"
31
#include "common/status.h"
32
#include "core/data_type/primitive_type.h"
33
#include "core/data_type/storage_field_type.h"
34
#include "core/decimal12.h"
35
#include "core/extended_types.h"
36
#include "core/field.h"
37
#include "core/types.h"
38
#include "exec/common/endian.h"
39
#include "storage/olap_common.h"
40
#include "storage/storage_layout.h"
41
#include "storage/types.h"
42
#include "util/slice.h"
43
44
namespace doris {
45
46
using FullEncodeAscendingFunc = void (*)(const void* value, std::string* buf);
47
using EncodeAscendingFunc = void (*)(const void* value, size_t index_size, std::string* buf);
48
using DecodeAscendingFunc = Status (*)(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr);
49
50
// Order-preserving binary encoding for values of a particular type so that
51
// those values can be compared by memcpy their encoded bytes.
52
//
53
// To obtain instance of this class, use the `get_key_coder(FieldType)` method.
54
class KeyCoder {
55
public:
56
    template <typename TraitsType>
57
    KeyCoder(TraitsType traits);
58
59
    // encode the provided `value` into `buf`.
60
26.8M
    void full_encode_ascending(const void* value, std::string* buf) const {
61
26.8M
        _full_encode_ascending(value, buf);
62
26.8M
    }
63
64
    // similar to `full_encode_ascending`, but only encode part (the first `index_size` bytes) of the value.
65
    // only applicable to string type
66
27.8k
    void encode_ascending(const void* value, size_t index_size, std::string* buf) const {
67
27.8k
        _encode_ascending(value, index_size, buf);
68
27.8k
    }
69
70
    // Only used for test, should delete it in the future
71
171k
    Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) const {
72
171k
        return _decode_ascending(encoded_key, index_size, cell_ptr);
73
171k
    }
74
75
private:
76
    FullEncodeAscendingFunc _full_encode_ascending;
77
    EncodeAscendingFunc _encode_ascending;
78
    DecodeAscendingFunc _decode_ascending;
79
};
80
81
extern const KeyCoder* get_key_coder(FieldType type);
82
83
template <FieldType field_type, typename Enable = void>
84
class KeyCoderTraits {};
85
86
template <FieldType field_type>
87
class KeyCoderTraits<
88
        field_type,
89
        typename std::enable_if<
90
                IsIntegral<typename StorageTypeTraits<field_type>::StorageType>::value ||
91
                IsDecimalNumber<typename StorageTypeTraits<field_type>::StorageType>>::type> {
92
public:
93
    using CppType = typename StorageTypeTraits<field_type>::StorageType;
94
    using UnsignedCppType = typename StorageTypeTraits<field_type>::UnsignedStorageType;
95
96
41.3M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
41.3M
        UnsignedCppType unsigned_val;
98
41.3M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
41.3M
        if (IsSigned<CppType>::value) {
101
37.4M
            unsigned_val ^=
102
37.4M
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
37.4M
        }
104
        // make it bigendian
105
41.3M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
41.3M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
41.3M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE7EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
13.5M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
13.5M
        UnsignedCppType unsigned_val;
98
13.5M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
13.5M
        if (IsSigned<CppType>::value) {
101
13.5M
            unsigned_val ^=
102
13.5M
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
13.5M
        }
104
        // make it bigendian
105
13.5M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
13.5M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
13.5M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE5EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
19.8M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
19.8M
        UnsignedCppType unsigned_val;
98
19.8M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
19.8M
        if (IsSigned<CppType>::value) {
101
19.8M
            unsigned_val ^=
102
19.8M
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
19.8M
        }
104
        // make it bigendian
105
19.8M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
19.8M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
19.8M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE1EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
752k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
752k
        UnsignedCppType unsigned_val;
98
752k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
752k
        if (IsSigned<CppType>::value) {
101
752k
            unsigned_val ^=
102
752k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
752k
        }
104
        // make it bigendian
105
752k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
752k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
752k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE3EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
691k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
691k
        UnsignedCppType unsigned_val;
98
691k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
691k
        if (IsSigned<CppType>::value) {
101
691k
            unsigned_val ^=
102
691k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
691k
        }
104
        // make it bigendian
105
691k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
691k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
691k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE6EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
1.28M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
1.28M
        UnsignedCppType unsigned_val;
98
1.28M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
1.28M
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
1.28M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
1.28M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
1.28M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE8EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
1.90M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
1.90M
        UnsignedCppType unsigned_val;
98
1.90M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
1.90M
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
1.90M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
1.90M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
1.90M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE9EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
510k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
510k
        UnsignedCppType unsigned_val;
98
510k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
510k
        if (IsSigned<CppType>::value) {
101
510k
            unsigned_val ^=
102
510k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
510k
        }
104
        // make it bigendian
105
510k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
510k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
510k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE15EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
449k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
449k
        UnsignedCppType unsigned_val;
98
449k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
449k
        if (IsSigned<CppType>::value) {
101
449k
            unsigned_val ^=
102
449k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
449k
        }
104
        // make it bigendian
105
449k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
449k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
449k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE24EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
645k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
645k
        UnsignedCppType unsigned_val;
98
645k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
645k
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
645k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
645k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
645k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE41EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
9.34k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
9.34k
        UnsignedCppType unsigned_val;
98
9.34k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
9.34k
        if (IsSigned<CppType>::value) {
101
9.34k
            unsigned_val ^=
102
9.34k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
9.34k
        }
104
        // make it bigendian
105
9.34k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
9.34k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
9.34k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE31EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
60.0k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
60.0k
        UnsignedCppType unsigned_val;
98
60.0k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
60.0k
        if (IsSigned<CppType>::value) {
101
60.0k
            unsigned_val ^=
102
60.0k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
60.0k
        }
104
        // make it bigendian
105
60.0k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
60.0k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
60.0k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE32EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
54.7k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
54.7k
        UnsignedCppType unsigned_val;
98
54.7k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
54.7k
        if (IsSigned<CppType>::value) {
101
54.7k
            unsigned_val ^=
102
54.7k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
54.7k
        }
104
        // make it bigendian
105
54.7k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
54.7k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
54.7k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE33EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
1.47M
    static void full_encode_ascending(const void* value, std::string* buf) {
97
1.47M
        UnsignedCppType unsigned_val;
98
1.47M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
1.47M
        if (IsSigned<CppType>::value) {
101
1.47M
            unsigned_val ^=
102
1.47M
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
1.47M
        }
104
        // make it bigendian
105
1.47M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
1.47M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
1.47M
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE37EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
50.6k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
50.6k
        UnsignedCppType unsigned_val;
98
50.6k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
50.6k
        if (IsSigned<CppType>::value) {
101
50.6k
            unsigned_val ^=
102
50.6k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
50.6k
        }
104
        // make it bigendian
105
50.6k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
50.6k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
50.6k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE38EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
50.1k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
50.1k
        UnsignedCppType unsigned_val;
98
50.1k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
50.1k
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
50.1k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
50.1k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
50.1k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE39EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
51.3k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
51.3k
        UnsignedCppType unsigned_val;
98
51.3k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
51.3k
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
51.3k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
51.3k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
51.3k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE42EvE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
96
1.42k
    static void full_encode_ascending(const void* value, std::string* buf) {
97
1.42k
        UnsignedCppType unsigned_val;
98
1.42k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
99
        // swap MSB to encode integer
100
1.42k
        if (IsSigned<CppType>::value) {
101
0
            unsigned_val ^=
102
0
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
103
0
        }
104
        // make it bigendian
105
1.42k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
106
107
1.42k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
108
1.42k
    }
109
110
133k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
133k
        full_encode_ascending(value, buf);
112
133k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE1EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
2.57k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
2.57k
        full_encode_ascending(value, buf);
112
2.57k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE3EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
2.90k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
2.90k
        full_encode_ascending(value, buf);
112
2.90k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE5EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
96.0k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
96.0k
        full_encode_ascending(value, buf);
112
96.0k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE6EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
202
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
202
        full_encode_ascending(value, buf);
112
202
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE7EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
17.7k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
17.7k
        full_encode_ascending(value, buf);
112
17.7k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE8EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
202
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
202
        full_encode_ascending(value, buf);
112
202
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE9EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
7.40k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
7.40k
        full_encode_ascending(value, buf);
112
7.40k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE15EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
254
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
254
        full_encode_ascending(value, buf);
112
254
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE24EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
956
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
956
        full_encode_ascending(value, buf);
112
956
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE41EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
258
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
258
        full_encode_ascending(value, buf);
112
258
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE31EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
521
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
521
        full_encode_ascending(value, buf);
112
521
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE32EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
634
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
634
        full_encode_ascending(value, buf);
112
634
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE33EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
2.14k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
2.14k
        full_encode_ascending(value, buf);
112
2.14k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE37EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
499
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
499
        full_encode_ascending(value, buf);
112
499
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE38EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
452
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
452
        full_encode_ascending(value, buf);
112
452
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE39EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
449
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
449
        full_encode_ascending(value, buf);
112
449
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE42EvE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
110
59
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
111
59
        full_encode_ascending(value, buf);
112
59
    }
113
114
410k
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
410k
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
410k
        UnsignedCppType unsigned_val;
122
410k
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
410k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
410k
        if (IsSigned<CppType>::value) {
125
28.7k
            unsigned_val ^=
126
28.7k
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
28.7k
        }
128
410k
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
410k
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
410k
        return Status::OK();
131
410k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE7EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
28.2k
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
28.2k
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
28.2k
        UnsignedCppType unsigned_val;
122
28.2k
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
28.2k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
28.2k
        if (IsSigned<CppType>::value) {
125
28.2k
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
28.2k
        }
128
28.2k
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
28.2k
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
28.2k
        return Status::OK();
131
28.2k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE5EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
117
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
117
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
117
        UnsignedCppType unsigned_val;
122
117
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
117
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
117
        if (IsSigned<CppType>::value) {
125
117
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
117
        }
128
117
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
117
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
117
        return Status::OK();
131
117
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE1EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
53
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
53
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
53
        UnsignedCppType unsigned_val;
122
53
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
53
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
53
        if (IsSigned<CppType>::value) {
125
53
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
53
        }
128
53
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
53
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
53
        return Status::OK();
131
53
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE3EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
53
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
53
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
53
        UnsignedCppType unsigned_val;
122
53
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
53
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
53
        if (IsSigned<CppType>::value) {
125
53
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
53
        }
128
53
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
53
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
53
        return Status::OK();
131
53
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE6EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
142k
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
142k
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
142k
        UnsignedCppType unsigned_val;
122
142k
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
142k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
142k
        if (IsSigned<CppType>::value) {
125
0
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
0
        }
128
142k
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
142k
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
142k
        return Status::OK();
131
142k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE8EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
239k
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
239k
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
239k
        UnsignedCppType unsigned_val;
122
239k
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
239k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
239k
        if (IsSigned<CppType>::value) {
125
0
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
0
        }
128
239k
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
239k
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
239k
        return Status::OK();
131
239k
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE9EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
53
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
53
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
53
        UnsignedCppType unsigned_val;
122
53
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
53
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
53
        if (IsSigned<CppType>::value) {
125
53
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
53
        }
128
53
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
53
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
53
        return Status::OK();
131
53
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE15EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
53
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
53
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
53
        UnsignedCppType unsigned_val;
122
53
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
53
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
53
        if (IsSigned<CppType>::value) {
125
53
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
53
        }
128
53
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
53
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
53
        return Status::OK();
131
53
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE24EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
0
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
0
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE41EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
2
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
2
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
2
        UnsignedCppType unsigned_val;
122
2
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
2
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
2
        if (IsSigned<CppType>::value) {
125
2
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
2
        }
128
2
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
2
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
2
        return Status::OK();
131
2
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE31EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
51
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
51
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE32EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
51
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
51
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE33EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
51
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
51
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE37EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
51
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
51
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE38EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
0
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
0
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
_ZN5doris14KeyCoderTraitsILNS_9FieldTypeE39EvE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
114
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
115
        // decode_ascending only used in orinal index page, maybe should remove it in the future.
116
        // currently, we reduce the usage of this method.
117
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
118
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
119
0
                                           sizeof(UnsignedCppType), encoded_key->size);
120
0
        }
121
51
        UnsignedCppType unsigned_val;
122
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
123
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
124
51
        if (IsSigned<CppType>::value) {
125
0
            unsigned_val ^=
126
                    (static_cast<UnsignedCppType>(1) << (sizeof(UnsignedCppType) * CHAR_BIT - 1));
127
0
        }
128
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
129
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
130
51
        return Status::OK();
131
51
    }
Unexecuted instantiation: _ZN5doris14KeyCoderTraitsILNS_9FieldTypeE42EvE16decode_ascendingEPNS_5SliceEmPh
132
};
133
134
template <>
135
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_DATE> {
136
public:
137
    using CppType = typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATE>::StorageType;
138
    using UnsignedCppType =
139
            typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATE>::UnsignedStorageType;
140
141
public:
142
450k
    static void full_encode_ascending(const void* value, std::string* buf) {
143
450k
        UnsignedCppType unsigned_val;
144
450k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
145
        // make it bigendian
146
450k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
147
450k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
148
450k
    }
149
150
249
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
151
249
        full_encode_ascending(value, buf);
152
249
    }
153
154
53
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
155
53
        if (encoded_key->size < sizeof(UnsignedCppType)) {
156
0
            return Status::InvalidArgument("Key too short, need={} vs real={}",
157
0
                                           sizeof(UnsignedCppType), encoded_key->size);
158
0
        }
159
53
        UnsignedCppType unsigned_val;
160
53
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
161
53
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
162
53
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
163
53
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
164
53
        return Status::OK();
165
53
    }
166
};
167
168
template <>
169
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_DATEV2> {
170
public:
171
    using CppType = typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATEV2>::StorageType;
172
    using UnsignedCppType =
173
            typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATEV2>::UnsignedStorageType;
174
175
public:
176
805k
    static void full_encode_ascending(const void* value, std::string* buf) {
177
805k
        UnsignedCppType unsigned_val;
178
805k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
179
        // make it bigendian
180
805k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
181
805k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
182
805k
    }
183
184
6.04k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
185
6.04k
        full_encode_ascending(value, buf);
186
6.04k
    }
187
188
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
189
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
190
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
191
0
                                                            sizeof(UnsignedCppType),
192
0
                                                            encoded_key->size));
193
0
        }
194
51
        UnsignedCppType unsigned_val;
195
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
196
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
197
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
198
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
199
51
        return Status::OK();
200
51
    }
201
};
202
203
template <>
204
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_DATETIMEV2> {
205
public:
206
    using CppType = typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATETIMEV2>::StorageType;
207
    using UnsignedCppType =
208
            typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_DATETIMEV2>::UnsignedStorageType;
209
210
public:
211
1.13M
    static void full_encode_ascending(const void* value, std::string* buf) {
212
1.13M
        UnsignedCppType unsigned_val;
213
1.13M
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
214
        // make it bigendian
215
1.13M
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
216
1.13M
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
217
1.13M
    }
218
219
2.38k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
220
2.38k
        full_encode_ascending(value, buf);
221
2.38k
    }
222
223
51
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
224
51
        if (encoded_key->size < sizeof(UnsignedCppType)) {
225
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
226
0
                                                            sizeof(UnsignedCppType),
227
0
                                                            encoded_key->size));
228
0
        }
229
51
        UnsignedCppType unsigned_val;
230
51
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
231
51
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
232
51
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
233
51
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
234
51
        return Status::OK();
235
51
    }
236
};
237
238
template <>
239
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ> {
240
public:
241
    using CppType = typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ>::StorageType;
242
    using UnsignedCppType =
243
            typename StorageTypeTraits<FieldType::OLAP_FIELD_TYPE_TIMESTAMPTZ>::UnsignedStorageType;
244
245
public:
246
63.8k
    static void full_encode_ascending(const void* value, std::string* buf) {
247
63.8k
        UnsignedCppType unsigned_val;
248
63.8k
        memcpy(&unsigned_val, value, sizeof(unsigned_val));
249
        // make it bigendian
250
63.8k
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
251
63.8k
        buf->append((char*)&unsigned_val, sizeof(unsigned_val));
252
63.8k
    }
253
254
1.78k
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
255
1.78k
        full_encode_ascending(value, buf);
256
1.78k
    }
257
258
0
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
259
0
        if (encoded_key->size < sizeof(UnsignedCppType)) {
260
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
261
0
                                                            sizeof(UnsignedCppType),
262
0
                                                            encoded_key->size));
263
0
        }
264
0
        UnsignedCppType unsigned_val;
265
0
        memcpy(&unsigned_val, encoded_key->data, sizeof(UnsignedCppType));
266
0
        unsigned_val = to_endian<std::endian::big>(unsigned_val);
267
0
        memcpy(cell_ptr, &unsigned_val, sizeof(UnsignedCppType));
268
0
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
269
0
        return Status::OK();
270
0
    }
271
};
272
273
template <>
274
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_DECIMAL> {
275
public:
276
48.7k
    static void full_encode_ascending(const void* value, std::string* buf) {
277
48.7k
        decimal12_t decimal_val;
278
48.7k
        memcpy(&decimal_val, value, sizeof(decimal12_t));
279
48.7k
        KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_BIGINT>::full_encode_ascending(
280
48.7k
                &decimal_val.integer, buf);
281
48.7k
        KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_INT>::full_encode_ascending(&decimal_val.fraction,
282
48.7k
                                                                              buf);
283
48.7k
    } // namespace doris
284
285
70
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
286
70
        full_encode_ascending(value, buf);
287
70
    }
288
289
64
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
290
64
        decimal12_t decimal_val = {0, 0};
291
64
        RETURN_IF_ERROR(KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_BIGINT>::decode_ascending(
292
64
                encoded_key, sizeof(decimal_val.integer), (uint8_t*)&decimal_val.integer));
293
64
        RETURN_IF_ERROR(KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_INT>::decode_ascending(
294
64
                encoded_key, sizeof(decimal_val.fraction), (uint8_t*)&decimal_val.fraction));
295
64
        memcpy(cell_ptr, &decimal_val, sizeof(decimal12_t));
296
64
        return Status::OK();
297
64
    }
298
};
299
300
template <>
301
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_CHAR> {
302
public:
303
39
    NO_SANITIZE_UNDEFINED static void full_encode_ascending(const void* value, std::string* buf) {
304
39
        auto slice = reinterpret_cast<const Slice*>(value);
305
39
        buf->append(slice->get_data(), slice->get_size());
306
39
    }
307
308
    NO_SANITIZE_UNDEFINED static void encode_ascending(const void* value, size_t index_size,
309
743
                                                       std::string* buf) {
310
743
        const Slice* slice = (const Slice*)value;
311
743
        CHECK(index_size <= slice->size)
312
0
                << "index size is larger than char size, index=" << index_size
313
0
                << ", char=" << slice->size;
314
743
        buf->append(slice->data, index_size);
315
743
    }
316
317
0
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
318
0
        throw Exception(Status::FatalError("decode_ascending is not implemented"));
319
0
    }
320
};
321
322
template <>
323
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_VARCHAR> {
324
public:
325
14.1M
    NO_SANITIZE_UNDEFINED static void full_encode_ascending(const void* value, std::string* buf) {
326
14.1M
        auto slice = reinterpret_cast<const Slice*>(value);
327
14.1M
        buf->append(slice->get_data(), slice->get_size());
328
14.1M
    }
329
330
    NO_SANITIZE_UNDEFINED static void encode_ascending(const void* value, size_t index_size,
331
34.3k
                                                       std::string* buf) {
332
34.3k
        const Slice* slice = (const Slice*)value;
333
34.3k
        size_t copy_size = std::min(index_size, slice->size);
334
34.3k
        buf->append(slice->data, copy_size);
335
34.3k
    }
336
337
0
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
338
0
        throw Exception(Status::FatalError("decode_ascending is not implemented"));
339
0
    }
340
};
341
342
template <>
343
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_STRING> {
344
public:
345
889
    NO_SANITIZE_UNDEFINED static void full_encode_ascending(const void* value, std::string* buf) {
346
889
        auto slice = reinterpret_cast<const Slice*>(value);
347
889
        buf->append(slice->get_data(), slice->get_size());
348
889
    }
349
350
    NO_SANITIZE_UNDEFINED static void encode_ascending(const void* value, size_t index_size,
351
49
                                                       std::string* buf) {
352
49
        const Slice* slice = (const Slice*)value;
353
49
        size_t copy_size = std::min(index_size, slice->size);
354
49
        buf->append(slice->data, copy_size);
355
49
    }
356
357
0
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
358
0
        throw Exception(Status::FatalError("decode_ascending is not implemented"));
359
0
    }
360
};
361
362
template <FieldType field_type>
363
class KeyCoderTraitsForFloat {
364
public:
365
    using CppType = typename StorageTypeTraits<field_type>::StorageType;
366
    using UnsignedCppType = typename StorageTypeTraits<field_type>::UnsignedStorageType;
367
368
97.0k
    static UnsignedCppType encode_float(CppType value) {
369
97.0k
        return sortable_float_bits(float_to_int_bits(value));
370
97.0k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE12encode_floatEf
Line
Count
Source
368
48.5k
    static UnsignedCppType encode_float(CppType value) {
369
48.5k
        return sortable_float_bits(float_to_int_bits(value));
370
48.5k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE12encode_floatEd
Line
Count
Source
368
48.5k
    static UnsignedCppType encode_float(CppType value) {
369
48.5k
        return sortable_float_bits(float_to_int_bits(value));
370
48.5k
    }
371
372
128
    static CppType decode_float(UnsignedCppType sortable_bits) {
373
128
        return int_bits_to_float(unsortable_float_bits(sortable_bits));
374
128
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE12decode_floatEj
Line
Count
Source
372
64
    static CppType decode_float(UnsignedCppType sortable_bits) {
373
64
        return int_bits_to_float(unsortable_float_bits(sortable_bits));
374
64
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE12decode_floatEm
Line
Count
Source
372
64
    static CppType decode_float(UnsignedCppType sortable_bits) {
373
64
        return int_bits_to_float(unsortable_float_bits(sortable_bits));
374
64
    }
375
376
    // -infinity < -100.0 < -1.0 < -0.0 < 0.0 < 1.0 < 100.0 < infinity < NaN
377
97.0k
    static void full_encode_ascending(const void* value, std::string* buf) {
378
97.0k
        CppType val;
379
97.0k
        std::memcpy(&val, value, sizeof(CppType));
380
97.0k
        UnsignedCppType sortable_val = encode_float(val);
381
97.0k
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
382
97.0k
                                             << (sizeof(UnsignedCppType) * 8 - 1);
383
97.0k
        sortable_val ^= sign_bit;
384
97.0k
        sortable_val = to_endian<std::endian::big>(sortable_val);
385
97.0k
        buf->append(reinterpret_cast<const char*>(&sortable_val), sizeof(UnsignedCppType));
386
97.0k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
377
48.5k
    static void full_encode_ascending(const void* value, std::string* buf) {
378
48.5k
        CppType val;
379
48.5k
        std::memcpy(&val, value, sizeof(CppType));
380
48.5k
        UnsignedCppType sortable_val = encode_float(val);
381
48.5k
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
382
48.5k
                                             << (sizeof(UnsignedCppType) * 8 - 1);
383
48.5k
        sortable_val ^= sign_bit;
384
48.5k
        sortable_val = to_endian<std::endian::big>(sortable_val);
385
48.5k
        buf->append(reinterpret_cast<const char*>(&sortable_val), sizeof(UnsignedCppType));
386
48.5k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE21full_encode_ascendingEPKvPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
377
48.5k
    static void full_encode_ascending(const void* value, std::string* buf) {
378
48.5k
        CppType val;
379
48.5k
        std::memcpy(&val, value, sizeof(CppType));
380
48.5k
        UnsignedCppType sortable_val = encode_float(val);
381
48.5k
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
382
48.5k
                                             << (sizeof(UnsignedCppType) * 8 - 1);
383
48.5k
        sortable_val ^= sign_bit;
384
48.5k
        sortable_val = to_endian<std::endian::big>(sortable_val);
385
48.5k
        buf->append(reinterpret_cast<const char*>(&sortable_val), sizeof(UnsignedCppType));
386
48.5k
    }
387
388
0
    static void encode_ascending(const void* value, size_t index_size, std::string* buf) {
389
0
        full_encode_ascending(value, buf);
390
0
    }
Unexecuted instantiation: _ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Unexecuted instantiation: _ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE16encode_ascendingEPKvmPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
391
392
128
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
393
128
        if (encoded_key->size < sizeof(UnsignedCppType)) {
394
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
395
0
                                                            sizeof(UnsignedCppType),
396
0
                                                            encoded_key->size));
397
0
        }
398
128
        UnsignedCppType sortable_val;
399
128
        std::memcpy(&sortable_val, encoded_key->data, sizeof(UnsignedCppType));
400
128
        sortable_val = to_endian<std::endian::big>(sortable_val);
401
128
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
402
128
                                             << (sizeof(UnsignedCppType) * 8 - 1);
403
128
        sortable_val ^= sign_bit;
404
128
        CppType val = decode_float(sortable_val);
405
128
        std::memcpy(cell_ptr, &val, sizeof(CppType));
406
128
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
407
128
        return Status::OK();
408
128
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
392
64
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
393
64
        if (encoded_key->size < sizeof(UnsignedCppType)) {
394
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
395
0
                                                            sizeof(UnsignedCppType),
396
0
                                                            encoded_key->size));
397
0
        }
398
64
        UnsignedCppType sortable_val;
399
64
        std::memcpy(&sortable_val, encoded_key->data, sizeof(UnsignedCppType));
400
64
        sortable_val = to_endian<std::endian::big>(sortable_val);
401
64
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
402
64
                                             << (sizeof(UnsignedCppType) * 8 - 1);
403
64
        sortable_val ^= sign_bit;
404
64
        CppType val = decode_float(sortable_val);
405
64
        std::memcpy(cell_ptr, &val, sizeof(CppType));
406
64
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
407
64
        return Status::OK();
408
64
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE16decode_ascendingEPNS_5SliceEmPh
Line
Count
Source
392
64
    static Status decode_ascending(Slice* encoded_key, size_t index_size, uint8_t* cell_ptr) {
393
64
        if (encoded_key->size < sizeof(UnsignedCppType)) {
394
0
            return Status::InvalidArgument(absl::Substitute("Key too short, need=$0 vs real=$1",
395
0
                                                            sizeof(UnsignedCppType),
396
0
                                                            encoded_key->size));
397
0
        }
398
64
        UnsignedCppType sortable_val;
399
64
        std::memcpy(&sortable_val, encoded_key->data, sizeof(UnsignedCppType));
400
64
        sortable_val = to_endian<std::endian::big>(sortable_val);
401
64
        constexpr UnsignedCppType sign_bit = UnsignedCppType(1)
402
64
                                             << (sizeof(UnsignedCppType) * 8 - 1);
403
64
        sortable_val ^= sign_bit;
404
64
        CppType val = decode_float(sortable_val);
405
64
        std::memcpy(cell_ptr, &val, sizeof(CppType));
406
64
        encoded_key->remove_prefix(sizeof(UnsignedCppType));
407
64
        return Status::OK();
408
64
    }
409
410
private:
411
97.0k
    static UnsignedCppType float_to_int_bits(CppType value) {
412
97.0k
        const CppType canonical = StorageLayout<field_type>::canonicalize_nan(value);
413
97.0k
        UnsignedCppType result;
414
97.0k
        std::memcpy(&result, &canonical, sizeof(CppType));
415
97.0k
        return result;
416
97.0k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE17float_to_int_bitsEf
Line
Count
Source
411
48.5k
    static UnsignedCppType float_to_int_bits(CppType value) {
412
48.5k
        const CppType canonical = StorageLayout<field_type>::canonicalize_nan(value);
413
48.5k
        UnsignedCppType result;
414
48.5k
        std::memcpy(&result, &canonical, sizeof(CppType));
415
48.5k
        return result;
416
48.5k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE17float_to_int_bitsEd
Line
Count
Source
411
48.5k
    static UnsignedCppType float_to_int_bits(CppType value) {
412
48.5k
        const CppType canonical = StorageLayout<field_type>::canonicalize_nan(value);
413
48.5k
        UnsignedCppType result;
414
48.5k
        std::memcpy(&result, &canonical, sizeof(CppType));
415
48.5k
        return result;
416
48.5k
    }
417
418
97.2k
    static UnsignedCppType sortable_float_bits(UnsignedCppType bits) {
419
97.2k
        constexpr int32_t shift = sizeof(UnsignedCppType) * 8 - 1;
420
97.2k
        constexpr UnsignedCppType sign_bit = static_cast<UnsignedCppType>(1) << shift;
421
97.2k
        if ((bits & sign_bit) != 0) {
422
6.03k
            return bits ^ (sign_bit - 1);
423
91.1k
        } else {
424
91.1k
            return bits;
425
91.1k
        }
426
97.2k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE19sortable_float_bitsEj
Line
Count
Source
418
48.5k
    static UnsignedCppType sortable_float_bits(UnsignedCppType bits) {
419
48.5k
        constexpr int32_t shift = sizeof(UnsignedCppType) * 8 - 1;
420
48.5k
        constexpr UnsignedCppType sign_bit = static_cast<UnsignedCppType>(1) << shift;
421
48.5k
        if ((bits & sign_bit) != 0) {
422
2.98k
            return bits ^ (sign_bit - 1);
423
45.5k
        } else {
424
45.5k
            return bits;
425
45.5k
        }
426
48.5k
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE19sortable_float_bitsEm
Line
Count
Source
418
48.6k
    static UnsignedCppType sortable_float_bits(UnsignedCppType bits) {
419
48.6k
        constexpr int32_t shift = sizeof(UnsignedCppType) * 8 - 1;
420
48.6k
        constexpr UnsignedCppType sign_bit = static_cast<UnsignedCppType>(1) << shift;
421
48.6k
        if ((bits & sign_bit) != 0) {
422
3.04k
            return bits ^ (sign_bit - 1);
423
45.5k
        } else {
424
45.5k
            return bits;
425
45.5k
        }
426
48.6k
    }
427
428
128
    static CppType int_bits_to_float(UnsignedCppType bits) {
429
128
        CppType result;
430
128
        std::memcpy(&result, &bits, sizeof(CppType));
431
128
        return result;
432
128
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE17int_bits_to_floatEj
Line
Count
Source
428
64
    static CppType int_bits_to_float(UnsignedCppType bits) {
429
64
        CppType result;
430
64
        std::memcpy(&result, &bits, sizeof(CppType));
431
64
        return result;
432
64
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE17int_bits_to_floatEm
Line
Count
Source
428
64
    static CppType int_bits_to_float(UnsignedCppType bits) {
429
64
        CppType result;
430
64
        std::memcpy(&result, &bits, sizeof(CppType));
431
64
        return result;
432
64
    }
433
434
128
    static UnsignedCppType unsortable_float_bits(UnsignedCppType sortable_bits) {
435
128
        return sortable_float_bits(sortable_bits);
436
128
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE10EE21unsortable_float_bitsEj
Line
Count
Source
434
64
    static UnsignedCppType unsortable_float_bits(UnsignedCppType sortable_bits) {
435
64
        return sortable_float_bits(sortable_bits);
436
64
    }
_ZN5doris22KeyCoderTraitsForFloatILNS_9FieldTypeE11EE21unsortable_float_bitsEm
Line
Count
Source
434
64
    static UnsignedCppType unsortable_float_bits(UnsignedCppType sortable_bits) {
435
64
        return sortable_float_bits(sortable_bits);
436
64
    }
437
};
438
439
template <>
440
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_FLOAT>
441
        : public KeyCoderTraitsForFloat<FieldType::OLAP_FIELD_TYPE_FLOAT> {};
442
443
template <>
444
class KeyCoderTraits<FieldType::OLAP_FIELD_TYPE_DOUBLE>
445
        : public KeyCoderTraitsForFloat<FieldType::OLAP_FIELD_TYPE_DOUBLE> {};
446
447
// Every FieldType that goes through KeyCoder as a non-string scalar key.
448
// Strings are handled separately because they need length / padding logic
449
// outside KeyCoder.
450
#define DORIS_APPLY_FOR_KEY_ENCODABLE_NON_STRING_TYPES(M) \
451
12.5k
    M(OLAP_FIELD_TYPE_BOOL)                               \
452
159k
    M(OLAP_FIELD_TYPE_TINYINT)                            \
453
159k
    M(OLAP_FIELD_TYPE_SMALLINT)                           \
454
777k
    M(OLAP_FIELD_TYPE_INT)                                \
455
777k
    M(OLAP_FIELD_TYPE_BIGINT)                             \
456
60.7k
    M(OLAP_FIELD_TYPE_LARGEINT)                           \
457
23.9k
    M(OLAP_FIELD_TYPE_FLOAT)                              \
458
23
    M(OLAP_FIELD_TYPE_DOUBLE)                             \
459
363
    M(OLAP_FIELD_TYPE_DECIMAL)                            \
460
1.38k
    M(OLAP_FIELD_TYPE_DECIMAL32)                          \
461
1.38k
    M(OLAP_FIELD_TYPE_DECIMAL64)                          \
462
3.00k
    M(OLAP_FIELD_TYPE_DECIMAL128I)                        \
463
3.00k
    M(OLAP_FIELD_TYPE_DECIMAL256)                         \
464
1.98k
    M(OLAP_FIELD_TYPE_DATE)                               \
465
1.98k
    M(OLAP_FIELD_TYPE_DATETIME)                           \
466
266k
    M(OLAP_FIELD_TYPE_DATEV2)                             \
467
266k
    M(OLAP_FIELD_TYPE_DATETIMEV2)                         \
468
11.3k
    M(OLAP_FIELD_TYPE_TIMESTAMP_NS)                       \
469
12.4k
    M(OLAP_FIELD_TYPE_TIMESTAMPTZ)                        \
470
12.4k
    M(OLAP_FIELD_TYPE_IPV4)                               \
471
575
    M(OLAP_FIELD_TYPE_IPV6)                               \
472
1.30k
    M(OLAP_FIELD_TYPE_UUID)
473
474
// True for exactly the FieldTypes listed in
475
// DORIS_APPLY_FOR_KEY_ENCODABLE_NON_STRING_TYPES. Strings (CHAR/VARCHAR/STRING/
476
// VARBINARY) have their own short-key code path in row_cursor.cpp that calls
477
// storage_field->full_encode_ascending directly, and nested/aggregate types
478
// (ARRAY/MAP/STRUCT/VARIANT/HLL/BITMAP/JSONB/QUANTILE_STATE/AGG_STATE) are not
479
// key-encodable at all -- both groups must never reach the helpers below.
480
0
constexpr bool is_key_encodable_non_string_type(FieldType ft) {
481
0
    switch (ft) {
482
0
#define DORIS_KEY_ENCODABLE_CASE(FT) \
483
0
    case FieldType::FT:              \
484
0
        return true;
485
0
        DORIS_APPLY_FOR_KEY_ENCODABLE_NON_STRING_TYPES(DORIS_KEY_ENCODABLE_CASE)
486
0
#undef DORIS_KEY_ENCODABLE_CASE
487
0
    default:
488
0
        return false;
489
0
    }
490
0
}
491
492
// Convert a Field value to its StorageValue (via StorageLayout)
493
// and full-encode it as a byte-comparable ascending key via KeyCoder.
494
template <FieldType FT>
495
1.21M
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
1.21M
    static_assert(is_key_encodable_non_string_type(FT),
497
1.21M
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
1.21M
                  "strings have their own path in RowCursor that calls "
499
1.21M
                  "storage_field->full_encode_ascending directly, and nested / "
500
1.21M
                  "aggregate types are not key-encodable");
501
1.21M
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
1.21M
    coder->full_encode_ascending(&v, buf);
503
1.21M
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE24EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
11.3k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
11.3k
    static_assert(is_key_encodable_non_string_type(FT),
497
11.3k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
11.3k
                  "strings have their own path in RowCursor that calls "
499
11.3k
                  "storage_field->full_encode_ascending directly, and nested / "
500
11.3k
                  "aggregate types are not key-encodable");
501
11.3k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
11.3k
    coder->full_encode_ascending(&v, buf);
503
11.3k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE1EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
154k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
154k
    static_assert(is_key_encodable_non_string_type(FT),
497
154k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
154k
                  "strings have their own path in RowCursor that calls "
499
154k
                  "storage_field->full_encode_ascending directly, and nested / "
500
154k
                  "aggregate types are not key-encodable");
501
154k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
154k
    coder->full_encode_ascending(&v, buf);
503
154k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE3EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
5.49k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
5.49k
    static_assert(is_key_encodable_non_string_type(FT),
497
5.49k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
5.49k
                  "strings have their own path in RowCursor that calls "
499
5.49k
                  "storage_field->full_encode_ascending directly, and nested / "
500
5.49k
                  "aggregate types are not key-encodable");
501
5.49k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
5.49k
    coder->full_encode_ascending(&v, buf);
503
5.49k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE5EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
712k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
712k
    static_assert(is_key_encodable_non_string_type(FT),
497
712k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
712k
                  "strings have their own path in RowCursor that calls "
499
712k
                  "storage_field->full_encode_ascending directly, and nested / "
500
712k
                  "aggregate types are not key-encodable");
501
712k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
712k
    coder->full_encode_ascending(&v, buf);
503
712k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE7EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
36.8k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
36.8k
    static_assert(is_key_encodable_non_string_type(FT),
497
36.8k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
36.8k
                  "strings have their own path in RowCursor that calls "
499
36.8k
                  "storage_field->full_encode_ascending directly, and nested / "
500
36.8k
                  "aggregate types are not key-encodable");
501
36.8k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
36.8k
    coder->full_encode_ascending(&v, buf);
503
36.8k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE9EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
13.6k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
13.6k
    static_assert(is_key_encodable_non_string_type(FT),
497
13.6k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
13.6k
                  "strings have their own path in RowCursor that calls "
499
13.6k
                  "storage_field->full_encode_ascending directly, and nested / "
500
13.6k
                  "aggregate types are not key-encodable");
501
13.6k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
13.6k
    coder->full_encode_ascending(&v, buf);
503
13.6k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE10EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
28
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
28
    static_assert(is_key_encodable_non_string_type(FT),
497
28
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
28
                  "strings have their own path in RowCursor that calls "
499
28
                  "storage_field->full_encode_ascending directly, and nested / "
500
28
                  "aggregate types are not key-encodable");
501
28
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
28
    coder->full_encode_ascending(&v, buf);
503
28
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE11EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
26
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
26
    static_assert(is_key_encodable_non_string_type(FT),
497
26
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
26
                  "strings have their own path in RowCursor that calls "
499
26
                  "storage_field->full_encode_ascending directly, and nested / "
500
26
                  "aggregate types are not key-encodable");
501
26
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
26
    coder->full_encode_ascending(&v, buf);
503
26
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE16EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
58
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
58
    static_assert(is_key_encodable_non_string_type(FT),
497
58
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
58
                  "strings have their own path in RowCursor that calls "
499
58
                  "storage_field->full_encode_ascending directly, and nested / "
500
58
                  "aggregate types are not key-encodable");
501
58
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
58
    coder->full_encode_ascending(&v, buf);
503
58
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE31EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
458
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
458
    static_assert(is_key_encodable_non_string_type(FT),
497
458
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
458
                  "strings have their own path in RowCursor that calls "
499
458
                  "storage_field->full_encode_ascending directly, and nested / "
500
458
                  "aggregate types are not key-encodable");
501
458
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
458
    coder->full_encode_ascending(&v, buf);
503
458
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE32EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
397
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
397
    static_assert(is_key_encodable_non_string_type(FT),
497
397
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
397
                  "strings have their own path in RowCursor that calls "
499
397
                  "storage_field->full_encode_ascending directly, and nested / "
500
397
                  "aggregate types are not key-encodable");
501
397
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
397
    coder->full_encode_ascending(&v, buf);
503
397
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE33EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
1.14k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
1.14k
    static_assert(is_key_encodable_non_string_type(FT),
497
1.14k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
1.14k
                  "strings have their own path in RowCursor that calls "
499
1.14k
                  "storage_field->full_encode_ascending directly, and nested / "
500
1.14k
                  "aggregate types are not key-encodable");
501
1.14k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
1.14k
    coder->full_encode_ascending(&v, buf);
503
1.14k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE37EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
784
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
784
    static_assert(is_key_encodable_non_string_type(FT),
497
784
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
784
                  "strings have their own path in RowCursor that calls "
499
784
                  "storage_field->full_encode_ascending directly, and nested / "
500
784
                  "aggregate types are not key-encodable");
501
784
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
784
    coder->full_encode_ascending(&v, buf);
503
784
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE14EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
1.69k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
1.69k
    static_assert(is_key_encodable_non_string_type(FT),
497
1.69k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
1.69k
                  "strings have their own path in RowCursor that calls "
499
1.69k
                  "storage_field->full_encode_ascending directly, and nested / "
500
1.69k
                  "aggregate types are not key-encodable");
501
1.69k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
1.69k
    coder->full_encode_ascending(&v, buf);
503
1.69k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE15EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
643
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
643
    static_assert(is_key_encodable_non_string_type(FT),
497
643
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
643
                  "strings have their own path in RowCursor that calls "
499
643
                  "storage_field->full_encode_ascending directly, and nested / "
500
643
                  "aggregate types are not key-encodable");
501
643
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
643
    coder->full_encode_ascending(&v, buf);
503
643
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE28EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
254k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
254k
    static_assert(is_key_encodable_non_string_type(FT),
497
254k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
254k
                  "strings have their own path in RowCursor that calls "
499
254k
                  "storage_field->full_encode_ascending directly, and nested / "
500
254k
                  "aggregate types are not key-encodable");
501
254k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
254k
    coder->full_encode_ascending(&v, buf);
503
254k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE29EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
6.87k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
6.87k
    static_assert(is_key_encodable_non_string_type(FT),
497
6.87k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
6.87k
                  "strings have their own path in RowCursor that calls "
499
6.87k
                  "storage_field->full_encode_ascending directly, and nested / "
500
6.87k
                  "aggregate types are not key-encodable");
501
6.87k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
6.87k
    coder->full_encode_ascending(&v, buf);
503
6.87k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE41EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
280
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
280
    static_assert(is_key_encodable_non_string_type(FT),
497
280
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
280
                  "strings have their own path in RowCursor that calls "
499
280
                  "storage_field->full_encode_ascending directly, and nested / "
500
280
                  "aggregate types are not key-encodable");
501
280
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
280
    coder->full_encode_ascending(&v, buf);
503
280
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE40EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
8.16k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
8.16k
    static_assert(is_key_encodable_non_string_type(FT),
497
8.16k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
8.16k
                  "strings have their own path in RowCursor that calls "
499
8.16k
                  "storage_field->full_encode_ascending directly, and nested / "
500
8.16k
                  "aggregate types are not key-encodable");
501
8.16k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
8.16k
    coder->full_encode_ascending(&v, buf);
503
8.16k
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE38EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
185
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
185
    static_assert(is_key_encodable_non_string_type(FT),
497
185
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
185
                  "strings have their own path in RowCursor that calls "
499
185
                  "storage_field->full_encode_ascending directly, and nested / "
500
185
                  "aggregate types are not key-encodable");
501
185
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
185
    coder->full_encode_ascending(&v, buf);
503
185
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE39EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
165
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
165
    static_assert(is_key_encodable_non_string_type(FT),
497
165
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
165
                  "strings have their own path in RowCursor that calls "
499
165
                  "storage_field->full_encode_ascending directly, and nested / "
500
165
                  "aggregate types are not key-encodable");
501
165
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
165
    coder->full_encode_ascending(&v, buf);
503
165
}
_ZN5doris24full_encode_field_as_keyILNS_9FieldTypeE42EEEvRKNS_5FieldEPKNS_8KeyCoderEPNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
Line
Count
Source
495
1.19k
inline void full_encode_field_as_key(const Field& f, const KeyCoder* coder, std::string* buf) {
496
1.19k
    static_assert(is_key_encodable_non_string_type(FT),
497
1.19k
                  "full_encode_field_as_key is for non-string scalar keys only; "
498
1.19k
                  "strings have their own path in RowCursor that calls "
499
1.19k
                  "storage_field->full_encode_ascending directly, and nested / "
500
1.19k
                  "aggregate types are not key-encodable");
501
1.19k
    const auto v = StorageLayout<FT>::to_storage(f.get<storage_field_type_to_primitive_type(FT)>());
502
1.19k
    coder->full_encode_ascending(&v, buf);
503
1.19k
}
504
505
} // namespace doris