Skip to content

Commit 1c29dfe

Browse files
committed
Avoid changing project_schema signature
1 parent 21b8a3f commit 1c29dfe

File tree

7 files changed

+18
-18
lines changed

7 files changed

+18
-18
lines changed

datafusion-examples/examples/custom_data_source/custom_datasource.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,7 @@ impl CustomExec {
202202
schema: SchemaRef,
203203
db: CustomDataSource,
204204
) -> Self {
205-
let projected_schema =
206-
project_schema(&schema, projections.map(AsRef::as_ref)).unwrap();
205+
let projected_schema = project_schema(&schema, projections).unwrap();
207206
let cache = Self::compute_properties(projected_schema.clone());
208207
Self {
209208
db,

datafusion/catalog-listing/src/table.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -522,7 +522,7 @@ impl TableProvider for ListingTable {
522522

523523
// if no files need to be read, return an `EmptyExec`
524524
if partitioned_file_lists.is_empty() {
525-
let projected_schema = project_schema(&self.schema(), projection.as_deref())?;
525+
let projected_schema = project_schema(&self.schema(), projection.as_ref())?;
526526
return Ok(ScanResult::new(Arc::new(EmptyExec::new(projected_schema))));
527527
}
528528

datafusion/common/src/stats.rs

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -391,10 +391,11 @@ impl Statistics {
391391
/// For example, if we had statistics for columns `{"a", "b", "c"}`,
392392
/// projecting to `vec![2, 1]` would return statistics for columns `{"c",
393393
/// "b"}`.
394-
pub fn project(mut self, projection: Option<&[usize]>) -> Self {
394+
pub fn project(mut self, projection: Option<impl AsRef<[usize]>>) -> Self {
395395
let Some(projection) = projection else {
396396
return self;
397397
};
398+
let projection = projection.as_ref();
398399

399400
#[expect(clippy::large_enum_variant)]
400401
enum Slot {
@@ -1066,28 +1067,29 @@ mod tests {
10661067

10671068
#[test]
10681069
fn test_project_none() {
1069-
let stats = make_stats(vec![10, 20, 30]).project(None);
1070+
let projection: Option<Vec<_>> = None;
1071+
let stats = make_stats(vec![10, 20, 30]).project(projection);
10701072
assert_eq!(stats, make_stats(vec![10, 20, 30]));
10711073
}
10721074

10731075
#[test]
10741076
fn test_project_empty() {
1075-
let projection: Option<&[_]> = Some(&[]);
1076-
let stats = make_stats(vec![10, 20, 30]).project(projection);
1077+
let projection = Some(vec![]);
1078+
let stats = make_stats(vec![10, 20, 30]).project(projection.as_ref());
10771079
assert_eq!(stats, make_stats(vec![]));
10781080
}
10791081

10801082
#[test]
10811083
fn test_project_swap() {
1082-
let projection: Option<&[_]> = Some(&[2, 1]);
1083-
let stats = make_stats(vec![10, 20, 30]).project(projection);
1084+
let projection = Some(vec![2, 1]);
1085+
let stats = make_stats(vec![10, 20, 30]).project(projection.as_ref());
10841086
assert_eq!(stats, make_stats(vec![30, 20]));
10851087
}
10861088

10871089
#[test]
10881090
fn test_project_repeated() {
1089-
let projection: Option<&[_]> = Some(&[1, 2, 1, 1, 0, 2]);
1090-
let stats = make_stats(vec![10, 20, 30]).project(projection);
1091+
let projection = Some(vec![1, 2, 1, 1, 0, 2]);
1092+
let stats = make_stats(vec![10, 20, 30]).project(projection.as_ref());
10911093
assert_eq!(stats, make_stats(vec![20, 30, 20, 20, 10, 30]));
10921094
}
10931095

datafusion/common/src/utils/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ use std::thread::available_parallelism;
5959
///
6060
/// // Pick columns 'c' and 'b'
6161
/// let projection = Some(vec![2, 1]);
62-
/// let projected_schema = project_schema(&schema, projection.as_deref()).unwrap();
62+
/// let projected_schema = project_schema(&schema, projection.as_ref()).unwrap();
6363
///
6464
/// let expected_schema = SchemaRef::new(Schema::new(vec![
6565
/// Field::new("c", DataType::Utf8, true),
@@ -70,10 +70,10 @@ use std::thread::available_parallelism;
7070
/// ```
7171
pub fn project_schema(
7272
schema: &SchemaRef,
73-
projection: Option<&[usize]>,
73+
projection: Option<impl AsRef<[usize]>>,
7474
) -> Result<SchemaRef> {
7575
let schema = match projection {
76-
Some(columns) => Arc::new(schema.project(columns)?),
76+
Some(columns) => Arc::new(schema.project(columns.as_ref())?),
7777
None => Arc::clone(schema),
7878
};
7979
Ok(schema)

datafusion/core/src/datasource/empty.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,8 +77,7 @@ impl TableProvider for EmptyTable {
7777
_limit: Option<usize>,
7878
) -> Result<Arc<dyn ExecutionPlan>> {
7979
// even though there is no data, projections apply
80-
let projected_schema =
81-
project_schema(&self.schema, projection.map(AsRef::as_ref))?;
80+
let projected_schema = project_schema(&self.schema, projection)?;
8281
Ok(Arc::new(
8382
EmptyExec::new(projected_schema).with_partitions(self.partitions),
8483
))

datafusion/core/tests/custom_sources_cases/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ impl CustomExecutionPlan {
8686
fn new(projection: Option<Vec<usize>>) -> Self {
8787
let schema = TEST_CUSTOM_SCHEMA_REF!();
8888
let schema =
89-
project_schema(&schema, projection.as_deref()).expect("projected schema");
89+
project_schema(&schema, projection.as_ref()).expect("projected schema");
9090
let cache = Self::compute_properties(schema);
9191
Self {
9292
projection,

datafusion/datasource/src/memory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ impl MemorySourceConfig {
262262
schema: SchemaRef,
263263
projection: Option<Vec<usize>>,
264264
) -> Result<Self> {
265-
let projected_schema = project_schema(&schema, projection.as_deref())?;
265+
let projected_schema = project_schema(&schema, projection.as_ref())?;
266266
Ok(Self {
267267
partitions: partitions.to_vec(),
268268
schema,

0 commit comments

Comments
 (0)