Line | Count | Source |
1 | | // Licensed to the Apache Software Foundation (ASF) under one |
2 | | // or more contributor license agreements. See the NOTICE file |
3 | | // distributed with this work for additional information |
4 | | // regarding copyright ownership. The ASF licenses this file |
5 | | // to you under the Apache License, Version 2.0 (the |
6 | | // "License"); you may not use this file except in compliance |
7 | | // with the License. You may obtain a copy of the License at |
8 | | // |
9 | | // http://www.apache.org/licenses/LICENSE-2.0 |
10 | | // |
11 | | // Unless required by applicable law or agreed to in writing, |
12 | | // software distributed under the License is distributed on an |
13 | | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
14 | | // KIND, either express or implied. See the License for the |
15 | | // specific language governing permissions and limitations |
16 | | // under the License. |
17 | | // This file is copied from |
18 | | // https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Field.h |
19 | | // and modified by Doris |
20 | | |
21 | | #pragma once |
22 | | |
23 | | #include <fmt/format.h> |
24 | | #include <glog/logging.h> |
25 | | |
26 | | #include <algorithm> |
27 | | #include <cassert> |
28 | | #include <cmath> |
29 | | #include <cstring> |
30 | | #include <string> |
31 | | #include <string_view> |
32 | | #include <type_traits> |
33 | | #include <utility> |
34 | | #include <vector> |
35 | | |
36 | | #include "common/compiler_util.h" // IWYU pragma: keep |
37 | | #include "common/exception.h" |
38 | | #include "core/data_type/primitive_type.h" |
39 | | #include "core/string_view.h" |
40 | | #include "core/types.h" |
41 | | #include "core/uint128.h" |
42 | | #include "core/value/bitmap_value.h" |
43 | | #include "core/value/hll.h" |
44 | | #include "core/value/quantile_state.h" |
45 | | #include "core/value/variant/variant_field.h" |
46 | | |
47 | | namespace doris { |
48 | | template <PrimitiveType type> |
49 | | struct PrimitiveTypeTraits; |
50 | | template <typename T> |
51 | | struct TypeName; |
52 | | struct PackedInt128; |
53 | | } // namespace doris |
54 | | |
55 | | namespace doris { |
56 | | |
57 | | class Field; |
58 | | |
59 | | using FieldVector = std::vector<Field>; |
60 | | |
61 | | /// Array and Struct use the same storage type -- FieldVector, but we declare |
62 | | /// distinct types for them, so that the caller can choose whether it wants to |
63 | | /// construct a Field of Array or a Struct type. An alternative approach would be |
64 | | /// to construct both of these types from FieldVector, and have the caller |
65 | | /// specify the desired Field type explicitly. |
66 | | struct Array : public FieldVector { |
67 | | using FieldVector::FieldVector; |
68 | | }; |
69 | | |
70 | | struct Struct : public FieldVector { |
71 | | using FieldVector::FieldVector; |
72 | | }; |
73 | | |
74 | | struct Map : public FieldVector { |
75 | | using FieldVector::FieldVector; |
76 | | }; |
77 | | |
78 | | //TODO: rethink if we really need this? it only save one pointer from std::string |
79 | | // not POD type so could only use read/write_json_binary instead of read/write_binary |
80 | | class JsonbField { |
81 | | public: |
82 | 43.9k | JsonbField() = default; |
83 | 175k | ~JsonbField() = default; // unique_ptr will handle cleanup automatically |
84 | | |
85 | 43.9k | JsonbField(const char* ptr, size_t len) : size(len) { |
86 | 43.9k | data = std::make_unique<char[]>(size); |
87 | 43.9k | if (!data) { |
88 | 0 | throw Exception(Status::FatalError("new data buffer failed, size: {}", size)); |
89 | 0 | } |
90 | 43.9k | if (size > 0) { |
91 | 43.4k | memcpy(data.get(), ptr, size); |
92 | 43.4k | } |
93 | 43.9k | } |
94 | | |
95 | 12 | JsonbField(const JsonbField& x) : size(x.size) { |
96 | 12 | data = std::make_unique<char[]>(size); |
97 | 12 | if (!data) { |
98 | 0 | throw Exception(Status::FatalError("new data buffer failed, size: {}", size)); |
99 | 0 | } |
100 | 12 | if (size > 0) { |
101 | 12 | memcpy(data.get(), x.data.get(), size); |
102 | 12 | } |
103 | 12 | } |
104 | | |
105 | 87.9k | JsonbField(JsonbField&& x) noexcept : data(std::move(x.data)), size(x.size) { x.size = 0; } |
106 | | |
107 | | // dispatch for all type of storage. so need this. but not really used now. |
108 | 2 | JsonbField& operator=(const JsonbField& x) { |
109 | 2 | if (this != &x) { |
110 | 2 | data = std::make_unique<char[]>(x.size); |
111 | 2 | if (!data) { |
112 | 0 | throw Exception(Status::FatalError("new data buffer failed, size: {}", x.size)); |
113 | 0 | } |
114 | 2 | if (x.size > 0) { |
115 | 1 | memcpy(data.get(), x.data.get(), x.size); |
116 | 1 | } |
117 | 2 | size = x.size; |
118 | 2 | } |
119 | 2 | return *this; |
120 | 2 | } |
121 | | |
122 | 43.9k | JsonbField& operator=(JsonbField&& x) noexcept { |
123 | 43.9k | if (this != &x) { |
124 | 43.9k | data = std::move(x.data); |
125 | 43.9k | size = x.size; |
126 | 43.9k | x.size = 0; |
127 | 43.9k | } |
128 | 43.9k | return *this; |
129 | 43.9k | } |
130 | | |
131 | 44.0k | const char* get_value() const { return data.get(); } |
132 | 44.0k | size_t get_size() const { return size; } |
133 | | |
134 | 0 | bool operator<(const JsonbField& r) const { |
135 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
136 | 0 | } |
137 | 0 | bool operator<=(const JsonbField& r) const { |
138 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
139 | 0 | } |
140 | 0 | bool operator==(const JsonbField& r) const { |
141 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
142 | 0 | } |
143 | 0 | bool operator>(const JsonbField& r) const { |
144 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
145 | 0 | } |
146 | 0 | bool operator>=(const JsonbField& r) const { |
147 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
148 | 0 | } |
149 | 0 | bool operator!=(const JsonbField& r) const { |
150 | 0 | throw Exception(Status::FatalError("comparing between JsonbField is not supported")); |
151 | 0 | } |
152 | | |
153 | 0 | const JsonbField& operator+=(const JsonbField& r) { |
154 | 0 | throw Exception(Status::FatalError("Not support plus opration on JsonbField")); |
155 | 0 | } |
156 | | |
157 | 0 | const JsonbField& operator-=(const JsonbField& r) { |
158 | 0 | throw Exception(Status::FatalError("Not support minus opration on JsonbField")); |
159 | 0 | } |
160 | | |
161 | | private: |
162 | | std::unique_ptr<char[]> data = nullptr; |
163 | | size_t size = 0; |
164 | | }; |
165 | | |
166 | | template <typename T> |
167 | | bool decimal_equal(T x, T y, UInt32 x_scale, UInt32 y_scale); |
168 | | template <typename T> |
169 | | bool decimal_less(T x, T y, UInt32 x_scale, UInt32 y_scale); |
170 | | template <typename T> |
171 | | bool decimal_less_or_equal(T x, T y, UInt32 x_scale, UInt32 y_scale); |
172 | | |
173 | | /** 32 is enough. Round number is used for alignment and for better arithmetic inside std::vector. |
174 | | * NOTE: Actually, sizeof(std::string) is 32 when using libc++, so Field is 40 bytes. |
175 | | */ |
176 | | constexpr size_t DBMS_MIN_FIELD_SIZE = 32; |
177 | | |
178 | | /** Discriminated union of several types. |
179 | | * Made for replacement of `boost::variant` |
180 | | * is not generalized, |
181 | | * but somewhat more efficient, and simpler. |
182 | | * |
183 | | * Used to represent a single value of one of several types in memory. |
184 | | * Warning! Prefer to use chunks of columns instead of single values. See Column.h |
185 | | */ |
186 | | class Field { |
187 | | public: |
188 | | static const int MIN_NON_POD = 16; |
189 | 189M | Field() : type(PrimitiveType::TYPE_NULL) {} |
190 | | // set Types::Null explictly and avoid other types |
191 | 9.53M | Field(PrimitiveType w) : type(w) {} |
192 | | template <PrimitiveType T> |
193 | 29.4M | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { |
194 | | // Publish the type only after construction succeeds, so allocation failures cannot |
195 | | // destroy uninitialized owned storage (including long binary values). |
196 | 29.4M | auto f = Field(); |
197 | 29.4M | f.template create_concrete<T>(data); |
198 | 29.4M | return f; |
199 | 29.4M | } _ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE23EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 965k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 965k | auto f = Field(); | 197 | 965k | f.template create_concrete<T>(data); | 198 | 965k | return f; | 199 | 965k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE37EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 24.2k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 24.2k | auto f = Field(); | 197 | 24.2k | f.template create_concrete<T>(data); | 198 | 24.2k | return f; | 199 | 24.2k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE41EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 15 | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 15 | auto f = Field(); | 197 | 15 | f.template create_concrete<T>(data); | 198 | 15 | return f; | 199 | 15 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE5EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 26.3M | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 26.3M | auto f = Field(); | 197 | 26.3M | f.template create_concrete<T>(data); | 198 | 26.3M | return f; | 199 | 26.3M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE17EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 40.9k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 40.9k | auto f = Field(); | 197 | 40.9k | f.template create_concrete<T>(data); | 198 | 40.9k | return f; | 199 | 40.9k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE28EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 22.8k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 22.8k | auto f = Field(); | 197 | 22.8k | f.template create_concrete<T>(data); | 198 | 22.8k | return f; | 199 | 22.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE29EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 29.2k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 29.2k | auto f = Field(); | 197 | 29.2k | f.template create_concrete<T>(data); | 198 | 29.2k | return f; | 199 | 29.2k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE20EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 8.78k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 8.78k | auto f = Field(); | 197 | 8.78k | f.template create_concrete<T>(data); | 198 | 8.78k | return f; | 199 | 8.78k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE30EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 27.5k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 27.5k | auto f = Field(); | 197 | 27.5k | f.template create_concrete<T>(data); | 198 | 27.5k | return f; | 199 | 27.5k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE35EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 38.6k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 38.6k | auto f = Field(); | 197 | 38.6k | f.template create_concrete<T>(data); | 198 | 38.6k | return f; | 199 | 38.6k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE19EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 404 | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 404 | auto f = Field(); | 197 | 404 | f.template create_concrete<T>(data); | 198 | 404 | return f; | 199 | 404 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE24EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 22.3k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 22.3k | auto f = Field(); | 197 | 22.3k | f.template create_concrete<T>(data); | 198 | 22.3k | return f; | 199 | 22.3k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE27EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 179 | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 179 | auto f = Field(); | 197 | 179 | f.template create_concrete<T>(data); | 198 | 179 | return f; | 199 | 179 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE43EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 6.82k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 6.82k | auto f = Field(); | 197 | 6.82k | f.template create_concrete<T>(data); | 198 | 6.82k | return f; | 199 | 6.82k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE42EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 17.3k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 17.3k | auto f = Field(); | 197 | 17.3k | f.template create_concrete<T>(data); | 198 | 17.3k | return f; | 199 | 17.3k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE22EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 2.42k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 2.42k | auto f = Field(); | 197 | 2.42k | f.template create_concrete<T>(data); | 198 | 2.42k | return f; | 199 | 2.42k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE3EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 409k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 409k | auto f = Field(); | 197 | 409k | f.template create_concrete<T>(data); | 198 | 409k | return f; | 199 | 409k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE4EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 51.8k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 51.8k | auto f = Field(); | 197 | 51.8k | f.template create_concrete<T>(data); | 198 | 51.8k | return f; | 199 | 51.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE6EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 161k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 161k | auto f = Field(); | 197 | 161k | f.template create_concrete<T>(data); | 198 | 161k | return f; | 199 | 161k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE8EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 44.3k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 44.3k | auto f = Field(); | 197 | 44.3k | f.template create_concrete<T>(data); | 198 | 44.3k | return f; | 199 | 44.3k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE9EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 39.4k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 39.4k | auto f = Field(); | 197 | 39.4k | f.template create_concrete<T>(data); | 198 | 39.4k | return f; | 199 | 39.4k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE11EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 13.6k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 13.6k | auto f = Field(); | 197 | 13.6k | f.template create_concrete<T>(data); | 198 | 13.6k | return f; | 199 | 13.6k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE12EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 13.8k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 13.8k | auto f = Field(); | 197 | 13.8k | f.template create_concrete<T>(data); | 198 | 13.8k | return f; | 199 | 13.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE26EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 100k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 100k | auto f = Field(); | 197 | 100k | f.template create_concrete<T>(data); | 198 | 100k | return f; | 199 | 100k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE36EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 33.3k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 33.3k | auto f = Field(); | 197 | 33.3k | f.template create_concrete<T>(data); | 198 | 33.3k | return f; | 199 | 33.3k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE2EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 31.0k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 31.0k | auto f = Field(); | 197 | 31.0k | f.template create_concrete<T>(data); | 198 | 31.0k | return f; | 199 | 31.0k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE7EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 39.7k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 39.7k | auto f = Field(); | 197 | 39.7k | f.template create_concrete<T>(data); | 198 | 39.7k | return f; | 199 | 39.7k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE25EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 596k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 596k | auto f = Field(); | 197 | 596k | f.template create_concrete<T>(data); | 198 | 596k | return f; | 199 | 596k | } |
Unexecuted instantiation: _ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE38EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Unexecuted instantiation: _ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE39EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE _ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE15EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 1.15k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 1.15k | auto f = Field(); | 197 | 1.15k | f.template create_concrete<T>(data); | 198 | 1.15k | return f; | 199 | 1.15k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE10EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 314k | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 314k | auto f = Field(); | 197 | 314k | f.template create_concrete<T>(data); | 198 | 314k | return f; | 199 | 314k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE31EEES0_RKNS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 193 | 4 | static Field create_field(const typename PrimitiveTypeTraits<T>::CppType& data) { | 194 | | // Publish the type only after construction succeeds, so allocation failures cannot | 195 | | // destroy uninitialized owned storage (including long binary values). | 196 | 4 | auto f = Field(); | 197 | 4 | f.template create_concrete<T>(data); | 198 | 4 | return f; | 199 | 4 | } |
|
200 | | template <PrimitiveType T> |
201 | 92.3M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { |
202 | 92.3M | auto f = Field(); |
203 | 92.3M | f.template create_concrete<T>(std::move(data)); |
204 | 92.3M | return f; |
205 | 92.3M | } _ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE23EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 17.6M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 17.6M | auto f = Field(); | 203 | 17.6M | f.template create_concrete<T>(std::move(data)); | 204 | 17.6M | return f; | 205 | 17.6M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE17EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 89.8k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 89.8k | auto f = Field(); | 203 | 89.8k | f.template create_concrete<T>(std::move(data)); | 204 | 89.8k | return f; | 205 | 89.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE1EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 47.8k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 47.8k | auto f = Field(); | 203 | 47.8k | f.template create_concrete<T>(std::move(data)); | 204 | 47.8k | return f; | 205 | 47.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE18EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 18.4k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 18.4k | auto f = Field(); | 203 | 18.4k | f.template create_concrete<T>(std::move(data)); | 204 | 18.4k | return f; | 205 | 18.4k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE25EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 221k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 221k | auto f = Field(); | 203 | 221k | f.template create_concrete<T>(std::move(data)); | 204 | 221k | return f; | 205 | 221k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE26EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 2.08M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 2.08M | auto f = Field(); | 203 | 2.08M | f.template create_concrete<T>(std::move(data)); | 204 | 2.08M | return f; | 205 | 2.08M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE12EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 6.23k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 6.23k | auto f = Field(); | 203 | 6.23k | f.template create_concrete<T>(std::move(data)); | 204 | 6.23k | return f; | 205 | 6.23k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE28EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 47.6k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 47.6k | auto f = Field(); | 203 | 47.6k | f.template create_concrete<T>(std::move(data)); | 204 | 47.6k | return f; | 205 | 47.6k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE29EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 13.5M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 13.5M | auto f = Field(); | 203 | 13.5M | f.template create_concrete<T>(std::move(data)); | 204 | 13.5M | return f; | 205 | 13.5M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE20EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 10.8k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 10.8k | auto f = Field(); | 203 | 10.8k | f.template create_concrete<T>(std::move(data)); | 204 | 10.8k | return f; | 205 | 10.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE30EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 80.8k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 80.8k | auto f = Field(); | 203 | 80.8k | f.template create_concrete<T>(std::move(data)); | 204 | 80.8k | return f; | 205 | 80.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE35EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 9.55k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 9.55k | auto f = Field(); | 203 | 9.55k | f.template create_concrete<T>(std::move(data)); | 204 | 9.55k | return f; | 205 | 9.55k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE36EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 4.99k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 4.99k | auto f = Field(); | 203 | 4.99k | f.template create_concrete<T>(std::move(data)); | 204 | 4.99k | return f; | 205 | 4.99k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE31EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 87.9k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 87.9k | auto f = Field(); | 203 | 87.9k | f.template create_concrete<T>(std::move(data)); | 204 | 87.9k | return f; | 205 | 87.9k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE41EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 65 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 65 | auto f = Field(); | 203 | 65 | f.template create_concrete<T>(std::move(data)); | 204 | 65 | return f; | 205 | 65 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE2EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 28.3M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 28.3M | auto f = Field(); | 203 | 28.3M | f.template create_concrete<T>(std::move(data)); | 204 | 28.3M | return f; | 205 | 28.3M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE3EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 4.48M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 4.48M | auto f = Field(); | 203 | 4.48M | f.template create_concrete<T>(std::move(data)); | 204 | 4.48M | return f; | 205 | 4.48M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE4EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 96.8k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 96.8k | auto f = Field(); | 203 | 96.8k | f.template create_concrete<T>(std::move(data)); | 204 | 96.8k | return f; | 205 | 96.8k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE5EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 1.82M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 1.82M | auto f = Field(); | 203 | 1.82M | f.template create_concrete<T>(std::move(data)); | 204 | 1.82M | return f; | 205 | 1.82M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE6EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 22.5M | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 22.5M | auto f = Field(); | 203 | 22.5M | f.template create_concrete<T>(std::move(data)); | 204 | 22.5M | return f; | 205 | 22.5M | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE7EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 131k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 131k | auto f = Field(); | 203 | 131k | f.template create_concrete<T>(std::move(data)); | 204 | 131k | return f; | 205 | 131k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE8EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 52.2k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 52.2k | auto f = Field(); | 203 | 52.2k | f.template create_concrete<T>(std::move(data)); | 204 | 52.2k | return f; | 205 | 52.2k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE9EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 61.4k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 61.4k | auto f = Field(); | 203 | 61.4k | f.template create_concrete<T>(std::move(data)); | 204 | 61.4k | return f; | 205 | 61.4k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE27EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 1 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 1 | auto f = Field(); | 203 | 1 | f.template create_concrete<T>(std::move(data)); | 204 | 1 | return f; | 205 | 1 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE16EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 4.43k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 4.43k | auto f = Field(); | 203 | 4.43k | f.template create_concrete<T>(std::move(data)); | 204 | 4.43k | return f; | 205 | 4.43k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE32EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 6.68k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 6.68k | auto f = Field(); | 203 | 6.68k | f.template create_concrete<T>(std::move(data)); | 204 | 6.68k | return f; | 205 | 6.68k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE11EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 6.21k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 6.21k | auto f = Field(); | 203 | 6.21k | f.template create_concrete<T>(std::move(data)); | 204 | 6.21k | return f; | 205 | 6.21k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE24EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 10 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 10 | auto f = Field(); | 203 | 10 | f.template create_concrete<T>(std::move(data)); | 204 | 10 | return f; | 205 | 10 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE42EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 33.1k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 33.1k | auto f = Field(); | 203 | 33.1k | f.template create_concrete<T>(std::move(data)); | 204 | 33.1k | return f; | 205 | 33.1k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE43EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 722 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 722 | auto f = Field(); | 203 | 722 | f.template create_concrete<T>(std::move(data)); | 204 | 722 | return f; | 205 | 722 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE37EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 2.88k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 2.88k | auto f = Field(); | 203 | 2.88k | f.template create_concrete<T>(std::move(data)); | 204 | 2.88k | return f; | 205 | 2.88k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE22EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 62 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 62 | auto f = Field(); | 203 | 62 | f.template create_concrete<T>(std::move(data)); | 204 | 62 | return f; | 205 | 62 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE19EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 10 | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 10 | auto f = Field(); | 203 | 10 | f.template create_concrete<T>(std::move(data)); | 204 | 10 | return f; | 205 | 10 | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE15EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 54.5k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 54.5k | auto f = Field(); | 203 | 54.5k | f.template create_concrete<T>(std::move(data)); | 204 | 54.5k | return f; | 205 | 54.5k | } |
_ZN5doris5Field12create_fieldILNS_13PrimitiveTypeE10EEES0_ONS_19PrimitiveTypeTraitsIXT_EE7CppTypeE Line | Count | Source | 201 | 758k | static Field create_field(typename PrimitiveTypeTraits<T>::CppType&& data) { | 202 | 758k | auto f = Field(); | 203 | 758k | f.template create_concrete<T>(std::move(data)); | 204 | 758k | return f; | 205 | 758k | } |
|
206 | | |
207 | | template <PrimitiveType PType, typename ValType = std::conditional_t< |
208 | | doris::is_string_type(PType), StringRef, |
209 | | typename PrimitiveTypeTraits<PType>::StorageFieldType>> |
210 | 1.51M | static Field create_field_from_olap_value(const ValType& data) { |
211 | 1.51M | auto f = Field(PType); |
212 | 1.51M | typename PrimitiveTypeTraits<PType>::CppType cpp_value; |
213 | 1.51M | if constexpr (is_string_type(PType)) { |
214 | 492k | cpp_value = String(data.data, data.size); |
215 | 492k | } else if constexpr (is_date_or_datetime(PType)) { |
216 | 1.66k | if constexpr (PType == TYPE_DATE) { |
217 | 685 | cpp_value.from_olap_date(data); |
218 | 980 | } else { |
219 | 980 | cpp_value.from_olap_datetime(data); |
220 | 980 | } |
221 | 1.66k | } else if constexpr (is_decimalv2(PType)) { |
222 | 427 | cpp_value = DecimalV2Value(data.integer, data.fraction); |
223 | 1.01M | } else { |
224 | 1.01M | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); |
225 | 1.01M | } |
226 | 1.51M | f.template create_concrete<PType>(std::move(cpp_value)); |
227 | 1.51M | return f; |
228 | 1.51M | } _ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE3EaEES0_RKT0_ Line | Count | Source | 210 | 82.0k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 82.0k | auto f = Field(PType); | 212 | 82.0k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 82.0k | } else { | 224 | 82.0k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 82.0k | } | 226 | 82.0k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 82.0k | return f; | 228 | 82.0k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE4EsEES0_RKT0_ Line | Count | Source | 210 | 22.4k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 22.4k | auto f = Field(PType); | 212 | 22.4k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 22.4k | } else { | 224 | 22.4k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 22.4k | } | 226 | 22.4k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 22.4k | return f; | 228 | 22.4k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE5EiEES0_RKT0_ Line | Count | Source | 210 | 202k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 202k | auto f = Field(PType); | 212 | 202k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 202k | } else { | 224 | 202k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 202k | } | 226 | 202k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 202k | return f; | 228 | 202k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE6ElEES0_RKT0_ Line | Count | Source | 210 | 429k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 429k | auto f = Field(PType); | 212 | 429k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 429k | } else { | 224 | 429k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 429k | } | 226 | 429k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 429k | return f; | 228 | 429k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE7EnEES0_RKT0_ Line | Count | Source | 210 | 33.7k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 33.7k | auto f = Field(PType); | 212 | 33.7k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 33.7k | } else { | 224 | 33.7k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 33.7k | } | 226 | 33.7k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 33.7k | return f; | 228 | 33.7k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE8EfEES0_RKT0_ Line | Count | Source | 210 | 13.9k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 13.9k | auto f = Field(PType); | 212 | 13.9k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 13.9k | } else { | 224 | 13.9k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 13.9k | } | 226 | 13.9k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 13.9k | return f; | 228 | 13.9k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE9EdEES0_RKT0_ Line | Count | Source | 210 | 19.2k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 19.2k | auto f = Field(PType); | 212 | 19.2k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 19.2k | } else { | 224 | 19.2k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 19.2k | } | 226 | 19.2k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 19.2k | return f; | 228 | 19.2k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE15ENS_9StringRefEEES0_RKT0_ Line | Count | Source | 210 | 35.1k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 35.1k | auto f = Field(PType); | 212 | 35.1k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | 35.1k | if constexpr (is_string_type(PType)) { | 214 | 35.1k | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 35.1k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 35.1k | return f; | 228 | 35.1k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE11ENS_8uint24_tEEES0_RKT0_ Line | Count | Source | 210 | 685 | static Field create_field_from_olap_value(const ValType& data) { | 211 | 685 | auto f = Field(PType); | 212 | 685 | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | 685 | } else if constexpr (is_date_or_datetime(PType)) { | 216 | 685 | if constexpr (PType == TYPE_DATE) { | 217 | 685 | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 685 | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 685 | return f; | 228 | 685 | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE12EmEES0_RKT0_ Line | Count | Source | 210 | 980 | static Field create_field_from_olap_value(const ValType& data) { | 211 | 980 | auto f = Field(PType); | 212 | 980 | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | 980 | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | 980 | } else { | 219 | 980 | cpp_value.from_olap_datetime(data); | 220 | 980 | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 980 | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 980 | return f; | 228 | 980 | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE25EjEES0_RKT0_ Line | Count | Source | 210 | 60.3k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 60.3k | auto f = Field(PType); | 212 | 60.3k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 60.3k | } else { | 224 | 60.3k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 60.3k | } | 226 | 60.3k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 60.3k | return f; | 228 | 60.3k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE26EmEES0_RKT0_ Line | Count | Source | 210 | 65.8k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 65.8k | auto f = Field(PType); | 212 | 65.8k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 65.8k | } else { | 224 | 65.8k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 65.8k | } | 226 | 65.8k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 65.8k | return f; | 228 | 65.8k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE43ElEES0_RKT0_ Line | Count | Source | 210 | 296 | static Field create_field_from_olap_value(const ValType& data) { | 211 | 296 | auto f = Field(PType); | 212 | 296 | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 296 | } else { | 224 | 296 | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 296 | } | 226 | 296 | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 296 | return f; | 228 | 296 | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE42EmEES0_RKT0_ Line | Count | Source | 210 | 7.02k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 7.02k | auto f = Field(PType); | 212 | 7.02k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 7.02k | } else { | 224 | 7.02k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 7.02k | } | 226 | 7.02k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 7.02k | return f; | 228 | 7.02k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE36EjEES0_RKT0_ Line | Count | Source | 210 | 1.03k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 1.03k | auto f = Field(PType); | 212 | 1.03k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 1.03k | } else { | 224 | 1.03k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 1.03k | } | 226 | 1.03k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 1.03k | return f; | 228 | 1.03k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE37EoEES0_RKT0_ Line | Count | Source | 210 | 1.06k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 1.06k | auto f = Field(PType); | 212 | 1.06k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 1.06k | } else { | 224 | 1.06k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 1.06k | } | 226 | 1.06k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 1.06k | return f; | 228 | 1.06k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE10ENS_9StringRefEEES0_RKT0_ Line | Count | Source | 210 | 302k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 302k | auto f = Field(PType); | 212 | 302k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | 302k | if constexpr (is_string_type(PType)) { | 214 | 302k | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 302k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 302k | return f; | 228 | 302k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE23ENS_9StringRefEEES0_RKT0_ Line | Count | Source | 210 | 154k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 154k | auto f = Field(PType); | 212 | 154k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | 154k | if constexpr (is_string_type(PType)) { | 214 | 154k | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 154k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 154k | return f; | 228 | 154k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE28EiEES0_RKT0_ Line | Count | Source | 210 | 6.83k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 6.83k | auto f = Field(PType); | 212 | 6.83k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 6.83k | } else { | 224 | 6.83k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 6.83k | } | 226 | 6.83k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 6.83k | return f; | 228 | 6.83k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE29ElEES0_RKT0_ Line | Count | Source | 210 | 32.6k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 32.6k | auto f = Field(PType); | 212 | 32.6k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 32.6k | } else { | 224 | 32.6k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 32.6k | } | 226 | 32.6k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 32.6k | return f; | 228 | 32.6k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE30EnEES0_RKT0_ Line | Count | Source | 210 | 20.1k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 20.1k | auto f = Field(PType); | 212 | 20.1k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 20.1k | } else { | 224 | 20.1k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 20.1k | } | 226 | 20.1k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 20.1k | return f; | 228 | 20.1k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE35EN4wide7integerILm256EiEEEES0_RKT0_ Line | Count | Source | 210 | 1.16k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 1.16k | auto f = Field(PType); | 212 | 1.16k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 1.16k | } else { | 224 | 1.16k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 1.16k | } | 226 | 1.16k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 1.16k | return f; | 228 | 1.16k | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE20ENS_11decimal12_tEEES0_RKT0_ Line | Count | Source | 210 | 427 | static Field create_field_from_olap_value(const ValType& data) { | 211 | 427 | auto f = Field(PType); | 212 | 427 | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | 427 | } else if constexpr (is_decimalv2(PType)) { | 222 | 427 | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | | } else { | 224 | | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | | } | 226 | 427 | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 427 | return f; | 228 | 427 | } |
_ZN5doris5Field28create_field_from_olap_valueILNS_13PrimitiveTypeE2EhEES0_RKT0_ Line | Count | Source | 210 | 17.3k | static Field create_field_from_olap_value(const ValType& data) { | 211 | 17.3k | auto f = Field(PType); | 212 | 17.3k | typename PrimitiveTypeTraits<PType>::CppType cpp_value; | 213 | | if constexpr (is_string_type(PType)) { | 214 | | cpp_value = String(data.data, data.size); | 215 | | } else if constexpr (is_date_or_datetime(PType)) { | 216 | | if constexpr (PType == TYPE_DATE) { | 217 | | cpp_value.from_olap_date(data); | 218 | | } else { | 219 | | cpp_value.from_olap_datetime(data); | 220 | | } | 221 | | } else if constexpr (is_decimalv2(PType)) { | 222 | | cpp_value = DecimalV2Value(data.integer, data.fraction); | 223 | 17.3k | } else { | 224 | 17.3k | cpp_value = typename PrimitiveTypeTraits<PType>::CppType(data); | 225 | 17.3k | } | 226 | 17.3k | f.template create_concrete<PType>(std::move(cpp_value)); | 227 | 17.3k | return f; | 228 | 17.3k | } |
|
229 | | |
230 | | /** Despite the presence of a template constructor, this constructor is still needed, |
231 | | * since, in its absence, the compiler will still generate the default constructor. |
232 | | */ |
233 | | Field(const Field& rhs); |
234 | | |
235 | | Field(Field&& rhs); |
236 | | |
237 | | Field& operator=(const Field& rhs); |
238 | | |
239 | 0 | bool is_complex_field() const { |
240 | 0 | return type == PrimitiveType::TYPE_ARRAY || type == PrimitiveType::TYPE_MAP || |
241 | 0 | type == PrimitiveType::TYPE_STRUCT || type == PrimitiveType::TYPE_VARIANT; |
242 | 0 | } |
243 | | |
244 | 62.3M | Field& operator=(Field&& rhs) { |
245 | 62.3M | if (this != &rhs) { |
246 | 62.3M | if (type != rhs.type) { |
247 | 59.8M | destroy(); |
248 | 59.8M | type = TYPE_NULL; |
249 | 59.8M | create(std::move(rhs)); |
250 | 59.8M | } else { |
251 | 2.45M | assign(std::move(rhs)); |
252 | 2.45M | } |
253 | 62.3M | } |
254 | 62.3M | return *this; |
255 | 62.3M | } |
256 | | |
257 | 410M | ~Field() { destroy(); } |
258 | | |
259 | 30.0M | PrimitiveType get_type() const { return type; } |
260 | | std::string get_type_name() const; |
261 | | |
262 | 142M | bool is_null() const { return type == PrimitiveType::TYPE_NULL; } |
263 | | |
264 | | // The template parameter T needs to be consistent with `which`. |
265 | | // If not, use NearestFieldType<> externally. |
266 | | // Maybe modify this in the future, reference: https://github.com/ClickHouse/ClickHouse/pull/22003 |
267 | | template <PrimitiveType T> |
268 | | typename PrimitiveTypeTraits<T>::CppType& get(); |
269 | | |
270 | | template <PrimitiveType T> |
271 | | const typename PrimitiveTypeTraits<T>::CppType& get() const; |
272 | | |
273 | 6.62k | bool is_nan() const { |
274 | | // Keep type dispatch with the value so callers cannot reinterpret Field storage using a |
275 | | // mismatched PrimitiveType. |
276 | 6.62k | if (type == PrimitiveType::TYPE_FLOAT) { |
277 | 40 | return std::isnan(get<TYPE_FLOAT>()); |
278 | 40 | } |
279 | 6.58k | if (type == PrimitiveType::TYPE_DOUBLE) { |
280 | 40 | return std::isnan(get<TYPE_DOUBLE>()); |
281 | 40 | } |
282 | 6.54k | return false; |
283 | 6.58k | } |
284 | | |
285 | 7.72M | bool operator==(const Field& rhs) const { |
286 | 7.72M | return operator<=>(rhs) == std::strong_ordering::equal; |
287 | 7.72M | } |
288 | | |
289 | | std::strong_ordering operator<=>(const Field& rhs) const; |
290 | | |
291 | | std::string_view as_string_view() const; |
292 | | |
293 | | // Return a human-readable representation of the stored value for debugging. |
294 | | // Unlike get_type_name() which returns the type, this prints the actual value. |
295 | | // For decimal types, caller can provide scale for accurate formatting. |
296 | | std::string to_debug_string(int scale) const; |
297 | | |
298 | | private: |
299 | | std::aligned_union_t<DBMS_MIN_FIELD_SIZE - sizeof(PrimitiveType), Null, UInt64, UInt128, Int64, |
300 | | Int128, IPv6, Float64, String, JsonbField, StringView, Array, Struct, Map, |
301 | | VariantField, Decimal32, Decimal64, DecimalV2Value, Decimal128V3, |
302 | | Decimal256, BitmapValue, HyperLogLog, QuantileState> |
303 | | storage; |
304 | | |
305 | | PrimitiveType type; |
306 | | |
307 | | /// Assuming there was no allocated state or it was deallocated (see destroy). |
308 | | template <PrimitiveType Type> |
309 | | void create_concrete(typename PrimitiveTypeTraits<Type>::CppType&& x); |
310 | | template <PrimitiveType Type> |
311 | | void create_concrete(const typename PrimitiveTypeTraits<Type>::CppType& x); |
312 | | /// Assuming same types. |
313 | | template <PrimitiveType Type> |
314 | | void assign_concrete(typename PrimitiveTypeTraits<Type>::CppType&& x); |
315 | | template <PrimitiveType Type> |
316 | | void assign_concrete(const typename PrimitiveTypeTraits<Type>::CppType& x); |
317 | | |
318 | | void create(const Field& field); |
319 | | void create(Field&& field); |
320 | | |
321 | | void assign(const Field& x); |
322 | | void assign(Field&& x); |
323 | | |
324 | | void destroy(); |
325 | | |
326 | | template <PrimitiveType T> |
327 | | void destroy(); |
328 | | }; |
329 | | |
330 | | struct FieldWithDataType { |
331 | | Field field; |
332 | | // used for nested type of array |
333 | | PrimitiveType base_scalar_type_id = PrimitiveType::INVALID_TYPE; |
334 | | uint8_t num_dimensions = 0; |
335 | | int precision = -1; |
336 | | int scale = -1; |
337 | | // True when the array elements are mixed-type and must be converted to the common base |
338 | | // type on insert. Mirrors FieldInfo::need_convert so it survives the FieldWithDataType |
339 | | // round trip in the sparse read path. |
340 | | bool need_convert = false; |
341 | | }; |
342 | | |
343 | | } // namespace doris |
344 | | |
345 | | template <> |
346 | | struct std::hash<doris::Field> { |
347 | 2.25k | size_t operator()(const doris::Field& field) const { |
348 | 2.25k | if (field.is_null()) { |
349 | 151 | return 0; |
350 | 151 | } |
351 | 2.10k | std::hash<std::string_view> hasher; |
352 | 2.10k | return hasher(field.as_string_view()); |
353 | 2.25k | } |
354 | | }; |