9 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename OP>
10 static inline void operation(A_TYPE& a, B_TYPE& b, C_TYPE& c, RESULT_TYPE& result,
11 void* ,
void* ,
void* ) {
12 OP::operation(a, b, c, result);
17 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename OP>
18 static inline void operation(A_TYPE& a, B_TYPE& b, C_TYPE& c, RESULT_TYPE& result,
19 void* ,
void* resultValueVector,
void* ) {
25 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename OP>
26 static inline void operation(A_TYPE& a, B_TYPE& b, C_TYPE& c, RESULT_TYPE& result,
27 void* ,
void* resultValueVector,
void* dataPtr) {
33 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename OP>
34 static inline void operation(A_TYPE& a, B_TYPE& b, C_TYPE& c, RESULT_TYPE& result,
35 void* aValueVector,
void* resultValueVector,
void* ) {
42 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename OP>
43 static inline void operation(A_TYPE& a, B_TYPE& b, C_TYPE& c, RESULT_TYPE& result,
44 void* ,
void* ,
void* dataPtr) {
45 OP::operation(a, b, c, result, dataPtr);
50 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
54 uint64_t cPos, uint64_t resPos,
void* dataPtr) {
55 auto resValues = (RESULT_TYPE*)result.
getData();
56 OP_WRAPPER::template operation<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC>(
58 ((C_TYPE*)c.
getData())[cPos], resValues[resPos], (
void*)&a, (
void*)&result, dataPtr);
61 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
67 auto aPos = (*aSelVector)[0];
68 auto bPos = (*bSelVector)[0];
69 auto cPos = (*cSelVector)[0];
70 auto resPos = (*resultSelVector)[0];
72 if (!result.
isNull(resPos)) {
74 aPos, bPos, cPos, resPos, dataPtr);
78 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
84 auto aPos = (*aSelVector)[0];
85 auto bPos = (*bSelVector)[0];
90 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
92 result, aPos, bPos, i, i, dataPtr);
95 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
96 auto pos = (*cSelVector)[i];
98 result, aPos, bPos, pos, pos, dataPtr);
103 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
107 c, result, aPos, bPos, i, i, dataPtr);
111 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
112 auto pos = (*cSelVector)[i];
114 if (!result.
isNull(pos)) {
116 c, result, aPos, bPos, pos, pos, dataPtr);
123 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
130 auto aPos = (*aSelVector)[0];
135 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
137 result, aPos, i, i, i, dataPtr);
140 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
141 auto pos = (*bSelVector)[i];
143 result, aPos, pos, pos, pos, dataPtr);
148 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
152 c, result, aPos, i, i, i, dataPtr);
156 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
157 auto pos = (*bSelVector)[i];
159 if (!result.
isNull(pos)) {
161 c, result, aPos, pos, pos, pos, dataPtr);
168 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
174 auto aPos = (*aSelVector)[0];
175 auto cPos = (*cSelVector)[0];
180 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
182 result, aPos, i, cPos, i, dataPtr);
185 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
186 auto pos = (*bSelVector)[i];
188 result, aPos, pos, cPos, pos, dataPtr);
193 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
197 c, result, aPos, i, cPos, i, dataPtr);
201 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
202 auto pos = (*bSelVector)[i];
204 if (!result.
isNull(pos)) {
206 c, result, aPos, pos, cPos, pos, dataPtr);
213 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
219 KU_ASSERT(aSelVector == bSelVector && bSelVector == cSelVector);
222 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
224 result, i, i, i, i, dataPtr);
227 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
228 auto pos = (*aSelVector)[i];
230 result, pos, pos, pos, pos, dataPtr);
235 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
239 c, result, i, i, i, i, dataPtr);
243 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
244 auto pos = (*aSelVector)[i];
246 if (!result.
isNull(pos)) {
248 c, result, pos, pos, pos, pos, dataPtr);
255 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
261 auto bPos = (*bSelVector)[0];
262 auto cPos = (*cSelVector)[0];
267 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
269 result, i, bPos, cPos, i, dataPtr);
272 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
273 auto pos = (*aSelVector)[i];
275 result, pos, bPos, cPos, pos, dataPtr);
280 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
284 c, result, i, bPos, cPos, i, dataPtr);
288 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
289 auto pos = (*aSelVector)[i];
291 if (!result.
isNull(pos)) {
293 c, result, pos, bPos, cPos, pos, dataPtr);
300 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
307 auto bPos = (*bSelVector)[0];
312 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
314 result, i, bPos, i, i, dataPtr);
317 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
318 auto pos = (*aSelVector)[i];
320 result, pos, bPos, pos, pos, dataPtr);
325 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
329 c, result, i, bPos, i, i, dataPtr);
333 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
334 auto pos = (*bSelVector)[i];
336 if (!result.
isNull(pos)) {
338 c, result, pos, bPos, pos, pos, dataPtr);
345 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
352 auto cPos = (*cSelVector)[0];
357 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
359 result, i, i, cPos, i, dataPtr);
362 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
363 auto pos = (*aSelVector)[i];
365 result, pos, pos, cPos, pos, dataPtr);
370 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
374 c, result, i, i, cPos, i, dataPtr);
378 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
379 auto pos = (*aSelVector)[i];
381 if (!result.
isNull(pos)) {
383 c, result, pos, pos, cPos, pos, dataPtr);
390 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
399 bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
400 }
else if (a.
state->isFlat() && b.
state->isFlat() && !c.
state->isFlat()) {
402 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
403 }
else if (a.
state->isFlat() && !b.
state->isFlat() && !c.
state->isFlat()) {
405 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
406 }
else if (a.
state->isFlat() && !b.
state->isFlat() && c.
state->isFlat()) {
408 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
409 }
else if (!a.
state->isFlat() && !b.
state->isFlat() && !c.
state->isFlat()) {
411 b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
412 }
else if (!a.
state->isFlat() && !b.
state->isFlat() && c.
state->isFlat()) {
414 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
415 }
else if (!a.
state->isFlat() && b.
state->isFlat() && c.
state->isFlat()) {
417 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
418 }
else if (!a.
state->isFlat() && b.
state->isFlat() && !c.
state->isFlat()) {
420 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
#define KU_ASSERT(condition)
Definition assert.h:19
Definition sel_vector.h:98
sel_t getSelSize() const
Definition sel_vector.h:68
bool isUnfiltered() const
Definition sel_vector.h:75
Definition value_vector.h:21
uint8_t * getData() const
Definition value_vector.h:119
void resetAuxiliaryBuffer()
uint8_t isNull(uint32_t pos) const
Definition value_vector.h:84
bool hasNoNullsGuarantee() const
Definition value_vector.h:78
void setAllNull()
Definition value_vector.h:75
void setNull(uint32_t pos, bool isNull)
std::shared_ptr< DataChunkState > state
Definition value_vector.h:146
Definition binary_function_executor.h:6
Definition array_utils.h:7
Definition ternary_function_executor.h:49
static void executeFlatFlatUnflat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:80
static void executeUnflatFlatFlat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:257
static void executeAllUnFlat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:215
static void executeOnValue(common::ValueVector &a, common::ValueVector &b, common::ValueVector &c, common::ValueVector &result, uint64_t aPos, uint64_t bPos, uint64_t cPos, uint64_t resPos, void *dataPtr)
Definition ternary_function_executor.h:52
static void executeFlatUnflatFlat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:170
static void executeAllFlat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:63
static void executeUnflatFlatUnflat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:302
static void executeUnflatUnFlatFlat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:347
static void executeFlatUnflatUnflat(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *, void *dataPtr)
Definition ternary_function_executor.h:125
static void executeSwitch(common::ValueVector &a, common::SelectionVector *aSelVector, common::ValueVector &b, common::SelectionVector *bSelVector, common::ValueVector &c, common::SelectionVector *cSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:392
Definition ternary_function_executor.h:8
static void operation(A_TYPE &a, B_TYPE &b, C_TYPE &c, RESULT_TYPE &result, void *, void *, void *)
Definition ternary_function_executor.h:10
Definition ternary_function_executor.h:32
static void operation(A_TYPE &a, B_TYPE &b, C_TYPE &c, RESULT_TYPE &result, void *aValueVector, void *resultValueVector, void *)
Definition ternary_function_executor.h:34
Definition ternary_function_executor.h:24
static void operation(A_TYPE &a, B_TYPE &b, C_TYPE &c, RESULT_TYPE &result, void *, void *resultValueVector, void *dataPtr)
Definition ternary_function_executor.h:26
Definition ternary_function_executor.h:16
static void operation(A_TYPE &a, B_TYPE &b, C_TYPE &c, RESULT_TYPE &result, void *, void *resultValueVector, void *)
Definition ternary_function_executor.h:18
Definition ternary_function_executor.h:41
static void operation(A_TYPE &a, B_TYPE &b, C_TYPE &c, RESULT_TYPE &result, void *, void *, void *dataPtr)
Definition ternary_function_executor.h:43