Skip to content

Commit 815bbce

Browse files
Make file_source_statistics infallible
1 parent ab18711 commit 815bbce

File tree

5 files changed

+13
-32
lines changed

5 files changed

+13
-32
lines changed

datafusion/core/tests/physical_optimizer/test_utils.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,7 @@ pub(crate) fn parquet_exec_with_stats(file_size: u64) -> Arc<DataSourceExec> {
135135
.build();
136136

137137
assert_eq!(
138-
config
139-
.file_source
140-
.file_source_statistics(&config)
141-
.unwrap()
142-
.num_rows,
138+
config.file_source.file_source_statistics(&config).num_rows,
143139
Precision::Inexact(10000)
144140
);
145141
DataSourceExec::from_data_source(config)

datafusion/datasource-parquet/src/source.rs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -584,10 +584,7 @@ impl FileSource for ParquetSource {
584584
&self.metrics
585585
}
586586

587-
fn file_source_statistics(
588-
&self,
589-
config: &FileScanConfig,
590-
) -> datafusion_common::Result<Statistics> {
587+
fn file_source_statistics(&self, config: &FileScanConfig) -> Statistics {
591588
let statistics = config.file_source_projected_statistics.clone();
592589

593590
// When filters are pushed down, we have no way of knowing the exact statistics.
@@ -596,10 +593,10 @@ impl FileSource for ParquetSource {
596593
// Because filter pushdown may happen dynamically as long as there is a predicate
597594
// if we have *any* predicate applied, we can't guarantee the statistics are exact.
598595
if self.predicate().is_some() {
599-
Ok(statistics.to_inexact())
600-
} else {
601-
Ok(statistics)
596+
return statistics.to_inexact();
602597
}
598+
599+
statistics
603600
}
604601

605602
fn file_type(&self) -> &str {

datafusion/datasource/src/file.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ pub trait FileSource: Send + Sync {
6363
/// Return execution plan metrics
6464
fn metrics(&self) -> &ExecutionPlanMetricsSet;
6565
/// Return projected statistics
66-
fn file_source_statistics(&self, config: &FileScanConfig) -> Result<Statistics> {
67-
Ok(config.file_source_projected_statistics.clone())
66+
fn file_source_statistics(&self, config: &FileScanConfig) -> Statistics {
67+
config.file_source_projected_statistics.clone()
6868
}
6969
/// String representation of file source such as "csv", "json", "parquet"
7070
fn file_type(&self) -> &str;

datafusion/datasource/src/file_scan_config.rs

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -691,7 +691,7 @@ impl FileScanConfig {
691691
}
692692

693693
pub fn projected_stats(&self) -> Statistics {
694-
let statistics = self.file_source.file_source_statistics(self).unwrap();
694+
let statistics = self.file_source.file_source_statistics(self);
695695

696696
let table_cols_stats = self
697697
.projection_indices()
@@ -758,10 +758,7 @@ impl FileScanConfig {
758758
return (
759759
Arc::clone(&self.file_schema),
760760
self.constraints.clone(),
761-
self.file_source
762-
.file_source_statistics(self)
763-
.unwrap()
764-
.clone(),
761+
self.file_source.file_source_statistics(self).clone(),
765762
self.output_ordering.clone(),
766763
);
767764
}
@@ -993,7 +990,7 @@ impl Debug for FileScanConfig {
993990
write!(
994991
f,
995992
"statistics={:?}, ",
996-
self.file_source.file_source_statistics(self).unwrap()
993+
self.file_source.file_source_statistics(self)
997994
)?;
998995

999996
DisplayAs::fmt_as(self, DisplayFormatType::Verbose, f)?;
@@ -1584,7 +1581,7 @@ mod tests {
15841581
to_partition_cols(partition_cols.clone()),
15851582
);
15861583

1587-
let source_statistics = conf.file_source.file_source_statistics(&conf).unwrap();
1584+
let source_statistics = conf.file_source.file_source_statistics(&conf);
15881585
let conf_stats = conf.data_source_statistics().unwrap();
15891586

15901587
// projection should be reflected in the file source statistics
@@ -2218,34 +2215,27 @@ mod tests {
22182215

22192216
// Verify statistics are set to unknown
22202217
assert_eq!(
2221-
config
2222-
.file_source
2223-
.file_source_statistics(&config)
2224-
.unwrap()
2225-
.num_rows,
2218+
config.file_source.file_source_statistics(&config).num_rows,
22262219
Precision::Absent
22272220
);
22282221
assert_eq!(
22292222
config
22302223
.file_source
22312224
.file_source_statistics(&config)
2232-
.unwrap()
22332225
.total_byte_size,
22342226
Precision::Absent
22352227
);
22362228
assert_eq!(
22372229
config
22382230
.file_source
22392231
.file_source_statistics(&config)
2240-
.unwrap()
22412232
.column_statistics
22422233
.len(),
22432234
file_schema.fields().len()
22442235
);
22452236
for stat in config
22462237
.file_source
22472238
.file_source_statistics(&config)
2248-
.unwrap()
22492239
.column_statistics
22502240
{
22512241
assert_eq!(stat.distinct_count, Precision::Absent);

datafusion/proto/src/physical_plan/to_proto.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -523,9 +523,7 @@ pub fn serialize_file_scan_config(
523523

524524
Ok(protobuf::FileScanExecConf {
525525
file_groups,
526-
statistics: Some(
527-
(&conf.file_source.file_source_statistics(conf).unwrap()).into(),
528-
),
526+
statistics: Some((&conf.file_source.file_source_statistics(conf)).into()),
529527
limit: conf.limit.map(|l| protobuf::ScanLimit { limit: l as u32 }),
530528
projection: conf
531529
.projection

0 commit comments

Comments
 (0)