| 594 | } |
| 595 | |
| 596 | void BaseVector::ensureWritable(const SelectivityVector& rows) { |
| 597 | auto newSize = std::max<vector_size_t>(rows.end(), length_); |
| 598 | if (nulls_ && !nulls_->isMutable()) { |
| 599 | BufferPtr newNulls = AlignedBuffer::allocate<bool>(newSize, pool_); |
| 600 | auto rawNewNulls = newNulls->asMutable<uint64_t>(); |
| 601 | memcpy(rawNewNulls, rawNulls_, bits::nbytes(length_)); |
| 602 | |
| 603 | nulls_ = std::move(newNulls); |
| 604 | rawNulls_ = nulls_->as<uint64_t>(); |
| 605 | } |
| 606 | |
| 607 | this->resize(newSize); |
| 608 | this->setMayChangeContentUnderSameAddress(true); |
| 609 | this->resetDataDependentFlags(&rows); |
| 610 | } |
| 611 | |
| 612 | void BaseVector::ensureWritable( |