From 4d2a3a0da888264af5951534641c44f64088bf82 Mon Sep 17 00:00:00 2001 From: ziyi chen Date: Thu, 12 Oct 2023 17:34:54 -0400 Subject: [PATCH] Fix mac build --- CMakeLists.txt | 2 ++ .../operator/persistent/reader/csv/driver.cpp | 2 +- src/storage/store/column_chunk.cpp | 25 +++++++++++-------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56bb5f60df9..4d33686a3b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,8 +8,10 @@ set(CMAKE_FIND_PACKAGE_RESOLVE_SYMLINKS TRUE) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED True) set(CMAKE_POSITION_INDEPENDENT_CODE ON) +if(NOT APPLE) set(CMAKE_CXX_VISIBILITY_PRESET hidden) set(CMAKE_VISIBILITY_INLINES_HIDDEN ON) +endif() # Detect OS and architecture, copied from DuckDB set(OS_NAME "unknown") diff --git a/src/processor/operator/persistent/reader/csv/driver.cpp b/src/processor/operator/persistent/reader/csv/driver.cpp index 7b00362bf51..f05dce24105 100644 --- a/src/processor/operator/persistent/reader/csv/driver.cpp +++ b/src/processor/operator/persistent/reader/csv/driver.cpp @@ -251,7 +251,7 @@ static bool tryCastStringToStruct(const char* input, uint64_t len, ValueVector* skipWhitespace(++input, end); copyStringToVector(StructVector::getFieldVector(vector, fieldIdx).get(), rowToAdd, - std::string_view{valStart, valEnd}, csvReaderConfig); + std::string_view{valStart, (size_t)(valEnd - valStart)}, csvReaderConfig); } return true; } diff --git a/src/storage/store/column_chunk.cpp b/src/storage/store/column_chunk.cpp index b73a9338722..bec82caec18 100644 --- a/src/storage/store/column_chunk.cpp +++ b/src/storage/store/column_chunk.cpp @@ -143,7 +143,7 @@ void ColumnChunk::initializeBuffer(offset_t capacity_) { bufferSize = getBufferSize(); buffer = std::make_unique(bufferSize); if (nullChunk) { - static_cast(nullChunk.get())->initializeBuffer(capacity); + nullChunk->initializeBuffer(capacity_); } } @@ -250,16 +250,19 @@ void ColumnChunk::write(const Value& val, uint64_t posToWrite) { } void ColumnChunk::resize(uint64_t newCapacity) { - capacity = newCapacity; - auto numBytesAfterResize = getBufferSize(); - assert(numBytesAfterResize > bufferSize); - auto resizedBuffer = std::make_unique(numBytesAfterResize); - if (dataType.getPhysicalType() == common::PhysicalTypeID::BOOL) { - memset(resizedBuffer.get(), 0 /* non null */, numBytesAfterResize); - } - memcpy(resizedBuffer.get(), buffer.get(), bufferSize); - bufferSize = numBytesAfterResize; - buffer = std::move(resizedBuffer); + if (numBytesPerValue != 0) { + // Avoid resizing struct/serial columns. + capacity = newCapacity; + auto numBytesAfterResize = getBufferSize(); + assert(numBytesAfterResize > bufferSize); + auto resizedBuffer = std::make_unique(numBytesAfterResize); + if (dataType.getPhysicalType() == common::PhysicalTypeID::BOOL) { + memset(resizedBuffer.get(), 0 /* non null */, numBytesAfterResize); + } + memcpy(resizedBuffer.get(), buffer.get(), bufferSize); + bufferSize = numBytesAfterResize; + buffer = std::move(resizedBuffer); + } if (nullChunk) { nullChunk->resize(newCapacity); }