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)

Reply via email to