未验证 提交 85a5ece9 编写于 作者: A alexey-milovidov 提交者: GitHub

Merge pull request #4407 from nikvas0/nikvas0/index_fix2

indices fix
......@@ -1010,7 +1010,7 @@ MarkRanges MergeTreeDataSelectExecutor::filterMarksUsingIndex(
continue;
}
if (res.empty() || res.back().end - data_range.begin >= min_marks_for_seek)
if (res.empty() || res.back().end - data_range.begin > min_marks_for_seek)
res.push_back(data_range);
else
res.back().end = data_range.end;
......
......@@ -39,7 +39,8 @@ void MergeTreeMinMaxGranule::serializeBinary(WriteBuffer & ostr) const
void MergeTreeMinMaxGranule::deserializeBinary(ReadBuffer & istr)
{
parallelogram.clear();
Field min_val, max_val;
Field min_val;
Field max_val;
for (size_t i = 0; i < index.columns.size(); ++i)
{
const DataTypePtr & type = index.data_types[i];
......@@ -59,7 +60,8 @@ void MergeTreeMinMaxGranule::update(const Block & block, size_t * pos, UInt64 li
size_t rows_read = std::min(limit, block.rows() - *pos);
Field field_min, field_max;
Field field_min;
Field field_max;
for (size_t i = 0; i < index.columns.size(); ++i)
{
const auto & column = block.getByName(index.columns[i]).column;
......@@ -98,7 +100,6 @@ bool MinMaxCondition::mayBeTrueOnGranule(MergeTreeIndexGranulePtr idx_granule) c
if (!granule)
throw Exception(
"Minmax index condition got a granule with the wrong type.", ErrorCodes::LOGICAL_ERROR);
return condition.mayBeTrueInParallelogram(granule->parallelogram, index.data_types);
}
......
......@@ -448,9 +448,11 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm
WrittenOffsetColumns offset_columns;
auto primary_key_column_names = storage.primary_key_columns;
Names skip_indexes_column_names;
std::set<String> skip_indexes_column_names_set;
for (const auto & index : storage.skip_indices)
std::copy(index->columns.cbegin(), index->columns.cend(), std::back_inserter(skip_indexes_column_names));
std::copy(index->columns.cbegin(), index->columns.cend(),
std::inserter(skip_indexes_column_names_set, skip_indexes_column_names_set.end()));
Names skip_indexes_column_names(skip_indexes_column_names_set.begin(), skip_indexes_column_names_set.end());
/// Here we will add the columns related to the Primary Key, then write the index.
std::vector<ColumnWithTypeAndName> primary_key_columns(primary_key_column_names.size());
......@@ -542,6 +544,8 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm
rows_count += rows;
{
/// Creating block for update
Block indices_update_block(skip_indexes_columns);
/// Filling and writing skip indices like in IMergedBlockOutputStream::writeData
for (size_t i = 0; i < storage.skip_indices.size(); ++i)
{
......@@ -573,7 +577,7 @@ void MergedBlockOutputStream::writeImpl(const Block & block, const IColumn::Perm
}
size_t pos = prev_pos;
skip_indices_granules[i]->update(block, &pos, limit);
skip_indices_granules[i]->update(indices_update_block, &pos, limit);
if (pos == prev_pos + limit)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册