Check whatt if disable some checks in storage Merge.

This commit is contained in:
Nikolai Kochetov 2023-01-06 13:26:15 +00:00
parent 0a60fe6e60
commit a0dad93a38
2 changed files with 29 additions and 29 deletions

View File

@ -831,7 +831,7 @@ void ReadFromMerge::convertingSourceStream(
ContextPtr local_context,
ASTPtr & query,
QueryPipelineBuilder & builder,
QueryProcessingStage::Enum processed_stage)
QueryProcessingStage::Enum)
{
Block before_block_header = builder.getHeader();
@ -874,33 +874,33 @@ void ReadFromMerge::convertingSourceStream(
if (!where_expression)
return;
if (processed_stage > QueryProcessingStage::FetchColumns)
{
for (size_t column_index : collections::range(0, header.columns()))
{
ColumnWithTypeAndName header_column = header.getByPosition(column_index);
ColumnWithTypeAndName before_column = before_block_header.getByName(header_column.name);
/// If the processed_stage greater than FetchColumns and the block structure between streams is different.
/// the where expression maybe invalid because of ConvertingTransform.
/// So we need to throw exception.
if (!header_column.type->equals(*before_column.type.get()))
{
NamesAndTypesList source_columns = metadata_snapshot->getSampleBlock().getNamesAndTypesList();
auto virtual_column = *storage_merge->getVirtuals().tryGetByName("_table");
source_columns.emplace_back(NameAndTypePair{virtual_column.name, virtual_column.type});
auto syntax_result = TreeRewriter(local_context).analyze(where_expression, source_columns);
ExpressionActionsPtr actions = ExpressionAnalyzer{where_expression, syntax_result, local_context}.getActions(false, false);
Names required_columns = actions->getRequiredColumns();
// if (processed_stage > QueryProcessingStage::FetchColumns)
// {
// for (size_t column_index : collections::range(0, header.columns()))
// {
// ColumnWithTypeAndName header_column = header.getByPosition(column_index);
// ColumnWithTypeAndName before_column = before_block_header.getByName(header_column.name);
// /// If the processed_stage greater than FetchColumns and the block structure between streams is different.
// /// the where expression maybe invalid because of ConvertingTransform.
// /// So we need to throw exception.
// if (!header_column.type->equals(*before_column.type.get()))
// {
// NamesAndTypesList source_columns = metadata_snapshot->getSampleBlock().getNamesAndTypesList();
// auto virtual_column = *storage_merge->getVirtuals().tryGetByName("_table");
// source_columns.emplace_back(NameAndTypePair{virtual_column.name, virtual_column.type});
// auto syntax_result = TreeRewriter(local_context).analyze(where_expression, source_columns);
// ExpressionActionsPtr actions = ExpressionAnalyzer{where_expression, syntax_result, local_context}.getActions(false, false);
// Names required_columns = actions->getRequiredColumns();
for (const auto & required_column : required_columns)
{
if (required_column == header_column.name)
throw Exception("Block structure mismatch in Merge Storage: different types:\n" + before_block_header.dumpStructure()
+ "\n" + header.dumpStructure(), ErrorCodes::LOGICAL_ERROR);
}
}
}
}
// for (const auto & required_column : required_columns)
// {
// if (required_column == header_column.name)
// throw Exception("Block structure mismatch in Merge Storage: different types:\n" + before_block_header.dumpStructure()
// + "\n" + header.dumpStructure(), ErrorCodes::LOGICAL_ERROR);
// }
// }
// }
// }
}
IStorage::ColumnSizeByName StorageMerge::getColumnSizes() const

View File

@ -193,10 +193,10 @@ private:
size_t streams_num,
bool concat_streams = false);
void convertingSourceStream(
static void convertingSourceStream(
const Block & header, const StorageMetadataPtr & metadata_snapshot, const Aliases & aliases,
ContextPtr context, ASTPtr & query,
QueryPipelineBuilder & builder, QueryProcessingStage::Enum processed_stage);
QueryPipelineBuilder & builder, QueryProcessingStage::Enum);
};
}