Lbug C++ API
Loading...
Searching...
No Matches
unary_function_executor.h
Go to the documentation of this file.
1#pragma once
2
3#include "value_vector.h"
5
6namespace lbug {
7namespace function {
8
13
15 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
16 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
17 uint64_t resultPos, void* /*dataPtr*/) {
18 auto& inputVector_ = *(common::ValueVector*)inputVector;
19 auto& resultVector_ = *(common::ValueVector*)resultVector;
20 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
21 resultVector_.getValue<RESULT_TYPE>(resultPos));
22 }
23};
24
26 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
27 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
28 uint64_t /* resultPos */, void* dataPtr) {
29 auto& inputVector_ = *(common::ValueVector*)inputVector;
30 auto& resultVector_ = *(common::ValueVector*)resultVector;
31 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos), resultVector_, dataPtr);
32 }
33};
34
36 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
37 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
38 uint64_t resultPos, void* /*dataPtr*/) {
39 auto& inputVector_ = *(common::ValueVector*)inputVector;
40 auto& resultVector_ = *(common::ValueVector*)resultVector;
41 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
42 resultVector_.getValue<RESULT_TYPE>(resultPos), resultVector_);
43 }
44};
45
47 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
48 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
49 uint64_t resultPos, void* dataPtr) {
50 auto& inputVector_ = *(common::ValueVector*)inputVector;
51 auto resultVector_ = (common::ValueVector*)resultVector;
52 // TODO(Ziyi): the reinterpret_cast is not safe since we don't always pass
53 // CastFunctionBindData
54 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
55 resultVector_->getValue<RESULT_TYPE>(resultPos), resultVector_, inputPos,
56 &reinterpret_cast<CastFunctionBindData*>(dataPtr)->option);
57 }
58};
59
61 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
62 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
63 uint64_t resultPos, void* /*dataPtr*/) {
64 auto& inputVector_ = *(common::ValueVector*)inputVector;
65 auto& resultVector_ = *(common::ValueVector*)resultVector;
66 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
67 resultVector_.getValue<RESULT_TYPE>(resultPos), inputVector_, resultVector_);
68 }
69};
70
72 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
73 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
74 uint64_t resultPos, void* dataPtr) {
75 auto& inputVector_ = *(common::ValueVector*)inputVector;
76 auto& resultVector_ = *(common::ValueVector*)resultVector;
77 resultVector_.setNull(resultPos, true /* isNull */);
78 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos), dataPtr);
79 }
80};
81
83 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
84 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
85 uint64_t resultPos, void* /*dataPtr*/) {
86 auto& inputVector_ = *(common::ValueVector*)inputVector;
87 auto& resultVector_ = *(common::ValueVector*)resultVector;
88 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
89 resultVector_.getValue<RESULT_TYPE>(resultPos), inputVector_, resultVector_);
90 }
91};
92
94 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
95 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
96 uint64_t resultPos, void* dataPtr) {
97 auto& inputVector_ = *(common::ValueVector*)inputVector;
98 auto& resultVector_ = *(common::ValueVector*)resultVector;
99 FUNC::operation(inputVector_, resultVector_, inputPos, resultPos, dataPtr);
100 }
101};
102
104 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
105 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
106 uint64_t resultPos, void* dataPtr) {
107 auto& inputVector_ = *(common::ValueVector*)inputVector;
108 auto& resultVector_ = *(common::ValueVector*)resultVector;
109 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
110 resultVector_.getValue<RESULT_TYPE>(resultPos), dataPtr);
111 }
112};
113
115
116 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
117 static void executeOnValue(common::ValueVector& inputVector, uint64_t inputPos,
118 common::ValueVector& resultVector, uint64_t resultPos, void* dataPtr) {
119 OP_WRAPPER::template operation<OPERAND_TYPE, RESULT_TYPE, FUNC>((void*)&inputVector,
120 inputPos, (void*)&resultVector, resultPos, dataPtr);
121 }
122
123 static std::pair<common::sel_t, common::sel_t> getSelectedPos(common::idx_t selIdx,
124 common::SelectionVector* operandSelVector, common::SelectionVector* resultSelVector,
125 bool operandIsUnfiltered, bool resultIsUnfiltered) {
126 common::sel_t operandPos = operandIsUnfiltered ? selIdx : (*operandSelVector)[selIdx];
127 common::sel_t resultPos = resultIsUnfiltered ? selIdx : (*resultSelVector)[selIdx];
128 return {operandPos, resultPos};
129 }
130
131 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
133 common::SelectionVector* operandSelVector, common::ValueVector& result,
134 common::SelectionVector* resultSelVector, void* dataPtr) {
135 const bool noNullsGuaranteed = operand.hasNoNullsGuarantee();
136 if (noNullsGuaranteed) {
137 result.setAllNonNull();
138 }
139
140 const bool operandIsUnfiltered = operandSelVector->isUnfiltered();
141 const bool resultIsUnfiltered = resultSelVector->isUnfiltered();
142
143 for (auto i = 0u; i < operandSelVector->getSelSize(); i++) {
144 const auto [operandPos, resultPos] = getSelectedPos(i, operandSelVector,
145 resultSelVector, operandIsUnfiltered, resultIsUnfiltered);
146 if (noNullsGuaranteed) {
148 result, resultPos, dataPtr);
149 } else {
150 result.setNull(resultPos, operand.isNull(operandPos));
151 if (!result.isNull(resultPos)) {
153 result, resultPos, dataPtr);
154 }
155 }
156 }
157 }
158
159 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
160 static void executeSwitch(common::ValueVector& operand,
161 common::SelectionVector* operandSelVector, common::ValueVector& result,
162 common::SelectionVector* resultSelVector, void* dataPtr) {
163 result.resetAuxiliaryBuffer();
164 if (operand.state->isFlat()) {
165 auto inputPos = (*operandSelVector)[0];
166 auto resultPos = (*resultSelVector)[0];
167 result.setNull(resultPos, operand.isNull(inputPos));
168 if (!result.isNull(resultPos)) {
170 result, resultPos, dataPtr);
171 }
172 } else {
174 operandSelVector, result, resultSelVector, dataPtr);
175 }
176 }
177
178 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
179 static void execute(common::ValueVector& operand, common::SelectionVector* operandSelVector,
180 common::ValueVector& result, common::SelectionVector* resultSelVector) {
182 operandSelVector, result, resultSelVector, nullptr /* dataPtr */);
183 }
184
185 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
187 common::SelectionVector* operandSelVector, common::ValueVector& result,
188 common::SelectionVector* resultSelVector, void* dataPtr) {
189 result.resetAuxiliaryBuffer();
190 auto inputPos = (*operandSelVector)[0];
191 auto resultPos = (*resultSelVector)[0];
193 inputPos, result, resultPos, dataPtr);
194 }
195};
196
197} // namespace function
198} // namespace lbug
Definition sel_vector.h:96
bool isUnfiltered() const
Definition sel_vector.h:73
sel_t getSelSize() const
Definition sel_vector.h:66
Definition value_vector.h:21
std::shared_ptr< DataChunkState > state
Definition value_vector.h:146
void setNull(uint32_t pos, bool isNull)
uint8_t isNull(uint32_t pos) const
Definition value_vector.h:84
bool hasNoNullsGuarantee() const
Definition value_vector.h:78
void setAllNonNull()
Definition value_vector.h:76
uint32_t idx_t
Definition types.h:45
uint64_t sel_t
Definition types.h:30
Definition binary_function_executor.h:6
Definition array_utils.h:7
Definition cast_function_bind_data.h:9
common::CSVOption option
Definition cast_function_bind_data.h:12
Definition unary_function_executor.h:71
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:73
Definition unary_function_executor.h:82
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:84
Definition unary_function_executor.h:46
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:48
Definition unary_function_executor.h:93
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:95
Definition unary_function_executor.h:114
static void executeOnValue(common::ValueVector &inputVector, uint64_t inputPos, common::ValueVector &resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:117
static void executeOnSelectedValues(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:132
static void executeSequence(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:186
static void executeSwitch(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:160
static std::pair< common::sel_t, common::sel_t > getSelectedPos(common::idx_t selIdx, common::SelectionVector *operandSelVector, common::SelectionVector *resultSelVector, bool operandIsUnfiltered, bool resultIsUnfiltered)
Definition unary_function_executor.h:123
static void execute(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector)
Definition unary_function_executor.h:179
Definition unary_function_executor.h:14
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:16
Definition unary_function_executor.h:60
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:62
Definition unary_function_executor.h:25
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t, void *dataPtr)
Definition unary_function_executor.h:27
Definition unary_function_executor.h:35
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:37
Definition unary_function_executor.h:103
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:105