You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "asdfgh19 (Jira)" <ji...@apache.org> on 2023/11/12 13:05:00 UTC
[jira] [Created] (CALCITE-6109) Avoid extra loops when optimizing statements with ternary expressions
asdfgh19 created CALCITE-6109:
---------------------------------
Summary: Avoid extra loops when optimizing statements with ternary expressions
Key: CALCITE-6109
URL: https://issues.apache.org/jira/browse/CALCITE-6109
Project: Calcite
Issue Type: Improvement
Components: linq4j
Reporter: asdfgh19
Assignee: asdfgh19
{code:java}
public BlockStatement toBlock() {
if (optimizing && removeUnused) {
// We put an artificial limit of 10 iterations just to prevent an endless
// loop. Optimize should not loop forever, however it is hard to prove if
// it always finishes in reasonable time.
for (int i = 0; i < 10; i++) {
if (!optimize(createOptimizeShuttle(), true)) {
break;
}
}
optimize(createFinishingOptimizeShuttle(), false);
}
return Expressions.block(statements);
} {code}
When there are statements with ternary expressions in BlockBuilder#statements, the optimize method always returns true, causing the loop in the toBlock method to always be executed 10 times.
The reason is that when OptimizeShuttle traverses the statement, a new instance of TernaryExpression will always be created, regardless of whether the optimization is actually performed.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)