mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
fix unnecessarily preparations for join at initial server
This commit is contained in:
parent
4e6fd3e3fe
commit
815380b8b2
@ -574,14 +574,20 @@ void ExpressionAnalyzer::initGlobalSubqueries(ASTPtr & ast)
|
||||
{
|
||||
/// For GLOBAL IN.
|
||||
if (do_global && (func->name == "globalIn" || func->name == "globalNotIn"))
|
||||
{
|
||||
addExternalStorage(func->arguments->children.at(1));
|
||||
has_global_subqueries = true;
|
||||
}
|
||||
}
|
||||
else if (ASTTablesInSelectQueryElement * table_elem = typeid_cast<ASTTablesInSelectQueryElement *>(ast.get()))
|
||||
{
|
||||
/// For GLOBAL JOIN.
|
||||
if (do_global && table_elem->table_join
|
||||
&& static_cast<const ASTTableJoin &>(*table_elem->table_join).locality == ASTTableJoin::Locality::Global)
|
||||
{
|
||||
addExternalStorage(table_elem->table_expression);
|
||||
has_global_subqueries = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -186,6 +186,8 @@ public:
|
||||
|
||||
bool isRewriteSubqueriesPredicate() { return rewrite_subqueries; }
|
||||
|
||||
bool hasGlobalSubqueries() { return has_global_subqueries; }
|
||||
|
||||
private:
|
||||
ASTPtr query;
|
||||
ASTSelectQuery * select_query;
|
||||
@ -216,6 +218,7 @@ private:
|
||||
|
||||
/// Do I need to prepare for execution global subqueries when analyzing the query.
|
||||
bool do_global;
|
||||
bool has_global_subqueries = false;
|
||||
|
||||
SubqueriesForSets subqueries_for_sets;
|
||||
|
||||
|
@ -549,6 +549,10 @@ void InterpreterSelectQuery::executeImpl(Pipeline & pipeline, const BlockInputSt
|
||||
if (query.limit_length)
|
||||
executePreLimit(pipeline);
|
||||
}
|
||||
|
||||
// If there is no global subqueries, we can run subqueries only when recieve them on server.
|
||||
if (!query_analyzer->hasGlobalSubqueries() && !expressions.subqueries_for_sets.empty())
|
||||
executeSubqueriesInSetsAndJoins(pipeline, expressions.subqueries_for_sets);
|
||||
}
|
||||
|
||||
if (expressions.second_stage)
|
||||
@ -654,7 +658,21 @@ void InterpreterSelectQuery::executeImpl(Pipeline & pipeline, const BlockInputSt
|
||||
}
|
||||
}
|
||||
|
||||
if (!expressions.subqueries_for_sets.empty())
|
||||
LOG_DEBUG(log, "is first_stage: " << expressions.first_stage);
|
||||
LOG_DEBUG(log, "is second_stage: " << expressions.second_stage);
|
||||
LOG_DEBUG(log, "has_join: " << expressions.has_join);
|
||||
LOG_DEBUG(log, "subqueries size: " << expressions.subqueries_for_sets.size());
|
||||
LOG_DEBUG(log, "has global subqueries: " << query_analyzer->hasGlobalSubqueries());
|
||||
for (auto s : expressions.subqueries_for_sets)
|
||||
{
|
||||
LOG_DEBUG(log, "set: " << !!s.second.set);
|
||||
LOG_DEBUG(log, "join: " << !!s.second.join);
|
||||
LOG_DEBUG(log, "table: " << !!s.second.table);
|
||||
for (auto name : s.second.joined_block_aliases)
|
||||
LOG_DEBUG(log, "name with alias: " << name.first << "; " << name.second);
|
||||
}
|
||||
|
||||
if (query_analyzer->hasGlobalSubqueries() && !expressions.subqueries_for_sets.empty())
|
||||
executeSubqueriesInSetsAndJoins(pipeline, expressions.subqueries_for_sets);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user