Skip to content

Commit 53bbf5e

Browse files
committed
Remove child_stats Vec, use cache for all child statistics lookups
1 parent bf43bc7 commit 53bbf5e

25 files changed

Lines changed: 85 additions & 103 deletions

File tree

datafusion-examples/examples/relation_planner/table_sample.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ impl ExecutionPlan for SampleExec {
723723
}
724724

725725
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
726-
let mut stats = Arc::unwrap_or_clone(Arc::clone(&args.child_stats()[0]));
726+
let mut stats = Arc::unwrap_or_clone(args.child_stats_of(self.input.as_ref())?);
727727
let ratio = self.upper_bound - self.lower_bound;
728728

729729
// Scale statistics by sampling ratio (inexact due to randomness)

datafusion/physical-optimizer/src/output_requirements.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ impl ExecutionPlan for OutputRequirementExec {
244244
}
245245

246246
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
247-
args.child_stats_for(0, self.input.as_ref())
247+
args.child_stats_for(self.input.as_ref())
248248
}
249249

250250
fn try_swapping_with_projection(

datafusion/physical-plan/benches/compute_statistics.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -174,12 +174,10 @@ fn compute_statistics_without_shared_cache(
174174
plan: &dyn ExecutionPlan,
175175
partition: Option<usize>,
176176
) -> Result<Arc<Statistics>> {
177-
let child_stats = plan
178-
.children()
179-
.iter()
180-
.map(|child| compute_statistics_without_shared_cache(child.as_ref(), partition))
181-
.collect::<Result<Vec<_>>>()?;
182-
let args = StatisticsArgs::new(partition, child_stats);
177+
for child in plan.children() {
178+
compute_statistics_without_shared_cache(child.as_ref(), partition)?;
179+
}
180+
let args = StatisticsArgs::new(partition);
183181
plan.statistics_with_args(&args)
184182
}
185183

datafusion/physical-plan/src/aggregates/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1645,7 +1645,7 @@ impl ExecutionPlan for AggregateExec {
16451645
}
16461646

16471647
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
1648-
let child_statistics = args.child_stats_for(0, self.input.as_ref())?;
1648+
let child_statistics = args.child_stats_for(self.input.as_ref())?;
16491649
Ok(Arc::new(self.statistics_inner(&child_statistics)?))
16501650
}
16511651

datafusion/physical-plan/src/buffer.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ impl ExecutionPlan for BufferExec {
246246
}
247247

248248
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
249-
args.child_stats_for(0, self.input.as_ref())
249+
args.child_stats_for(self.input.as_ref())
250250
}
251251

252252
fn supports_limit_pushdown(&self) -> bool {

datafusion/physical-plan/src/coalesce_batches.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ impl ExecutionPlan for CoalesceBatchesExec {
224224
}
225225

226226
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
227-
let stats = Arc::unwrap_or_clone(args.child_stats_for(0, self.input.as_ref())?);
227+
let stats = Arc::unwrap_or_clone(args.child_stats_for(self.input.as_ref())?);
228228
Ok(Arc::new(stats.with_fetch(self.fetch, 0, 1)?))
229229
}
230230

datafusion/physical-plan/src/coalesce_partitions.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ impl ExecutionPlan for CoalescePartitionsExec {
241241
}
242242

243243
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
244-
let stats = Arc::unwrap_or_clone(Arc::clone(&args.child_stats()[0]));
244+
let stats = Arc::unwrap_or_clone(args.child_stats_of(self.input.as_ref())?);
245245
Ok(Arc::new(stats.with_fetch(self.fetch, 0, 1)?))
246246
}
247247

datafusion/physical-plan/src/coop.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ impl ExecutionPlan for CooperativeExec {
308308
}
309309

310310
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
311-
args.child_stats_for(0, self.input.as_ref())
311+
args.child_stats_for(self.input.as_ref())
312312
}
313313

314314
fn supports_limit_pushdown(&self) -> bool {

datafusion/physical-plan/src/filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -579,7 +579,7 @@ impl ExecutionPlan for FilterExec {
579579
/// predicate's selectivity value can be determined for the incoming data.
580580
fn statistics_with_args(&self, args: &StatisticsArgs) -> Result<Arc<Statistics>> {
581581
let input_stats =
582-
Arc::unwrap_or_clone(args.child_stats_for(0, self.input.as_ref())?);
582+
Arc::unwrap_or_clone(args.child_stats_for(self.input.as_ref())?);
583583
let stats = Self::statistics_helper(
584584
&self.input.schema(),
585585
input_stats,

datafusion/physical-plan/src/joins/cross_join.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -386,9 +386,9 @@ impl ExecutionPlan for CrossJoinExec {
386386
// so it always needs overall stats (child_stats provides these).
387387
// Right side can have multiple partitions, so it needs per-partition
388388
// stats when a specific partition is requested.
389-
let left_stats = Arc::unwrap_or_clone(Arc::clone(&args.child_stats()[0]));
389+
let left_stats = Arc::unwrap_or_clone(args.child_stats_of(self.left.as_ref())?);
390390
let right_stats =
391-
Arc::unwrap_or_clone(args.child_stats_for(1, self.right.as_ref())?);
391+
Arc::unwrap_or_clone(args.child_stats_for(self.right.as_ref())?);
392392

393393
Ok(Arc::new(stats_cartesian_product(left_stats, right_stats)))
394394
}

0 commit comments

Comments
 (0)