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) {
91 auto rPos = (*resultSelVector)[i];
93 result, aPos, bPos, i, rPos, dataPtr);
96 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
97 auto pos = (*cSelVector)[i];
98 auto rPos = (*resultSelVector)[i];
100 result, aPos, bPos, pos, rPos, dataPtr);
105 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
108 auto rPos = (*resultSelVector)[i];
110 c, result, aPos, bPos, i, rPos, dataPtr);
114 for (
auto i = 0u; i < cSelVector->
getSelSize(); ++i) {
115 auto pos = (*cSelVector)[i];
117 if (!result.
isNull(pos)) {
118 auto rPos = (*resultSelVector)[i];
120 c, result, aPos, bPos, pos, rPos, dataPtr);
127 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
134 auto aPos = (*aSelVector)[0];
139 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
141 result, aPos, i, i, i, dataPtr);
144 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
145 auto pos = (*bSelVector)[i];
146 auto rPos = (*resultSelVector)[i];
148 result, aPos, pos, pos, rPos, dataPtr);
153 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
156 auto rPos = (*resultSelVector)[i];
158 c, result, aPos, i, i, rPos, dataPtr);
162 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
163 auto pos = (*bSelVector)[i];
165 if (!result.
isNull(pos)) {
166 auto rPos = (*resultSelVector)[i];
168 c, result, aPos, pos, pos, rPos, dataPtr);
175 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
181 auto aPos = (*aSelVector)[0];
182 auto cPos = (*cSelVector)[0];
187 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
188 auto rPos = (*resultSelVector)[i];
190 result, aPos, i, cPos, rPos, dataPtr);
193 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
194 auto pos = (*bSelVector)[i];
195 auto rPos = (*resultSelVector)[i];
197 result, aPos, pos, cPos, rPos, dataPtr);
202 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
205 auto rPos = (*resultSelVector)[i];
207 c, result, aPos, i, cPos, rPos, dataPtr);
211 for (
auto i = 0u; i < bSelVector->
getSelSize(); ++i) {
212 auto pos = (*bSelVector)[i];
214 if (!result.
isNull(pos)) {
215 auto rPos = (*resultSelVector)[i];
217 c, result, aPos, pos, cPos, rPos, dataPtr);
224 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
230 KU_ASSERT(aSelVector == bSelVector && bSelVector == cSelVector);
233 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
234 auto rPos = (*resultSelVector)[i];
236 result, i, i, i, rPos, dataPtr);
239 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
240 auto pos = (*aSelVector)[i];
241 auto rPos = (*resultSelVector)[i];
243 result, pos, pos, pos, rPos, dataPtr);
248 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
251 auto rPos = (*resultSelVector)[i];
253 c, result, i, i, i, rPos, dataPtr);
257 for (uint64_t i = 0; i < aSelVector->
getSelSize(); i++) {
258 auto pos = (*aSelVector)[i];
260 if (!result.
isNull(pos)) {
261 auto rPos = (*resultSelVector)[i];
263 c, result, pos, pos, pos, rPos, dataPtr);
270 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
276 auto bPos = (*bSelVector)[0];
277 auto cPos = (*cSelVector)[0];
282 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
283 auto rPos = (*resultSelVector)[i];
285 result, i, bPos, cPos, rPos, dataPtr);
288 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
289 auto pos = (*aSelVector)[i];
290 auto rPos = (*resultSelVector)[i];
292 result, pos, bPos, cPos, rPos, dataPtr);
297 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
300 auto rPos = (*resultSelVector)[i];
302 c, result, i, bPos, cPos, rPos, dataPtr);
306 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
307 auto pos = (*aSelVector)[i];
309 if (!result.
isNull(pos)) {
310 auto rPos = (*resultSelVector)[i];
312 c, result, pos, bPos, cPos, rPos, dataPtr);
319 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
326 auto bPos = (*bSelVector)[0];
331 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
332 auto rPos = (*resultSelVector)[i];
334 result, i, bPos, i, rPos, dataPtr);
337 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
338 auto pos = (*aSelVector)[i];
339 auto rPos = (*resultSelVector)[i];
341 result, pos, bPos, pos, rPos, dataPtr);
346 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
349 auto rPos = (*resultSelVector)[i];
351 c, result, i, bPos, i, rPos, dataPtr);
355 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
356 auto pos = (*bSelVector)[i];
358 if (!result.
isNull(pos)) {
359 auto rPos = (*resultSelVector)[i];
361 c, result, pos, bPos, pos, rPos, dataPtr);
368 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
375 auto cPos = (*cSelVector)[0];
380 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
381 auto rPos = (*resultSelVector)[i];
383 result, i, i, cPos, rPos, dataPtr);
386 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
387 auto pos = (*aSelVector)[i];
388 auto rPos = (*resultSelVector)[i];
390 result, pos, pos, cPos, rPos, dataPtr);
395 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
398 auto rPos = (*resultSelVector)[i];
400 c, result, i, i, cPos, rPos, dataPtr);
404 for (
auto i = 0u; i < aSelVector->
getSelSize(); ++i) {
405 auto pos = (*aSelVector)[i];
407 if (!result.
isNull(pos)) {
408 auto rPos = (*resultSelVector)[i];
410 c, result, pos, pos, cPos, rPos, dataPtr);
417 template<
typename A_TYPE,
typename B_TYPE,
typename C_TYPE,
typename RESULT_TYPE,
typename FUNC,
426 bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
427 }
else if (a.
state->isFlat() && b.
state->isFlat() && !c.
state->isFlat()) {
429 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
430 }
else if (a.
state->isFlat() && !b.
state->isFlat() && !c.
state->isFlat()) {
432 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
433 }
else if (a.
state->isFlat() && !b.
state->isFlat() && c.
state->isFlat()) {
435 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
436 }
else if (!a.
state->isFlat() && !b.
state->isFlat() && !c.
state->isFlat()) {
438 b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
439 }
else if (!a.
state->isFlat() && !b.
state->isFlat() && c.
state->isFlat()) {
441 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
442 }
else if (!a.
state->isFlat() && b.
state->isFlat() && c.
state->isFlat()) {
444 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
445 }
else if (!a.
state->isFlat() && b.
state->isFlat() && !c.
state->isFlat()) {
447 aSelVector, b, bSelVector, c, cSelVector, result, resultSelVector, dataPtr);
#define KU_ASSERT(condition)
Definition assert.h:24
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 resetAuxiliaryBuffer()
void setAllNull()
Definition value_vector.h:75
void setNull(uint32_t pos, bool isNull)
uint8_t isNull(uint32_t pos) const
Definition value_vector.h:84
uint8_t * getData() const
Definition value_vector.h:119
bool hasNoNullsGuarantee() const
Definition value_vector.h:78
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:80
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:177
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:129
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:321
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:370
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 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 executeAllUnFlat(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:226
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:419
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 *resultSelVector, void *dataPtr)
Definition ternary_function_executor.h:272
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