14 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
15 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
18 OP::operation(left, right, result);
23 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
24 static void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
27 OP::operation(left, right, result, *leftValueVector, *rightValueVector, *resultValueVector);
32 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
33 static void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
36 OP::operation(left, right, result, *leftValueVector, *rightValueVector, *resultValueVector,
42 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
43 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
46 OP::operation(left, right, result, *leftValueVector, *rightValueVector, *resultValueVector,
52 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
53 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
56 OP::operation(left, right, result, *resultValueVector);
61 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
62 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
65 OP::operation(left, right, result, leftValueVector, rightValueVector);
70 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename OP>
71 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, RESULT_TYPE& result,
74 OP::operation(left, right, result, dataPtr);
79 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename OP>
80 static void operation(LEFT_TYPE& left, RIGHT_TYPE& right, uint8_t& result,
83 OP::operation(left, right, result, *leftValueVector, *rightValueVector, *leftValueVector,
90 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename FUNC,
95 OP_WRAPPER::template operation<LEFT_TYPE, RIGHT_TYPE, RESULT_TYPE, FUNC>(
96 ((LEFT_TYPE*)left.
getData())[lPos], ((RIGHT_TYPE*)right.
getData())[rPos],
97 ((RESULT_TYPE*)resultValueVector.
getData())[resPos], &left, &right, &resultValueVector,
105 common::sel_t lPos = (*leftSelVector)[leftFlat ? 0 : selPos];
106 common::sel_t rPos = (*rightSelVector)[rightFlat ? 0 : selPos];
107 common::sel_t resPos = (*resultSelVector)[leftFlat && rightFlat ? 0 : selPos];
108 return {lPos, rPos, resPos};
111 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename FUNC,
117 const bool leftFlat = left.
state->isFlat();
118 const bool rightFlat = right.
state->isFlat();
120 const bool allNullsGuaranteed = (rightFlat && right.
isNull((*rightSelVector)[0])) ||
121 (leftFlat && left.
isNull((*leftSelVector)[0]));
122 if (allNullsGuaranteed) {
127 if (noNullsGuaranteed) {
131 const auto numSelectedValues =
133 for (
common::sel_t selPos = 0; selPos < numSelectedValues; ++selPos) {
135 resultSelVector, selPos, leftFlat, rightFlat);
136 if (noNullsGuaranteed) {
138 right, result, lPos, rPos, resPos, dataPtr);
141 if (!result.
isNull(resPos)) {
143 right, result, lPos, rPos, resPos, dataPtr);
150 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename FUNC,
157 leftSelVector, right, rightSelVector, result, resultSelVector, dataPtr);
160 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename RESULT_TYPE,
typename FUNC>
165 leftSelVector, right, rightSelVector, result, resultSelVector,
nullptr );
169 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename OP>
170 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, uint8_t& result,
173 OP::operation(left, right, result);
178 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename OP>
179 static inline void operation(LEFT_TYPE& left, RIGHT_TYPE& right, uint8_t& result,
182 OP::operation(left, right, result, leftValueVector, rightValueVector);
186 template<
class LEFT_TYPE,
class RIGHT_TYPE,
class FUNC,
typename SELECT_WRAPPER>
188 uint64_t rPos, uint64_t resPos, uint64_t& numSelectedValues,
189 std::span<common::sel_t> selectedPositionsBuffer,
void* dataPtr) {
190 uint8_t resultValue = 0;
191 SELECT_WRAPPER::template operation<LEFT_TYPE, RIGHT_TYPE, FUNC>(
192 ((LEFT_TYPE*)left.
getData())[lPos], ((RIGHT_TYPE*)right.
getData())[rPos], resultValue,
193 &left, &right, dataPtr);
194 selectedPositionsBuffer[numSelectedValues] = resPos;
195 numSelectedValues += (resultValue ==
true);
198 template<
class LEFT_TYPE,
class RIGHT_TYPE,
class FUNC,
typename SELECT_WRAPPER>
201 auto lPos = left.
state->getSelVector()[0];
202 auto rPos = right.
state->getSelVector()[0];
203 uint8_t resultValue = 0;
205 SELECT_WRAPPER::template operation<LEFT_TYPE, RIGHT_TYPE, FUNC>(
206 ((LEFT_TYPE*)left.
getData())[lPos], ((RIGHT_TYPE*)right.
getData())[rPos],
207 resultValue, &left, &right, dataPtr);
209 return resultValue ==
true;
212 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename FUNC,
typename SELECT_WRAPPER>
215 auto lPos = left.
state->getSelVector()[0];
216 uint64_t numSelectedValues = 0;
218 auto& rightSelVector = right.
state->getSelVector();
220 return numSelectedValues;
222 rightSelVector.forEach([&](
auto i) {
224 numSelectedValues, selectedPositionsBuffer, dataPtr);
227 rightSelVector.forEach([&](
auto i) {
230 i, numSelectedValues, selectedPositionsBuffer, dataPtr);
235 return numSelectedValues > 0;
238 template<
typename LEFT_TYPE,
typename RIGHT_TYPE,
typename FUNC,
typename SELECT_WRAPPER>
241 auto rPos = right.
state->getSelVector()[0];
242 uint64_t numSelectedValues = 0;
244 auto& leftSelVector = left.
state->getSelVector();
246 return numSelectedValues;
248 leftSelVector.forEach([&](
auto i) {
250 numSelectedValues, selectedPositionsBuffer, dataPtr);
253 leftSelVector.forEach([&](
auto i) {
256 i, numSelectedValues, selectedPositionsBuffer, dataPtr);
261 return numSelectedValues > 0;
265 template<
class LEFT_TYPE,
class RIGHT_TYPE,
class FUNC,
typename SELECT_WRAPPER>
268 uint64_t numSelectedValues = 0;
270 auto& leftSelVector = left.
state->getSelVector();
272 leftSelVector.forEach([&](
auto i) {
274 numSelectedValues, selectedPositionsBuffer, dataPtr);
277 leftSelVector.forEach([&](
auto i) {
281 numSelectedValues, selectedPositionsBuffer, dataPtr);
286 return numSelectedValues > 0;
290 template<
class LEFT_TYPE,
class RIGHT_TYPE,
class FUNC,
291 typename OP_WRAPPER = BinarySelectWrapper>
294 if (left.
state->isFlat() && right.
state->isFlat()) {
296 }
else if (left.
state->isFlat() && !right.
state->isFlat()) {
299 }
else if (!left.
state->isFlat() && right.
state->isFlat()) {
309 template<
class LEFT_TYPE,
class RIGHT_TYPE,
class FUNC>
312 if (left.
state->isFlat() && right.
state->isFlat()) {
315 }
else if (left.
state->isFlat() && !right.
state->isFlat()) {
317 left, right, selVector, dataPtr);
318 }
else if (!left.
state->isFlat() && right.
state->isFlat()) {
320 left, right, selVector, dataPtr);
323 left, right, selVector, dataPtr);
Definition sel_vector.h:98
std::span< sel_t > getMutableBuffer() const
Definition sel_vector.h:145
void setSelSize(sel_t size)
Definition sel_vector.h:149
sel_t getSelSize() const
Definition sel_vector.h:68
Definition value_vector.h:21
uint8_t * getData() const
Definition value_vector.h:119
void resetAuxiliaryBuffer()
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 setAllNull()
Definition value_vector.h:75
void setNull(uint32_t pos, bool isNull)
std::shared_ptr< DataChunkState > state
Definition value_vector.h:146
uint64_t sel_t
Definition types.h:30
Definition binary_function_executor.h:6
Definition array_utils.h:7
Definition binary_function_executor.h:60
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *leftValueVector, common::ValueVector *rightValueVector, common::ValueVector *, uint64_t, void *)
Definition binary_function_executor.h:62
Definition binary_function_executor.h:177
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, uint8_t &result, common::ValueVector *leftValueVector, common::ValueVector *rightValueVector, void *)
Definition binary_function_executor.h:179
Definition binary_function_executor.h:168
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, uint8_t &result, common::ValueVector *, common::ValueVector *, void *)
Definition binary_function_executor.h:170
Definition binary_function_executor.h:88
static void executeOnSelectedValues(common::ValueVector &left, common::SelectionVector *leftSelVector, common::ValueVector &right, common::SelectionVector *rightSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition binary_function_executor.h:113
static void executeOnValue(common::ValueVector &left, common::ValueVector &right, common::ValueVector &resultValueVector, uint64_t lPos, uint64_t rPos, uint64_t resPos, void *dataPtr)
Definition binary_function_executor.h:92
static void selectOnValue(common::ValueVector &left, common::ValueVector &right, uint64_t lPos, uint64_t rPos, uint64_t resPos, uint64_t &numSelectedValues, std::span< common::sel_t > selectedPositionsBuffer, void *dataPtr)
Definition binary_function_executor.h:187
static uint64_t selectBothFlat(common::ValueVector &left, common::ValueVector &right, void *dataPtr)
Definition binary_function_executor.h:199
static bool selectUnFlatFlat(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:239
static void executeSwitch(common::ValueVector &left, common::SelectionVector *leftSelVector, common::ValueVector &right, common::SelectionVector *rightSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector, void *dataPtr)
Definition binary_function_executor.h:152
static bool select(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:292
static void execute(common::ValueVector &left, common::SelectionVector *leftSelVector, common::ValueVector &right, common::SelectionVector *rightSelVector, common::ValueVector &result, common::SelectionVector *resultSelVector)
Definition binary_function_executor.h:161
static bool selectFlatUnFlat(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:213
static bool selectBothUnFlat(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:266
static std::tuple< common::sel_t, common::sel_t, common::sel_t > getSelectedPositions(common::SelectionVector *leftSelVector, common::SelectionVector *rightSelVector, common::SelectionVector *resultSelVector, common::sel_t selPos, bool leftFlat, bool rightFlat)
Definition binary_function_executor.h:101
static bool selectComparison(common::ValueVector &left, common::ValueVector &right, common::SelectionVector &selVector, void *dataPtr)
Definition binary_function_executor.h:310
Definition binary_function_executor.h:13
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *, common::ValueVector *, common::ValueVector *, uint64_t, void *)
Definition binary_function_executor.h:15
Definition binary_function_executor.h:22
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *leftValueVector, common::ValueVector *rightValueVector, common::ValueVector *resultValueVector, uint64_t, void *)
Definition binary_function_executor.h:24
Definition binary_function_executor.h:31
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *leftValueVector, common::ValueVector *rightValueVector, common::ValueVector *resultValueVector, uint64_t, void *dataPtr)
Definition binary_function_executor.h:33
Definition binary_function_executor.h:78
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, uint8_t &result, common::ValueVector *leftValueVector, common::ValueVector *rightValueVector, void *dataPtr)
Definition binary_function_executor.h:80
Definition binary_function_executor.h:51
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *, common::ValueVector *, common::ValueVector *resultValueVector, uint64_t, void *)
Definition binary_function_executor.h:53
Definition binary_function_executor.h:69
static void operation(LEFT_TYPE &left, RIGHT_TYPE &right, RESULT_TYPE &result, common::ValueVector *, common::ValueVector *, common::ValueVector *, uint64_t, void *dataPtr)
Definition binary_function_executor.h:71