Skip to content

Commit

Permalink
Merge pull request #2108 from kuzudb/copy-to-csv-fix
Browse files Browse the repository at this point in the history
Fix copy to csv
  • Loading branch information
acquamarin committed Sep 29, 2023
2 parents f05d348 + e4caa51 commit 5b6fdf8
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 1,022 deletions.
8 changes: 6 additions & 2 deletions src/common/type_utils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,11 +93,15 @@ std::string TypeUtils::toString(const list_entry_t& val, void* valueVector) {
auto childType = VarListType::getChildType(&listVector->dataType);
auto dataVector = ListVector::getDataVector(listVector);
for (auto i = 0u; i < val.size - 1; ++i) {
result += castValueToString(*childType, values, dataVector);
result += dataVector->isNull(val.offset + i) ?
"" :
castValueToString(*childType, values, dataVector);
result += ",";
values += ListVector::getDataVector(listVector)->getNumBytesPerValue();
}
result += castValueToString(*childType, values, dataVector);
result += dataVector->isNull(val.offset + val.size - 1) ?
"" :
castValueToString(*childType, values, dataVector);
result += "]";
return result;
}
Expand Down
5 changes: 3 additions & 2 deletions src/processor/operator/persistent/csv_file_writer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ void CSVFileWriter::writeValues(std::vector<common::ValueVector*>& outputVectors
template<typename T>
void CSVFileWriter::writeToBuffer(common::ValueVector* vector, bool escapeStringValue) {
auto selPos = vector->state->selVector->selectedPositions[0];
auto value = TypeUtils::toString(vector->getValue<T>(selPos));
auto value = vector->isNull(selPos) ? "" : TypeUtils::toString(vector->getValue<T>(selPos));
if (escapeStringValue) {
escapeString(value);
}
Expand All @@ -68,7 +68,8 @@ template<typename T>
void CSVFileWriter::writeListToBuffer(common::ValueVector* vector) {
// vectors are always flat
auto selPos = vector->state->selVector->selectedPositions[0];
auto value = TypeUtils::toString(vector->getValue<T>(selPos), vector);
auto value =
vector->isNull(selPos) ? "" : TypeUtils::toString(vector->getValue<T>(selPos), vector);
escapeString(value);
writeToBuffer(value);
}
Expand Down
7 changes: 5 additions & 2 deletions src/storage/store/var_list_column_chunk.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,11 @@ void VarListColumnChunk::append(common::ValueVector* vector, common::offset_t st
dataVector->setState(std::make_unique<DataChunkState>());
dataVector->state->selVector->resetSelectorToValuePosBuffer();
for (auto i = 0u; i < vector->state->selVector->selectedSize; i++) {
auto listEntry =
vector->getValue<list_entry_t>(vector->state->selVector->selectedPositions[i]);
auto pos = vector->state->selVector->selectedPositions[i];
if (vector->isNull(pos)) {
continue;
}
auto listEntry = vector->getValue<list_entry_t>(pos);
dataVector->state->selVector->selectedSize = listEntry.size;
for (auto j = 0u; j < listEntry.size; j++) {
dataVector->state->selVector->selectedPositions[j] = listEntry.offset + j;
Expand Down
Loading

0 comments on commit 5b6fdf8

Please sign in to comment.