| 216 | } |
| 217 | |
| 218 | void NpyReader::readBlock(block_idx_t blockIdx, ValueVector* vectorToRead) const { |
| 219 | uint64_t rowNumber = DEFAULT_VECTOR_CAPACITY * blockIdx; |
| 220 | auto numRows = getNumRows(); |
| 221 | if (rowNumber >= numRows) { |
| 222 | vectorToRead->state->getSelVectorUnsafe().setSelSize(0); |
| 223 | } else { |
| 224 | auto rowPointer = getPointerToRow(rowNumber); |
| 225 | auto numRowsToRead = std::min(DEFAULT_VECTOR_CAPACITY, getNumRows() - rowNumber); |
| 226 | const auto& rowType = vectorToRead->dataType; |
| 227 | if (rowType.getLogicalTypeID() == LogicalTypeID::ARRAY) { |
| 228 | auto numValuesPerRow = ArrayType::getNumElements(rowType); |
| 229 | for (auto i = 0u; i < numRowsToRead; i++) { |
| 230 | auto listEntry = ListVector::addList(vectorToRead, numValuesPerRow); |
| 231 | vectorToRead->setValue(i, listEntry); |
| 232 | } |
| 233 | auto dataVector = ListVector::getDataVector(vectorToRead); |
| 234 | memcpy(dataVector->getData(), rowPointer, |
| 235 | numRowsToRead * numValuesPerRow * dataVector->getNumBytesPerValue()); |
| 236 | vectorToRead->state->getSelVectorUnsafe().setSelSize(numRowsToRead); |
| 237 | } else { |
| 238 | memcpy(vectorToRead->getData(), rowPointer, |
| 239 | numRowsToRead * vectorToRead->getNumBytesPerValue()); |
| 240 | vectorToRead->state->getSelVectorUnsafe().setSelSize(numRowsToRead); |
| 241 | } |
| 242 | } |
| 243 | } |
| 244 | |
| 245 | NpyMultiFileReader::NpyMultiFileReader(const std::vector<std::string>& filePaths) { |
| 246 | for (auto& file : filePaths) { |
no test coverage detected