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)