Kuzu 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 kuzu {
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& resultVector_ = *(common::ValueVector*)resultVector;
51 FUNC::operation(resultVector_.getValue<RESULT_TYPE>(resultPos), resultVector_, dataPtr);
52 }
53};
54
56 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
57 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
58 uint64_t resultPos, void* dataPtr) {
59 auto& inputVector_ = *(common::ValueVector*)inputVector;
60 auto resultVector_ = (common::ValueVector*)resultVector;
61 // TODO(Ziyi): the reinterpret_cast is not safe since we don't always pass
62 // CastFunctionBindData
63 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
64 resultVector_->getValue<RESULT_TYPE>(resultPos), resultVector_, inputPos,
65 &reinterpret_cast<CastFunctionBindData*>(dataPtr)->option);
66 }
67};
68
70 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
71 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
72 uint64_t resultPos, void* /*dataPtr*/) {
73 auto& inputVector_ = *(common::ValueVector*)inputVector;
74 auto& resultVector_ = *(common::ValueVector*)resultVector;
75 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
76 resultVector_.getValue<RESULT_TYPE>(resultPos), inputVector_, resultVector_);
77 }
78};
79
81 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
82 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
83 uint64_t resultPos, void* /*dataPtr*/) {
84 auto& inputVector_ = *(common::ValueVector*)inputVector;
85 auto& resultVector_ = *(common::ValueVector*)resultVector;
86 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
87 resultVector_.getValue<RESULT_TYPE>(resultPos), inputVector_, resultVector_);
88 }
89};
90
92 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
93 static void operation(void* inputVector, uint64_t inputPos, void* resultVector,
94 uint64_t resultPos, void* dataPtr) {
95 auto& inputVector_ = *(common::ValueVector*)inputVector;
96 auto& resultVector_ = *(common::ValueVector*)resultVector;
97 FUNC::operation(inputVector_, resultVector_, inputPos, resultPos, dataPtr);
98 }
99};
100
102 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
103 static inline void operation(void* inputVector, uint64_t inputPos, void* resultVector,
104 uint64_t resultPos, void* dataPtr) {
105 auto& inputVector_ = *(common::ValueVector*)inputVector;
106 auto& resultVector_ = *(common::ValueVector*)resultVector;
107 FUNC::operation(inputVector_.getValue<OPERAND_TYPE>(inputPos),
108 resultVector_.getValue<RESULT_TYPE>(resultPos), dataPtr);
109 }
110};
111
113
114 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
115 static void executeOnValue(common::ValueVector& inputVector, uint64_t inputPos,
116 common::ValueVector& resultVector, uint64_t resultPos, void* dataPtr) {
117 OP_WRAPPER::template operation<OPERAND_TYPE, RESULT_TYPE, FUNC>((void*)&inputVector,
118 inputPos, (void*)&resultVector, resultPos, dataPtr);
119 }
120
121 static std::pair<common::sel_t, common::sel_t> getSelectedPos(common::idx_t selIdx,
122 common::SelectionVector* operandSelVector, common::SelectionVector* resultSelVector,
123 bool operandIsUnfiltered, bool resultIsUnfiltered) {
124 common::sel_t operandPos = operandIsUnfiltered ? selIdx : (*operandSelVector)[selIdx];
125 common::sel_t resultPos = resultIsUnfiltered ? selIdx : (*resultSelVector)[selIdx];
126 return {operandPos, resultPos};
127 }
128
129 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
131 common::SelectionVector* operandSelVector, common::ValueVector& result,
132 common::SelectionVector* resultSelVector, void* dataPtr) {
133 const bool noNullsGuaranteed = operand.hasNoNullsGuarantee();
134 if (noNullsGuaranteed) {
135 result.setAllNonNull();
136 }
137
138 const bool operandIsUnfiltered = operandSelVector->isUnfiltered();
139 const bool resultIsUnfiltered = resultSelVector->isUnfiltered();
140
141 for (auto i = 0u; i < operandSelVector->getSelSize(); i++) {
142 const auto [operandPos, resultPos] = getSelectedPos(i, operandSelVector,
143 resultSelVector, operandIsUnfiltered, resultIsUnfiltered);
144 if (noNullsGuaranteed) {
146 result, resultPos, dataPtr);
147 } else {
148 result.setNull(resultPos, operand.isNull(operandPos));
149 if (!result.isNull(resultPos)) {
151 result, resultPos, dataPtr);
152 }
153 }
154 }
155 }
156
157 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
158 static void executeSwitch(common::ValueVector& operand,
159 common::SelectionVector* operandSelVector, common::ValueVector& result,
160 common::SelectionVector* resultSelVector, void* dataPtr) {
161 result.resetAuxiliaryBuffer();
162 if (operand.state->isFlat()) {
163 auto inputPos = (*operandSelVector)[0];
164 auto resultPos = (*resultSelVector)[0];
165 result.setNull(resultPos, operand.isNull(inputPos));
166 if (!result.isNull(resultPos)) {
168 result, resultPos, dataPtr);
169 }
170 } else {
172 operandSelVector, result, resultSelVector, dataPtr);
173 }
174 }
175
176 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
177 static void execute(common::ValueVector& operand, common::SelectionVector* operandSelVector,
178 common::ValueVector& result, common::SelectionVector* resultSelVector) {
180 operandSelVector, result, resultSelVector, nullptr /* dataPtr */);
181 }
182
183 template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC>
185 common::SelectionVector* operandSelVector, common::ValueVector& result,
186 common::SelectionVector* resultSelVector, void* dataPtr) {
187 result.resetAuxiliaryBuffer();
188 auto inputPos = (*operandSelVector)[0];
189 auto resultPos = (*resultSelVector)[0];
191 inputPos, result, resultPos, dataPtr);
192 }
193};
194
195} // namespace function
196} // namespace kuzu
Definition sel_vector.h:96
sel_t getSelSize() const
Definition sel_vector.h:66
bool isUnfiltered() const
Definition sel_vector.h:73
Definition value_vector.h:21
void setAllNonNull()
Definition value_vector.h:76
uint8_t isNull(uint32_t pos) const
Definition value_vector.h:84
bool hasNoNullsGuarantee() const
Definition value_vector.h:78
void setNull(uint32_t pos, bool isNull)
std::shared_ptr< DataChunkState > state
Definition value_vector.h:146
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:80
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:82
Definition unary_function_executor.h:55
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:57
Definition unary_function_executor.h:91
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:93
Definition unary_function_executor.h:112
static void executeOnValue(common::ValueVector &inputVector, uint64_t inputPos, common::ValueVector &resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:115
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:121
static void executeSequence(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:184
static void executeSwitch(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:158
static void executeOnSelectedValues(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition unary_function_executor.h:130
static void execute(common::ValueVector &operand, common::SelectionVector *operandSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector)
Definition unary_function_executor.h:177
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:69
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *)
Definition unary_function_executor.h:71
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:46
static void operation(void *, uint64_t, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:48
Definition unary_function_executor.h:101
static void operation(void *inputVector, uint64_t inputPos, void *resultVector, uint64_t resultPos, void *dataPtr)
Definition unary_function_executor.h:103