Fix for reading _part_offset along with newly added column that has only default value

This commit is contained in:
Alexander Gololobov 2022-12-14 23:07:13 +01:00
parent b21e4de6fa
commit a1cdad4815

View File

@ -86,16 +86,24 @@ size_t IMergeTreeReader::readRows(size_t from_mark, size_t current_task_last_mar
res_columns.erase(res_columns.begin() + part_offset_column_index);
}
const size_t rows_read = readPhysicalRows(from_mark, current_task_last_mark, continue_reading, max_rows_to_read, res_columns/* *physical_columns_to_fill*/);
size_t rows_read = readPhysicalRows(from_mark, current_task_last_mark, continue_reading, max_rows_to_read, res_columns/* *physical_columns_to_fill*/);
const size_t start_row = continue_reading ? last_read_end_offset : data_part_info_for_read->getIndexGranularity().getMarkStartingRow(from_mark);
const size_t end_row = start_row + rows_read;
last_read_end_offset = end_row;
// std::cerr << "READ from " << start_row << " to " << end_row << "\n\n\n";
if (part_offset_column_index != -1)
{
/// In case when all requested physical columns are not present in part rows_read will be zero.
/// But we still need to fill offset column with values.
if (rows_read == 0)
{
const size_t total_rows = data_part_info_for_read->getIndexGranularity().getTotalRows();
rows_read = start_row + max_rows_to_read < total_rows ? max_rows_to_read : total_rows - start_row;
}
const size_t end_row = start_row + rows_read;
MutableColumnPtr part_offset_column = part_offset_column_before ?
part_offset_column_before->assumeMutable()
: ColumnUInt64::create()->getPtr();
@ -108,6 +116,8 @@ size_t IMergeTreeReader::readRows(size_t from_mark, size_t current_task_last_mar
res_columns.insert(res_columns.begin() + part_offset_column_index, part_offset_column->getPtr());
}
last_read_end_offset = start_row + rows_read;
// if (part_offset_column_index != -1)
// {
// MutableColumnPtr part_offset_column = res_columns[part_offset_column_index] ?