diff --git a/internal/core/src/mmap/ChunkedColumn.h b/internal/core/src/mmap/ChunkedColumn.h index 5982f6ed3f..cf2c8b4d15 100644 --- a/internal/core/src/mmap/ChunkedColumn.h +++ b/internal/core/src/mmap/ChunkedColumn.h @@ -347,27 +347,17 @@ class ChunkedVariableColumn : public ChunkedColumnBase { ErrorCode::Unsupported, "RawJsonAt only supported for ChunkedVariableColumn"); } - if (offsets == nullptr) { - auto ca = SemiInlineGet(slot_->PinAllCells()); - for (int64_t i = 0; i < num_rows_; i++) { - auto [chunk_id, offset_in_chunk] = GetChunkIDByOffset(i); - auto chunk = ca->get_cell_of(chunk_id); - auto valid = nullable_ ? chunk->isValid(offset_in_chunk) : true; - auto str_view = static_cast(chunk)->operator[]( - offset_in_chunk); - fn(Json(str_view.data(), str_view.size()), i, valid); - } - } else { - auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); - auto ca = SemiInlineGet(slot_->PinCells(cids)); - for (int64_t i = 0; i < count; i++) { - auto chunk = ca->get_cell_of(cids[i]); - auto valid = - nullable_ ? chunk->isValid(offsets_in_chunk[i]) : true; - auto str_view = static_cast(chunk)->operator[]( - offsets_in_chunk[i]); - fn(Json(str_view.data(), str_view.size()), i, valid); - } + if (count == 0) { + return; + } + auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); + auto ca = SemiInlineGet(slot_->PinCells(cids)); + for (int64_t i = 0; i < count; i++) { + auto chunk = ca->get_cell_of(cids[i]); + auto valid = nullable_ ? chunk->isValid(offsets_in_chunk[i]) : true; + auto str_view = static_cast(chunk)->operator[]( + offsets_in_chunk[i]); + fn(Json(str_view.data(), str_view.size()), i, valid); } } }; diff --git a/internal/core/src/mmap/ChunkedColumnGroup.h b/internal/core/src/mmap/ChunkedColumnGroup.h index 9c31e61c2a..347ffc2f6f 100644 --- a/internal/core/src/mmap/ChunkedColumnGroup.h +++ b/internal/core/src/mmap/ChunkedColumnGroup.h @@ -172,27 +172,16 @@ class ProxyChunkColumn : public ChunkedColumnInterface { } } // nullable: - if (offsets == nullptr) { - int64_t current_offset = 0; - for (cid_t cid = 0; cid < num_chunks(); ++cid) { - auto group_chunk = group_->GetGroupChunk(cid); - auto chunk = group_chunk.get()->GetChunk(field_id_); - auto chunk_rows = chunk->RowNums(); - for (int64_t i = 0; i < chunk_rows; ++i) { - auto valid = chunk->isValid(i); - fn(valid, current_offset + i); - } - current_offset += chunk_rows; - } - } else { - auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); - auto ca = group_->GetGroupChunks(cids); - for (int64_t i = 0; i < count; i++) { - auto* group_chunk = ca->get_cell_of(cids[i]); - auto chunk = group_chunk->GetChunk(field_id_); - auto valid = chunk->isValid(offsets_in_chunk[i]); - fn(valid, i); - } + if (count == 0) { + return; + } + auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); + auto ca = group_->GetGroupChunks(cids); + for (int64_t i = 0; i < count; i++) { + auto* group_chunk = ca->get_cell_of(cids[i]); + auto chunk = group_chunk->GetChunk(field_id_); + auto valid = chunk->isValid(offsets_in_chunk[i]); + fn(valid, i); } } @@ -370,8 +359,7 @@ class ProxyChunkColumn : public ChunkedColumnInterface { auto chunk = group_chunk->GetChunk(field_id_); auto valid = chunk->isValid(offsets_in_chunk[i]); auto value = static_cast(chunk.get()) - -> - operator[](offsets_in_chunk[i]); + ->operator[](offsets_in_chunk[i]); fn(value, i, valid); } } @@ -387,35 +375,19 @@ class ProxyChunkColumn : public ChunkedColumnInterface { ErrorCode::Unsupported, "RawJsonAt only supported for ProxyChunkColumn of Json type"); } - if (offsets == nullptr) { - int64_t current_offset = 0; - for (cid_t cid = 0; cid < num_chunks(); ++cid) { - auto group_chunk = group_->GetGroupChunk(cid); - auto chunk = group_chunk.get()->GetChunk(field_id_); - auto chunk_rows = chunk->RowNums(); - for (int64_t i = 0; i < chunk_rows; ++i) { - auto valid = chunk->isValid(i); - auto str_view = - static_cast(chunk.get())->operator[](i); - fn(Json(str_view.data(), str_view.size()), - current_offset + i, - valid); - } - current_offset += chunk_rows; - } - } else { - auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); - auto ca = group_->GetGroupChunks(cids); + if (count == 0) { + return; + } + auto [cids, offsets_in_chunk] = ToChunkIdAndOffset(offsets, count); + auto ca = group_->GetGroupChunks(cids); - for (int64_t i = 0; i < count; i++) { - auto* group_chunk = ca->get_cell_of(cids[i]); - auto chunk = group_chunk->GetChunk(field_id_); - auto valid = chunk->isValid(offsets_in_chunk[i]); - auto str_view = static_cast(chunk.get()) - -> - operator[](offsets_in_chunk[i]); - fn(Json(str_view.data(), str_view.size()), i, valid); - } + for (int64_t i = 0; i < count; i++) { + auto* group_chunk = ca->get_cell_of(cids[i]); + auto chunk = group_chunk->GetChunk(field_id_); + auto valid = chunk->isValid(offsets_in_chunk[i]); + auto str_view = static_cast(chunk.get()) + ->operator[](offsets_in_chunk[i]); + fn(Json(str_view.data(), str_view.size()), i, valid); } } diff --git a/internal/core/src/mmap/ChunkedColumnInterface.h b/internal/core/src/mmap/ChunkedColumnInterface.h index 87e4892944..11884eb6e4 100644 --- a/internal/core/src/mmap/ChunkedColumnInterface.h +++ b/internal/core/src/mmap/ChunkedColumnInterface.h @@ -45,8 +45,8 @@ class ChunkedColumnInterface { // Other Bulk* methods can also support nullptr offsets, but not added at this moment. virtual void BulkIsValid(std::function fn, - const int64_t* offsets = nullptr, - int64_t count = 0) const = 0; + const int64_t* offsets, + int64_t count) const = 0; // Check if the column can contain null values virtual bool @@ -124,8 +124,8 @@ class ChunkedColumnInterface { virtual void BulkRawJsonAt(std::function fn, - const int64_t* offsets = nullptr, - int64_t count = 0) const { + const int64_t* offsets, + int64_t count) const { PanicInfo( ErrorCode::Unsupported, "RawJsonAt only supported for ChunkColumnInterface of Json type");