mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 16:50:48 +00:00
ExpressionJIT fix short-circuit with alias
This commit is contained in:
parent
3796ccb912
commit
d538871d56
@ -324,6 +324,16 @@ static bool isCompilableConstant(const ActionsDAG::Node & node)
|
|||||||
return node.column && isColumnConst(*node.column) && canBeNativeType(*node.result_type);
|
return node.column && isColumnConst(*node.column) && canBeNativeType(*node.result_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const ActionsDAG::Node * removeAliasIfNeccessasry(const ActionsDAG::Node * node)
|
||||||
|
{
|
||||||
|
const ActionsDAG::Node * node_no_alias = node;
|
||||||
|
|
||||||
|
while (node_no_alias->type == ActionsDAG::ActionType::ALIAS)
|
||||||
|
node_no_alias = node_no_alias->children[0];
|
||||||
|
|
||||||
|
return node_no_alias;
|
||||||
|
}
|
||||||
|
|
||||||
static bool isCompilableFunction(const ActionsDAG::Node & node, const std::unordered_set<const ActionsDAG::Node *> & lazy_executed_nodes)
|
static bool isCompilableFunction(const ActionsDAG::Node & node, const std::unordered_set<const ActionsDAG::Node *> & lazy_executed_nodes)
|
||||||
{
|
{
|
||||||
if (node.type != ActionsDAG::ActionType::FUNCTION)
|
if (node.type != ActionsDAG::ActionType::FUNCTION)
|
||||||
@ -336,7 +346,9 @@ static bool isCompilableFunction(const ActionsDAG::Node & node, const std::unord
|
|||||||
{
|
{
|
||||||
for (const auto & child : node.children)
|
for (const auto & child : node.children)
|
||||||
{
|
{
|
||||||
if (lazy_executed_nodes.contains(child))
|
const ActionsDAG::Node * child_no_alias = removeAliasIfNeccessasry(child);
|
||||||
|
|
||||||
|
if (lazy_executed_nodes.contains(child_no_alias))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user