Skip to content

Commit

Permalink
avoid setting result expression state at runtime
Browse files Browse the repository at this point in the history
  • Loading branch information
andyfengHKU committed Jan 3, 2023
1 parent 4526d08 commit dab7084
Show file tree
Hide file tree
Showing 8 changed files with 3 additions and 27 deletions.
3 changes: 3 additions & 0 deletions src/function/vector_hash_operations.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ namespace kuzu {
namespace function {

void VectorHashOperations::computeHash(ValueVector* operand, ValueVector* result) {
result->state = operand->state;
assert(result->dataType.typeID == INT64);
switch (operand->dataType.typeID) {
case NODE_ID: {
Expand Down Expand Up @@ -44,6 +45,8 @@ void VectorHashOperations::combineHash(ValueVector* left, ValueVector* right, Va
assert(left->dataType.typeID == INT64);
assert(left->dataType.typeID == right->dataType.typeID);
assert(left->dataType.typeID == result->dataType.typeID);
// TODO(Xiyang/Guodong): we should resolve result state of hash vector at compile time.
result->state = !right->state->isFlat() ? right->state : left->state;
BinaryOperationExecutor::execute<hash_t, hash_t, hash_t, operation::CombineHash>(
*left, *right, *result);
}
Expand Down
7 changes: 0 additions & 7 deletions src/function/vector_list_operation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ static string getListFunctionIncompatibleChildrenTypeErrorMsg(
void VectorListOperations::ListCreation(
const vector<shared_ptr<ValueVector>>& parameters, ValueVector& result) {
assert(!parameters.empty() && result.dataType.typeID == LIST);
result.state = parameters[0]->state;
for (auto& parameter : parameters) {
if (!parameter->state->isFlat()) {
result.state = parameter->state;
break;
}
}
result.resetOverflowBuffer();
auto& childType = parameters[0]->dataType;
auto numBytesOfListElement = Types::getDataTypeSize(childType);
Expand Down
4 changes: 0 additions & 4 deletions src/include/function/binary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ struct BinaryOperationExecutor {
template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC,
typename OP_WRAPPER>
static void executeBothFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = left.state;
auto lPos = left.state->selVector->selectedPositions[0];
auto rPos = right.state->selVector->selectedPositions[0];
auto resPos = result.state->selVector->selectedPositions[0];
Expand All @@ -66,7 +65,6 @@ struct BinaryOperationExecutor {
template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC,
typename OP_WRAPPER>
static void executeFlatUnFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = right.state;
auto lPos = left.state->selVector->selectedPositions[0];
if (left.isNull(lPos)) {
result.setAllNull();
Expand Down Expand Up @@ -108,7 +106,6 @@ struct BinaryOperationExecutor {
template<typename LEFT_TYPE, typename RIGHT_TYPE, typename RESULT_TYPE, typename FUNC,
typename OP_WRAPPER>
static void executeUnFlatFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = left.state;
auto rPos = right.state->selVector->selectedPositions[0];
if (right.isNull(rPos)) {
result.setAllNull();
Expand Down Expand Up @@ -151,7 +148,6 @@ struct BinaryOperationExecutor {
typename OP_WRAPPER>
static void executeBothUnFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
assert(left.state == right.state);
result.state = left.state;
if (left.hasNoNullsGuarantee() && right.hasNoNullsGuarantee()) {
if (result.state->selVector->isUnfiltered()) {
for (uint64_t i = 0; i < result.state->selVector->selectedSize; i++) {
Expand Down
5 changes: 0 additions & 5 deletions src/include/function/boolean/boolean_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@ struct BinaryBooleanOperationExecutor {

template<typename FUNC>
static inline void executeBothFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = left.state;
auto lPos = left.state->selVector->selectedPositions[0];
auto rPos = right.state->selVector->selectedPositions[0];
auto resPos = result.state->selVector->selectedPositions[0];
Expand All @@ -42,7 +41,6 @@ struct BinaryBooleanOperationExecutor {

template<typename FUNC>
static void executeFlatUnFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = right.state;
auto lPos = left.state->selVector->selectedPositions[0];
if (right.state->selVector->isUnfiltered()) {
if (right.hasNoNullsGuarantee() && !left.isNull(lPos)) {
Expand Down Expand Up @@ -71,7 +69,6 @@ struct BinaryBooleanOperationExecutor {

template<typename FUNC>
static void executeUnFlatFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
result.state = left.state;
auto rPos = right.state->selVector->selectedPositions[0];
if (left.state->selVector->isUnfiltered()) {
if (left.hasNoNullsGuarantee() && !right.isNull(rPos)) {
Expand Down Expand Up @@ -101,7 +98,6 @@ struct BinaryBooleanOperationExecutor {
template<typename FUNC>
static void executeBothUnFlat(ValueVector& left, ValueVector& right, ValueVector& result) {
assert(left.state == right.state);
result.state = left.state;
if (left.state->selVector->isUnfiltered()) {
if (left.hasNoNullsGuarantee() && right.hasNoNullsGuarantee()) {
for (auto i = 0u; i < left.state->selVector->selectedSize; ++i) {
Expand Down Expand Up @@ -256,7 +252,6 @@ struct UnaryBooleanOperationExecutor {
template<typename FUNC>
static void executeSwitch(ValueVector& operand, ValueVector& result) {
result.resetOverflowBuffer();
result.state = operand.state;
if (operand.state->isFlat()) {
auto pos = operand.state->selVector->selectedPositions[0];
executeOnValue<FUNC>(operand, pos, result);
Expand Down
1 change: 0 additions & 1 deletion src/include/function/hash/vector_hash_operations.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ namespace function {
struct UnaryHashOperationExecutor {
template<typename OPERAND_TYPE, typename RESULT_TYPE>
static void execute(ValueVector& operand, ValueVector& result) {
result.state = operand.state;
auto resultValues = (RESULT_TYPE*)result.getData();
if (operand.state->isFlat()) {
auto pos = operand.state->selVector->selectedPositions[0];
Expand Down
1 change: 0 additions & 1 deletion src/include/function/null/null_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ struct NullOperationExecutor {
template<typename FUNC>
static void execute(ValueVector& operand, ValueVector& result) {
assert(result.dataType.typeID == BOOL);
result.state = operand.state;
auto resultValues = (uint8_t*)result.getData();
if (operand.state->isFlat()) {
auto pos = operand.state->selVector->selectedPositions[0];
Expand Down
8 changes: 0 additions & 8 deletions src/include/function/ternary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,6 @@ struct TernaryOperationExecutor {
typename OP_WRAPPER>
static void executeAllFlat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
result.state = a.state;
auto aPos = a.state->selVector->selectedPositions[0];
auto bPos = b.state->selVector->selectedPositions[0];
auto cPos = c.state->selVector->selectedPositions[0];
Expand All @@ -55,7 +54,6 @@ struct TernaryOperationExecutor {
typename OP_WRAPPER>
static void executeFlatFlatUnflat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
result.state = c.state;
auto aPos = a.state->selVector->selectedPositions[0];
auto bPos = b.state->selVector->selectedPositions[0];
if (a.isNull(aPos) || b.isNull(bPos)) {
Expand Down Expand Up @@ -100,7 +98,6 @@ struct TernaryOperationExecutor {
static void executeFlatUnflatUnflat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
assert(b.state == c.state);
result.state = b.state;
auto aPos = a.state->selVector->selectedPositions[0];
if (a.isNull(aPos)) {
result.setAllNull();
Expand Down Expand Up @@ -143,7 +140,6 @@ struct TernaryOperationExecutor {
typename OP_WRAPPER>
static void executeFlatUnflatFlat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
result.state = b.state;
auto aPos = a.state->selVector->selectedPositions[0];
auto cPos = c.state->selVector->selectedPositions[0];
if (a.isNull(aPos) || c.isNull(cPos)) {
Expand Down Expand Up @@ -188,7 +184,6 @@ struct TernaryOperationExecutor {
static void executeAllUnFlat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
assert(a.state == b.state && b.state == c.state);
result.state = a.state;
if (a.hasNoNullsGuarantee() && b.hasNoNullsGuarantee() && c.hasNoNullsGuarantee()) {
if (a.state->selVector->isUnfiltered()) {
for (uint64_t i = 0; i < a.state->selVector->selectedSize; i++) {
Expand Down Expand Up @@ -228,7 +223,6 @@ struct TernaryOperationExecutor {
typename OP_WRAPPER>
static void executeUnflatFlatFlat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
result.state = a.state;
auto bPos = b.state->selVector->selectedPositions[0];
auto cPos = c.state->selVector->selectedPositions[0];
if (b.isNull(bPos) || c.isNull(cPos)) {
Expand Down Expand Up @@ -273,7 +267,6 @@ struct TernaryOperationExecutor {
static void executeUnflatFlatUnflat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
assert(a.state == c.state);
result.state = a.state;
auto bPos = b.state->selVector->selectedPositions[0];
if (b.isNull(bPos)) {
result.setAllNull();
Expand Down Expand Up @@ -317,7 +310,6 @@ struct TernaryOperationExecutor {
static void executeUnflatUnFlatFlat(
ValueVector& a, ValueVector& b, ValueVector& c, ValueVector& result) {
assert(a.state == b.state);
result.state = a.state;
auto cPos = c.state->selVector->selectedPositions[0];
if (c.isNull(cPos)) {
result.setAllNull();
Expand Down
1 change: 0 additions & 1 deletion src/include/function/unary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,6 @@ struct UnaryOperationExecutor {
template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
static void executeSwitch(ValueVector& operand, ValueVector& result) {
result.resetOverflowBuffer();
result.state = operand.state;
auto resultValues = (RESULT_TYPE*)result.getData();
if (operand.state->isFlat()) {
auto pos = operand.state->selVector->selectedPositions[0];
Expand Down

0 comments on commit dab7084

Please sign in to comment.