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)