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);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (lazy_executed_nodes.contains(child))
|
||||
const ActionsDAG::Node * child_no_alias = removeAliasIfNeccessasry(child);
|
||||
|
||||
if (lazy_executed_nodes.contains(child_no_alias))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user