Added processing stage check for StorageMerge. [#CLICKHOUSE-3694] #2156

This commit is contained in:
Nikolai Kochetov 2018-06-25 15:47:10 +03:00
parent 4f7c284d34
commit 60f0ed9296

View File

@ -171,11 +171,20 @@ BlockInputStreams StorageMerge::read(
const ASTPtr & query = query_info.query; const ASTPtr & query = query_info.query;
/// If PREWHERE is used in query, you need to make sure that all tables support this. for (const auto & elem : selected_tables)
if (typeid_cast<const ASTSelectQuery &>(*query).prewhere_expression) {
for (const auto & elem : selected_tables) /// Check processing stage again in case new table was added after getQueryProcessingStage call.
auto stage = elem.first->getQueryProcessingStage(context);
if (stage != processed_stage)
throw Exception("Source tables for Merge table are processing data up to different stages",
ErrorCodes::INCOMPATIBLE_SOURCE_TABLES);
/// If PREWHERE is used in query, you need to make sure that all tables support this.
if (typeid_cast<const ASTSelectQuery &>(*query).prewhere_expression)
if (!elem.first->supportsPrewhere()) if (!elem.first->supportsPrewhere())
throw Exception("Storage " + elem.first->getName() + " doesn't support PREWHERE.", ErrorCodes::ILLEGAL_PREWHERE); throw Exception("Storage " + elem.first->getName() + " doesn't support PREWHERE.",
ErrorCodes::ILLEGAL_PREWHERE);
}
Block virtual_columns_block = getBlockWithVirtualColumns(selected_tables); Block virtual_columns_block = getBlockWithVirtualColumns(selected_tables);