Skip to content

Commit 144d0e9

Browse files
committed
compute subquery once
1 parent b97d69a commit 144d0e9

1 file changed

Lines changed: 7 additions & 7 deletions

File tree

‎datafusion/optimizer/src/optimizer.rs‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -617,14 +617,13 @@ impl Optimizer {
617617
while i < options.optimizer.max_passes {
618618
log_plan(&format!("Optimizer input (pass {i})"), &new_plan);
619619

620-
for rule in &self.rules {
621-
// Re-check for each rule: early rules can remove subquery
622-
// expressions, allowing later rules to use the cheaper in-place
623-
// traversal in the same optimizer pass. This is also
624-
// correctness-sensitive: the in-place path refreshes parent
625-
// schemas after child schemas change.
626-
let has_subqueries = plan_has_subqueries(&new_plan);
620+
// Track subquery presence across the pass. Refresh after changed
621+
// rules so decorrelation can move later rules onto the in-place
622+
// path; that path refreshes parent schemas after child schemas
623+
// change.
624+
let mut has_subqueries = plan_has_subqueries(&new_plan);
627625

626+
for rule in &self.rules {
628627
// If skipping failed rules, copy plan before attempting to rewrite
629628
// as rewriting is destructive
630629
let prev_plan = options
@@ -702,6 +701,7 @@ impl Optimizer {
702701
new_plan = data;
703702
observer(&new_plan, rule.as_ref());
704703
if transformed {
704+
has_subqueries = plan_has_subqueries(&new_plan);
705705
log_plan(rule.name(), &new_plan);
706706
} else {
707707
debug!(

0 commit comments

Comments
 (0)