Skip to content

Commit

Permalink
Merge pull request #1554 from kuzudb/issue-1546
Browse files Browse the repository at this point in the history
Fix issue 1546
  • Loading branch information
andyfengHKU committed May 20, 2023
2 parents 0b3c71e + 1fad22e commit cfae96a
Show file tree
Hide file tree
Showing 10 changed files with 27 additions and 22 deletions.
15 changes: 15 additions & 0 deletions src/common/vector/value_vector.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,21 @@ void ValueVector::setValue(uint32_t pos, std::string val) {
StringVector::addString(this, pos, val.data(), val.length());
}

void ValueVector::resetAuxiliaryBuffer() {
switch (dataType.getLogicalTypeID()) {
case LogicalTypeID::STRING: {
reinterpret_cast<StringAuxiliaryBuffer*>(auxiliaryBuffer.get())->resetOverflowBuffer();
return;
}
case LogicalTypeID::VAR_LIST: {
reinterpret_cast<ListAuxiliaryBuffer*>(auxiliaryBuffer.get())->resetSize();
return;
}
default:
return;
}
}

uint32_t ValueVector::getDataTypeSize(const LogicalType& type) {
switch (type.getLogicalTypeID()) {
case common::LogicalTypeID::STRING: {
Expand Down
2 changes: 1 addition & 1 deletion src/function/vector_list_operation.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ static std::string getListFunctionIncompatibleChildrenTypeErrorMsg(
void ListCreationVectorOperation::execFunc(
const std::vector<std::shared_ptr<ValueVector>>& parameters, ValueVector& result) {
assert(result.dataType.getLogicalTypeID() == LogicalTypeID::VAR_LIST);
common::StringVector::resetOverflowBuffer(&result);
result.resetAuxiliaryBuffer();
for (auto selectedPos = 0u; selectedPos < result.state->selVector->selectedSize;
++selectedPos) {
auto pos = result.state->selVector->selectedPositions[selectedPos];
Expand Down
14 changes: 2 additions & 12 deletions src/include/common/vector/value_vector.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,8 @@ class ValueVector {
inline void setSequential() { _isSequential = true; }
inline bool isSequential() const { return _isSequential; }

void resetAuxiliaryBuffer();

private:
uint32_t getDataTypeSize(const LogicalType& type);
void initializeValueBuffer();
Expand All @@ -89,13 +91,6 @@ class StringVector {
nullptr;
}

static inline void resetOverflowBuffer(ValueVector* vector) {
if (vector->dataType.getLogicalTypeID() == LogicalTypeID::STRING) {
reinterpret_cast<StringAuxiliaryBuffer*>(vector->auxiliaryBuffer.get())
->resetOverflowBuffer();
}
}

static inline void addString(
common::ValueVector* vector, uint32_t pos, char* value, uint64_t len) {
reinterpret_cast<StringAuxiliaryBuffer*>(vector->auxiliaryBuffer.get())
Expand Down Expand Up @@ -130,11 +125,6 @@ class ListVector {
return reinterpret_cast<ListAuxiliaryBuffer*>(vector->auxiliaryBuffer.get())
->addList(listSize);
}
static inline void resetListAuxiliaryBuffer(ValueVector* vector) {
assert(vector->dataType.getLogicalTypeID() == LogicalTypeID::VAR_LIST ||
vector->dataType.getLogicalTypeID() == LogicalTypeID::RECURSIVE_REL);
reinterpret_cast<ListAuxiliaryBuffer*>(vector->auxiliaryBuffer.get())->resetSize();
}
};

class StructVector {
Expand Down
2 changes: 1 addition & 1 deletion src/include/function/binary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ struct BinaryOperationExecutor {
typename OP_WRAPPER>
static void executeSwitch(
common::ValueVector& left, common::ValueVector& right, common::ValueVector& result) {
common::StringVector::resetOverflowBuffer(&result);
result.resetAuxiliaryBuffer();
if (left.state->isFlat() && right.state->isFlat()) {
executeBothFlat<LEFT_TYPE, RIGHT_TYPE, RESULT_TYPE, FUNC, OP_WRAPPER>(
left, right, result);
Expand Down
2 changes: 1 addition & 1 deletion src/include/function/boolean/boolean_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ struct UnaryBooleanOperationExecutor {

template<typename FUNC>
static void executeSwitch(common::ValueVector& operand, common::ValueVector& result) {
common::StringVector::resetOverflowBuffer(&result);
result.resetAuxiliaryBuffer();
if (operand.state->isFlat()) {
auto pos = operand.state->selVector->selectedPositions[0];
executeOnValue<FUNC>(operand, pos, result);
Expand Down
2 changes: 1 addition & 1 deletion src/include/function/ternary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,7 @@ struct TernaryOperationExecutor {
typename OP_WRAPPER>
static void executeSwitch(common::ValueVector& a, common::ValueVector& b,
common::ValueVector& c, common::ValueVector& result) {
common::StringVector::resetOverflowBuffer(&result);
result.resetAuxiliaryBuffer();
if (a.state->isFlat() && b.state->isFlat() && c.state->isFlat()) {
executeAllFlat<A_TYPE, B_TYPE, C_TYPE, RESULT_TYPE, FUNC, OP_WRAPPER>(a, b, c, result);
} else if (a.state->isFlat() && b.state->isFlat() && !c.state->isFlat()) {
Expand Down
2 changes: 1 addition & 1 deletion src/include/function/unary_operation_executor.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ struct UnaryOperationExecutor {

template<typename OPERAND_TYPE, typename RESULT_TYPE, typename FUNC, typename OP_WRAPPER>
static void executeSwitch(common::ValueVector& operand, common::ValueVector& result) {
common::StringVector::resetOverflowBuffer(&result);
result.resetAuxiliaryBuffer();
auto resultValues = (RESULT_TYPE*)result.getData();
if (operand.state->isFlat()) {
auto inputPos = operand.state->selVector->selectedPositions[0];
Expand Down
4 changes: 2 additions & 2 deletions src/include/storage/storage_structure/column.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ class StringPropertyColumn : public PropertyColumnWithOverflow {
private:
inline void lookup(transaction::Transaction* transaction, common::offset_t nodeOffset,
common::ValueVector* resultVector, uint32_t vectorPos) final {
common::StringVector::resetOverflowBuffer(resultVector);
resultVector->resetAuxiliaryBuffer();
Column::lookup(transaction, nodeOffset, resultVector, vectorPos);
if (!resultVector->isNull(vectorPos)) {
diskOverflowFile->scanSingleStringOverflow(
Expand All @@ -138,7 +138,7 @@ class StringPropertyColumn : public PropertyColumnWithOverflow {
}
inline void scan(transaction::Transaction* transaction, common::ValueVector* nodeIDVector,
common::ValueVector* resultVector) final {
common::StringVector::resetOverflowBuffer(resultVector);
resultVector->resetAuxiliaryBuffer();
Column::scan(transaction, nodeIDVector, resultVector);
diskOverflowFile->scanStrings(transaction->getType(), *resultVector);
}
Expand Down
2 changes: 1 addition & 1 deletion src/processor/operator/recursive_extend/recursive_join.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ bool BaseRecursiveJoin::scanOutput() {
common::sel_t offsetVectorSize = 0u;
common::sel_t dataVectorSize = 0u;
if (pathVector != nullptr) {
common::ListVector::resetListAuxiliaryBuffer(pathVector);
pathVector->resetAuxiliaryBuffer();
}
frontiersScanner->scan(
nodeTable->getTableID(), pathVector, dstNodeIDVector, offsetVectorSize, dataVectorSize);
Expand Down
4 changes: 2 additions & 2 deletions src/storage/storage_structure/lists/lists.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,13 +224,13 @@ void ListPropertyLists::readListFromPages(
}

void StringPropertyLists::readFromList(ValueVector* valueVector, ListHandle& listHandle) {
StringVector::resetOverflowBuffer(valueVector);
valueVector->resetAuxiliaryBuffer();
Lists::readFromList(valueVector, listHandle);
diskOverflowFile.scanStrings(TransactionType::READ_ONLY, *valueVector);
}

void ListPropertyLists::readFromList(ValueVector* valueVector, ListHandle& listHandle) {
StringVector::resetOverflowBuffer(valueVector);
valueVector->resetAuxiliaryBuffer();
auto pageCursor = PageUtils::getPageElementCursorForPos(
headers->getCSROffset(listHandle.getBoundNodeOffset()) + listHandle.getStartElemOffset(),
numElementsPerPage);
Expand Down

0 comments on commit cfae96a

Please sign in to comment.