From 49ad7a7350019abdae99fa51115e2a10b6de07f0 Mon Sep 17 00:00:00 2001 From: Guodong Jin Date: Sun, 21 Apr 2024 14:40:45 +0800 Subject: [PATCH] Fix scan multi label from local storage; fix list column chunk lookup (#3332) --- src/storage/local_storage/local_node_table.cpp | 4 ++++ src/storage/local_storage/local_table.cpp | 4 ++++ src/storage/store/list_column_chunk.cpp | 2 +- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/storage/local_storage/local_node_table.cpp b/src/storage/local_storage/local_node_table.cpp index d3b30c5fc8..6feee7b825 100644 --- a/src/storage/local_storage/local_node_table.cpp +++ b/src/storage/local_storage/local_node_table.cpp @@ -33,6 +33,10 @@ void LocalNodeNG::lookup(const common::ValueVector& nodeIDVector, for (auto i = 0u; i < columnIDs.size(); i++) { auto posInOutputVector = outputVectors[i]->state->selVector->selectedPositions[offsetInVectorToLookup]; + if (columnIDs[i] == INVALID_COLUMN_ID) { + outputVectors[i]->setNull(posInOutputVector, true); + continue; + } getUpdateChunks(columnIDs[i]) .read(nodeOffset, 0 /*columnID*/, outputVectors[i], posInOutputVector); } diff --git a/src/storage/local_storage/local_table.cpp b/src/storage/local_storage/local_table.cpp index 2c6d61daec..d222eb7aa4 100644 --- a/src/storage/local_storage/local_table.cpp +++ b/src/storage/local_storage/local_table.cpp @@ -66,6 +66,10 @@ bool LocalChunkedGroupCollection::read(offset_t offset, const std::vectorstate->selVector->selectedPositions[offsetInOutputVector]; + if (columnIDs[i] == INVALID_COLUMN_ID) { + outputVectors[i]->setNull(posInOutputVector, true); + continue; + } readValueAtRowIdx(rowIdx, columnIDs[i], outputVectors[i], posInOutputVector); } return true; diff --git a/src/storage/store/list_column_chunk.cpp b/src/storage/store/list_column_chunk.cpp index 17d7baa767..ad660fde6b 100644 --- a/src/storage/store/list_column_chunk.cpp +++ b/src/storage/store/list_column_chunk.cpp @@ -158,7 +158,7 @@ void ListColumnChunk::lookup(offset_t offsetInChunk, ValueVector& output, if (output.isNull(posInOutputVector)) { return; } - auto startOffset = offsetInChunk == 0 ? 0 : getValue(offsetInChunk - 1); + auto startOffset = getListStartOffset(offsetInChunk); auto listSize = getListSize(offsetInChunk); output.setValue(posInOutputVector, list_entry_t{startOffset, listSize}); auto dataVector = ListVector::getDataVector(&output);