Skip to content

Commit 5d043f7

Browse files
wip
1 parent 3f00222 commit 5d043f7

2 files changed

Lines changed: 36 additions & 6 deletions

File tree

datafusion/ffi/src/physical_expr/mod.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,9 +698,9 @@ impl PhysicalExpr for ForeignPhysicalExpr {
698698
}
699699
}
700700

701-
#[allow(deprecated)]
702701
fn snapshot(&self) -> Result<Option<Arc<dyn PhysicalExpr>>> {
703702
unsafe {
703+
#[allow(deprecated)]
704704
let result = df_result!((self.expr.snapshot)(&self.expr))?;
705705
Ok(result
706706
.map(|expr| <Arc<dyn PhysicalExpr>>::from(&expr))
@@ -947,6 +947,23 @@ mod tests {
947947
assert_eq!(left, right);
948948
}
949949

950+
#[allow(deprecated)]
951+
#[test]
952+
fn ffi_physical_expr_snapshots() -> Result<(), DataFusionError> {
953+
let (original, foreign_expr) = create_test_expr();
954+
955+
let left = original.snapshot()?;
956+
let right = foreign_expr.snapshot()?;
957+
assert_eq!(left, right);
958+
959+
assert_eq!(
960+
original.snapshot_generation(),
961+
foreign_expr.snapshot_generation()
962+
);
963+
964+
Ok(())
965+
}
966+
950967
#[test]
951968
fn ffi_physical_expr_volatility() {
952969
let (original, foreign_expr) = create_test_expr();

datafusion/physical-expr/src/expressions/dynamic_filters.rs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -525,11 +525,6 @@ impl PhysicalExpr for DynamicFilterPhysicalExpr {
525525
self.render(f, |expr, f| expr.fmt_sql(f))
526526
}
527527

528-
#[allow(useless_deprecated, unused_attributes)]
529-
#[deprecated(
530-
since = "54.0.0",
531-
note = "downcast to `DynamicFilterPhysicalExpr` and call `current()` instead"
532-
)]
533528
fn snapshot(&self) -> Result<Option<Arc<dyn PhysicalExpr>>> {
534529
// Return the current expression as a snapshot.
535530
Ok(Some(self.current()?))
@@ -708,6 +703,24 @@ mod test {
708703
assert_eq!(&dynamic_filter.current().unwrap(), &new_expr);
709704
}
710705

706+
#[allow(deprecated)]
707+
#[test]
708+
fn test_snapshot() {
709+
let expr = lit(42) as Arc<dyn PhysicalExpr>;
710+
let dynamic_filter = DynamicFilterPhysicalExpr::new(vec![], Arc::clone(&expr));
711+
712+
// Take a snapshot of the current expression
713+
let snapshot = dynamic_filter.snapshot().unwrap();
714+
assert_eq!(snapshot, Some(expr));
715+
716+
// Update the current expression
717+
let new_expr = lit(100) as Arc<dyn PhysicalExpr>;
718+
dynamic_filter.update(Arc::clone(&new_expr)).unwrap();
719+
// Take another snapshot
720+
let snapshot = dynamic_filter.snapshot().unwrap();
721+
assert_eq!(snapshot, Some(new_expr));
722+
}
723+
711724
#[test]
712725
fn test_dynamic_filter_physical_expr_misbehaves_data_type_nullable() {
713726
let dynamic_filter =

0 commit comments

Comments
 (0)