mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-22 23:52:03 +00:00
Merge
This commit is contained in:
parent
8b2b1a52d1
commit
25ddd55cad
@ -75,11 +75,9 @@ public:
|
||||
/// Указатели на столбцы смещений, общие для столбцов из вложенных структур данных
|
||||
/// Если append, все значения nullptr, и offset_columns используется только для проверки, что столбец смещений уже прочитан.
|
||||
OffsetColumns offset_columns;
|
||||
|
||||
for (const NameAndTypePair & it : columns)
|
||||
{
|
||||
const auto read_column = [&] (const NameAndTypePair & it) {
|
||||
if (streams.end() == streams.find(it.name))
|
||||
continue;
|
||||
return;
|
||||
|
||||
all_columns_missing = false;
|
||||
|
||||
@ -100,7 +98,7 @@ public:
|
||||
String name = DataTypeNested::extractNestedTableName(column.name);
|
||||
|
||||
if (offset_columns.count(name) == 0)
|
||||
offset_columns[name] = append ? NULL : new ColumnArray::ColumnOffsets_t;
|
||||
offset_columns[name] = append ? nullptr : new ColumnArray::ColumnOffsets_t;
|
||||
else
|
||||
read_offsets = false; /// на предыдущих итерациях смещения уже считали вызовом readData
|
||||
|
||||
@ -114,10 +112,17 @@ public:
|
||||
|
||||
if (!append && column.column->size())
|
||||
res.insert(column);
|
||||
}
|
||||
};
|
||||
|
||||
for (const NameAndTypePair & it : columns)
|
||||
read_column(it);
|
||||
|
||||
if (all_columns_missing)
|
||||
addMinimumSizeColumn(from_mark, max_rows_to_read, res);
|
||||
{
|
||||
addMinimumSizeColumn();
|
||||
/// minimum size column is necessarily at list's front
|
||||
read_column(columns.front());
|
||||
}
|
||||
}
|
||||
catch (const Exception & e)
|
||||
{
|
||||
@ -136,7 +141,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void addMinimumSizeColumn(const size_t from_mark, const size_t max_rows_to_read, Block & res)
|
||||
void addMinimumSizeColumn()
|
||||
{
|
||||
const auto get_column_size = [this] (const String & name) {
|
||||
const auto & files = data_part->checksums.files;
|
||||
@ -168,17 +173,8 @@ public:
|
||||
if (!minimum_size_column)
|
||||
throw std::logic_error{"could not find a column of minimum size in MergeTree"};
|
||||
|
||||
ColumnWithNameAndType column{
|
||||
minimum_size_column->type->createColumn(),
|
||||
minimum_size_column->type,
|
||||
minimum_size_column->name
|
||||
};
|
||||
|
||||
addStream(column.name, *column.type, all_mark_ranges);
|
||||
addStream(minimum_size_column->name, *minimum_size_column->type, all_mark_ranges);
|
||||
columns.emplace(std::begin(columns), *minimum_size_column);
|
||||
res.insert(column);
|
||||
|
||||
readData(column.name, *column.type, *column.column, from_mark, max_rows_to_read, 0, true);
|
||||
}
|
||||
|
||||
/// Заполняет столбцы, которых нет в блоке, значениями по умолчанию.
|
||||
|
Loading…
Reference in New Issue
Block a user