Skip to content

Commit 98ea1ba

Browse files
committed
Clone arc Schema to avoid borrow on plan
1 parent b7c6baa commit 98ea1ba

File tree

1 file changed

+5
-12
lines changed
  • datafusion/core/src/dataframe

1 file changed

+5
-12
lines changed

datafusion/core/src/dataframe/mod.rs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -428,17 +428,14 @@ impl DataFrame {
428428
/// ```
429429
///
430430
pub fn drop_columns(self, columns: &[&str]) -> Result<DataFrame> {
431+
let schema = Arc::clone(self.plan.schema());
431432
let fields_to_drop = columns
432433
.iter()
433-
.map(|name| {
434-
self.plan
435-
.schema()
436-
.qualified_field_with_unqualified_name(name)
437-
})
434+
.map(|name| schema.qualified_field_with_unqualified_name(name))
438435
.filter(|r| r.is_ok())
439436
.map(|r| {
440437
let (qualifier, field) = r.unwrap();
441-
(qualifier.cloned(), field.clone())
438+
(qualifier, field)
442439
})
443440
.collect::<Vec<_>>();
444441
self.drop_qualified_columns(&fields_to_drop)
@@ -453,20 +450,16 @@ impl DataFrame {
453450
/// * `fields_to_drop` - A slice of tuples containing the qualifier and field to drop
454451
pub fn drop_qualified_columns(
455452
self,
456-
fields_to_drop: &[(Option<TableReference>, Field)],
453+
fields_to_drop: &[(Option<&TableReference>, &Field)],
457454
) -> Result<DataFrame> {
458-
let field_references_to_drop = fields_to_drop
459-
.iter()
460-
.map(|(qualifier, field)| (qualifier.as_ref(), field))
461-
.collect::<Vec<_>>();
462455
let expr: Vec<Expr> = self
463456
.plan
464457
.schema()
465458
.fields()
466459
.into_iter()
467460
.enumerate()
468461
.map(|(idx, _)| self.plan.schema().qualified_field(idx))
469-
.filter(|(qualifier, f)| !field_references_to_drop.contains(&(*qualifier, f)))
462+
.filter(|(qualifier, f)| !fields_to_drop.contains(&(*qualifier, f)))
470463
.map(|(qualifier, field)| Expr::Column(Column::from((qualifier, field))))
471464
.collect();
472465
self.select(expr)

0 commit comments

Comments
 (0)