From f69086f72c64aee6799d49e7ffcf4f134053ac03 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Tue, 6 Oct 2026 17:33:30 +0200 Subject: [PATCH 1/6] Fix clippy lint error --- ffi/src/table_changes.rs | 2 +- kernel/src/actions/visitors.rs | 2 +- kernel/src/engine/parquet_row_group_skipping.rs | 1 + kernel/src/schema/mod.rs | 1 + 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ffi/src/table_changes.rs b/ffi/src/table_changes.rs index 1358961e16..7dad60dbae 100644 --- a/ffi/src/table_changes.rs +++ b/ffi/src/table_changes.rs @@ -22,7 +22,7 @@ use crate::expressions::kernel_visitor::{unwrap_kernel_predicate, KernelExpressi use crate::scan::EnginePredicate; use crate::{ catch_unwind_into_extern_result, kernel_string_slice, unwrap_and_parse_path_as_url, - AllocateStringFn, ExternEngine, ExternResult, IntoExternResult, KernelStringSlice, + AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, NullableCvoid, SharedExternEngine, SharedSchema, }; diff --git a/kernel/src/actions/visitors.rs b/kernel/src/actions/visitors.rs index 370a796a54..3334d3148e 100644 --- a/kernel/src/actions/visitors.rs +++ b/kernel/src/actions/visitors.rs @@ -826,7 +826,7 @@ mod tests { }; let expected = vec![add1, add2, add3]; assert_eq!(add_visitor.adds.len(), expected.len()); - for (add, expected) in add_visitor.adds.into_iter().zip(expected.into_iter()) { + for (add, expected) in add_visitor.adds.into_iter().zip(expected) { assert_eq!(add, expected); } } diff --git a/kernel/src/engine/parquet_row_group_skipping.rs b/kernel/src/engine/parquet_row_group_skipping.rs index bdef0e13f2..5d885d8b39 100644 --- a/kernel/src/engine/parquet_row_group_skipping.rs +++ b/kernel/src/engine/parquet_row_group_skipping.rs @@ -208,6 +208,7 @@ impl ParquetStatsProvider for RowGroupFilter<'_> { // physical name mapping has been performed. Because we currently lack both the // validation and the name mapping support, we must disable this optimization for the // time being. See https://github.com/delta-io/delta-kernel-rs/issues/434. + #[allow(unknown_lints, clippy::some_filter)] return Some(self.get_parquet_rowcount_stat()).filter(|_| false); }; diff --git a/kernel/src/schema/mod.rs b/kernel/src/schema/mod.rs index 5095420498..4d0d737dbe 100644 --- a/kernel/src/schema/mod.rs +++ b/kernel/src/schema/mod.rs @@ -1110,6 +1110,7 @@ impl ColumnNamesAndTypes { (&self.0, &self.1) } + #[allow(dead_code)] pub(crate) fn extend(&mut self, other: ColumnNamesAndTypes) { self.0.extend(other.0); self.1.extend(other.1); From 6d1990aa6255ae9ea164562e03ddce9d13a6eb69 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Tue, 6 Oct 2026 17:39:36 +0200 Subject: [PATCH 2/6] Fix formatting (cargo fmt) Co-authored-by: Cursor --- ffi/src/lib.rs | 13 ++++++++++--- ffi/src/scan.rs | 1 - ffi/src/table_changes.rs | 4 ++-- kernel/src/scan/mod.rs | 5 ++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index 872df04487..2d43dea25a 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -522,7 +522,11 @@ pub unsafe extern "C" fn builder_build( let allocate_fn = builder_box.allocate_fn; unsafe { catch_unwind_into_extern_result(&allocate_fn, move || { - get_default_engine_impl(builder_box.url, builder_box.options, builder_box.allocate_fn) + get_default_engine_impl( + builder_box.url, + builder_box.options, + builder_box.allocate_fn, + ) }) } } @@ -555,8 +559,11 @@ unsafe fn catch_unwind_into_extern_result( alloc: &dyn AllocateError, f: impl FnOnce() -> DeltaResult, ) -> ExternResult { - let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) - .unwrap_or_else(|_| Err(Error::generic("delta-kernel-rs panicked across the FFI boundary"))); + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)).unwrap_or_else(|_| { + Err(Error::generic( + "delta-kernel-rs panicked across the FFI boundary", + )) + }); unsafe { result.into_extern_result(alloc) } } diff --git a/ffi/src/scan.rs b/ffi/src/scan.rs index ba5c50bb03..64f9e06b9c 100644 --- a/ffi/src/scan.rs +++ b/ffi/src/scan.rs @@ -624,5 +624,4 @@ mod tests { let final_map: HashMap = *unsafe { Box::from_raw(map_ptr) }; assert_eq!(test_map, final_map); } - } diff --git a/ffi/src/table_changes.rs b/ffi/src/table_changes.rs index 7dad60dbae..858d1390f0 100644 --- a/ffi/src/table_changes.rs +++ b/ffi/src/table_changes.rs @@ -22,8 +22,8 @@ use crate::expressions::kernel_visitor::{unwrap_kernel_predicate, KernelExpressi use crate::scan::EnginePredicate; use crate::{ catch_unwind_into_extern_result, kernel_string_slice, unwrap_and_parse_path_as_url, - AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, - NullableCvoid, SharedExternEngine, SharedSchema, + AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, NullableCvoid, + SharedExternEngine, SharedSchema, }; #[handle_descriptor(target=TableChanges, mutable=true, sized=true)] diff --git a/kernel/src/scan/mod.rs b/kernel/src/scan/mod.rs index 81b0dbd95d..259044e760 100644 --- a/kernel/src/scan/mod.rs +++ b/kernel/src/scan/mod.rs @@ -589,7 +589,10 @@ impl Scan { &self, engine: Arc, ) -> DeltaResult>>> { - fn scan_metadata_callback(batches: &mut Vec, file: state::ScanFile) -> bool { + fn scan_metadata_callback( + batches: &mut Vec, + file: state::ScanFile, + ) -> bool { batches.push(file); true } From 5a7eee8193f747d5997ac1c12f6e639340093f11 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Tue, 6 Oct 2026 17:39:36 +0200 Subject: [PATCH 3/6] Fix formatting (cargo fmt) --- ffi/src/lib.rs | 13 ++++++++++--- ffi/src/scan.rs | 1 - ffi/src/table_changes.rs | 4 ++-- kernel/src/scan/mod.rs | 5 ++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index 872df04487..2d43dea25a 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -522,7 +522,11 @@ pub unsafe extern "C" fn builder_build( let allocate_fn = builder_box.allocate_fn; unsafe { catch_unwind_into_extern_result(&allocate_fn, move || { - get_default_engine_impl(builder_box.url, builder_box.options, builder_box.allocate_fn) + get_default_engine_impl( + builder_box.url, + builder_box.options, + builder_box.allocate_fn, + ) }) } } @@ -555,8 +559,11 @@ unsafe fn catch_unwind_into_extern_result( alloc: &dyn AllocateError, f: impl FnOnce() -> DeltaResult, ) -> ExternResult { - let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) - .unwrap_or_else(|_| Err(Error::generic("delta-kernel-rs panicked across the FFI boundary"))); + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)).unwrap_or_else(|_| { + Err(Error::generic( + "delta-kernel-rs panicked across the FFI boundary", + )) + }); unsafe { result.into_extern_result(alloc) } } diff --git a/ffi/src/scan.rs b/ffi/src/scan.rs index ba5c50bb03..64f9e06b9c 100644 --- a/ffi/src/scan.rs +++ b/ffi/src/scan.rs @@ -624,5 +624,4 @@ mod tests { let final_map: HashMap = *unsafe { Box::from_raw(map_ptr) }; assert_eq!(test_map, final_map); } - } diff --git a/ffi/src/table_changes.rs b/ffi/src/table_changes.rs index 7dad60dbae..858d1390f0 100644 --- a/ffi/src/table_changes.rs +++ b/ffi/src/table_changes.rs @@ -22,8 +22,8 @@ use crate::expressions::kernel_visitor::{unwrap_kernel_predicate, KernelExpressi use crate::scan::EnginePredicate; use crate::{ catch_unwind_into_extern_result, kernel_string_slice, unwrap_and_parse_path_as_url, - AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, - NullableCvoid, SharedExternEngine, SharedSchema, + AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, NullableCvoid, + SharedExternEngine, SharedSchema, }; #[handle_descriptor(target=TableChanges, mutable=true, sized=true)] diff --git a/kernel/src/scan/mod.rs b/kernel/src/scan/mod.rs index 81b0dbd95d..259044e760 100644 --- a/kernel/src/scan/mod.rs +++ b/kernel/src/scan/mod.rs @@ -589,7 +589,10 @@ impl Scan { &self, engine: Arc, ) -> DeltaResult>>> { - fn scan_metadata_callback(batches: &mut Vec, file: state::ScanFile) -> bool { + fn scan_metadata_callback( + batches: &mut Vec, + file: state::ScanFile, + ) -> bool { batches.push(file); true } From 65d8dac184fb2ac06706a8af0a571a6c3e7e79b1 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Tue, 6 Oct 2026 18:32:39 +0200 Subject: [PATCH 4/6] Fix formatting (cargo fmt) --- ffi/src/lib.rs | 13 ++++++++++--- ffi/src/scan.rs | 1 - ffi/src/table_changes.rs | 4 ++-- kernel/src/scan/mod.rs | 5 ++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs index 872df04487..2d43dea25a 100644 --- a/ffi/src/lib.rs +++ b/ffi/src/lib.rs @@ -522,7 +522,11 @@ pub unsafe extern "C" fn builder_build( let allocate_fn = builder_box.allocate_fn; unsafe { catch_unwind_into_extern_result(&allocate_fn, move || { - get_default_engine_impl(builder_box.url, builder_box.options, builder_box.allocate_fn) + get_default_engine_impl( + builder_box.url, + builder_box.options, + builder_box.allocate_fn, + ) }) } } @@ -555,8 +559,11 @@ unsafe fn catch_unwind_into_extern_result( alloc: &dyn AllocateError, f: impl FnOnce() -> DeltaResult, ) -> ExternResult { - let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)) - .unwrap_or_else(|_| Err(Error::generic("delta-kernel-rs panicked across the FFI boundary"))); + let result = std::panic::catch_unwind(std::panic::AssertUnwindSafe(f)).unwrap_or_else(|_| { + Err(Error::generic( + "delta-kernel-rs panicked across the FFI boundary", + )) + }); unsafe { result.into_extern_result(alloc) } } diff --git a/ffi/src/scan.rs b/ffi/src/scan.rs index ba5c50bb03..64f9e06b9c 100644 --- a/ffi/src/scan.rs +++ b/ffi/src/scan.rs @@ -624,5 +624,4 @@ mod tests { let final_map: HashMap = *unsafe { Box::from_raw(map_ptr) }; assert_eq!(test_map, final_map); } - } diff --git a/ffi/src/table_changes.rs b/ffi/src/table_changes.rs index 7dad60dbae..858d1390f0 100644 --- a/ffi/src/table_changes.rs +++ b/ffi/src/table_changes.rs @@ -22,8 +22,8 @@ use crate::expressions::kernel_visitor::{unwrap_kernel_predicate, KernelExpressi use crate::scan::EnginePredicate; use crate::{ catch_unwind_into_extern_result, kernel_string_slice, unwrap_and_parse_path_as_url, - AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, - NullableCvoid, SharedExternEngine, SharedSchema, + AllocateStringFn, ExternEngine, ExternResult, KernelStringSlice, NullableCvoid, + SharedExternEngine, SharedSchema, }; #[handle_descriptor(target=TableChanges, mutable=true, sized=true)] diff --git a/kernel/src/scan/mod.rs b/kernel/src/scan/mod.rs index 81b0dbd95d..259044e760 100644 --- a/kernel/src/scan/mod.rs +++ b/kernel/src/scan/mod.rs @@ -589,7 +589,10 @@ impl Scan { &self, engine: Arc, ) -> DeltaResult>>> { - fn scan_metadata_callback(batches: &mut Vec, file: state::ScanFile) -> bool { + fn scan_metadata_callback( + batches: &mut Vec, + file: state::ScanFile, + ) -> bool { batches.push(file); true } From d2bdbbccc583f0f7a29d66f97c6cee4261ad39d7 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Tue, 6 Oct 2026 22:59:30 +0200 Subject: [PATCH 5/6] Fixes for ffi and arrow_integration_test --- ffi/examples/read-table/read_table.c | 8 ++++---- kernel/src/actions/visitors.rs | 5 +++++ 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ffi/examples/read-table/read_table.c b/ffi/examples/read-table/read_table.c index d2ce1cce33..964dbc663f 100644 --- a/ffi/examples/read-table/read_table.c +++ b/ffi/examples/read-table/read_table.c @@ -54,7 +54,7 @@ bool scan_row_callback( int64_t mod_time, const Stats* stats, HandleSharedDvInfo dv_info, - OptionalValue_HandleSharedExpression transform, + OptionalValueHandleSharedExpression transform, const CStringMap* partition_values) { (void)mod_time; // not using this at the moment @@ -74,7 +74,7 @@ bool scan_row_callback( if (selection_vector_res.tag != OkKernelBoolSlice) { printf("Could not get selection vector from kernel\n"); free_kernel_dv_info(dv_info); - if (transform.tag == OptionalValue_HandleSharedExpression_Tag_Some) { + if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { free_kernel_expression(transform.some._0); } exit(-1); @@ -94,7 +94,7 @@ bool scan_row_callback( print_partition_info(context, partition_values); #ifdef PRINT_ARROW_DATA const Expression* transform_expr = NULL; - if (transform.tag == OptionalValue_HandleSharedExpression_Tag_Some) { + if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { transform_expr = (const Expression*)transform.some._0; } c_read_parquet_file(context, path, selection_vector, transform_expr); @@ -103,7 +103,7 @@ bool scan_row_callback( context->partition_values = NULL; free_kernel_dv_info(dv_info); - if (transform.tag == OptionalValue_HandleSharedExpression_Tag_Some) { + if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { free_kernel_expression(transform.some._0); } diff --git a/kernel/src/actions/visitors.rs b/kernel/src/actions/visitors.rs index 3334d3148e..919817f1ef 100644 --- a/kernel/src/actions/visitors.rs +++ b/kernel/src/actions/visitors.rs @@ -98,6 +98,7 @@ pub(crate) struct AddVisitor { } impl AddVisitor { + #[allow(dead_code)] #[internal_api] fn visit_add<'a>( row_index: usize, @@ -141,6 +142,7 @@ impl AddVisitor { clustering_provider, }) } + #[allow(dead_code)] pub(crate) fn names_and_types() -> (&'static [ColumnName], &'static [DataType]) { static NAMES_AND_TYPES: LazyLock = LazyLock::new(|| Add::to_schema().leaves(ADD_NAME)); @@ -171,6 +173,7 @@ pub(crate) struct RemoveVisitor { } impl RemoveVisitor { + #[allow(dead_code)] #[internal_api] pub(crate) fn visit_remove<'a>( row_index: usize, @@ -217,6 +220,7 @@ impl RemoveVisitor { default_row_commit_version, }) } + #[allow(dead_code)] pub(crate) fn names_and_types() -> (&'static [ColumnName], &'static [DataType]) { static NAMES_AND_TYPES: LazyLock = LazyLock::new(|| Remove::to_schema().leaves(REMOVE_NAME)); @@ -247,6 +251,7 @@ pub(crate) struct CdcVisitor { } impl CdcVisitor { + #[allow(dead_code)] #[internal_api] pub(crate) fn visit_cdc<'a>( row_index: usize, From 002ff1885703eac41c1103aabe9be8a9b092b182 Mon Sep 17 00:00:00 2001 From: Kanthi Subramanian Date: Wed, 7 Oct 2026 00:31:43 +0200 Subject: [PATCH 6/6] Fixes for clippy lint errors --- ffi/examples/read-table/read_table.c | 12 +++++------ ffi/src/table_changes.rs | 7 +++++-- kernel/tests/read.rs | 30 ++++++++++++++-------------- test-utils/src/lib.rs | 14 ++++++------- 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/ffi/examples/read-table/read_table.c b/ffi/examples/read-table/read_table.c index 964dbc663f..438a96fa9e 100644 --- a/ffi/examples/read-table/read_table.c +++ b/ffi/examples/read-table/read_table.c @@ -74,8 +74,8 @@ bool scan_row_callback( if (selection_vector_res.tag != OkKernelBoolSlice) { printf("Could not get selection vector from kernel\n"); free_kernel_dv_info(dv_info); - if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { - free_kernel_expression(transform.some._0); + if (transform.tag == SomeHandleSharedExpression) { + free_kernel_expression(transform.some); } exit(-1); } @@ -94,8 +94,8 @@ bool scan_row_callback( print_partition_info(context, partition_values); #ifdef PRINT_ARROW_DATA const Expression* transform_expr = NULL; - if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { - transform_expr = (const Expression*)transform.some._0; + if (transform.tag == SomeHandleSharedExpression) { + transform_expr = (const Expression*)transform.some; } c_read_parquet_file(context, path, selection_vector, transform_expr); #endif @@ -103,8 +103,8 @@ bool scan_row_callback( context->partition_values = NULL; free_kernel_dv_info(dv_info); - if (transform.tag == OptionalValueHandleSharedExpression_Tag_Some) { - free_kernel_expression(transform.some._0); + if (transform.tag == SomeHandleSharedExpression) { + free_kernel_expression(transform.some); } return true; // Continue iteration diff --git a/ffi/src/table_changes.rs b/ffi/src/table_changes.rs index 858d1390f0..00d12e9c8e 100644 --- a/ffi/src/table_changes.rs +++ b/ffi/src/table_changes.rs @@ -471,8 +471,11 @@ mod tests { pub fn generate_batch_with_id(start_i: i32) -> Result { generate_batch(vec![ - ("id", vec![start_i, start_i + 1, start_i + 2].into_array()), - ("val", vec!["a", "b", "c"].into_array()), + ( + "id", + vec![start_i, start_i + 1, start_i + 2].into_arrow_array(), + ), + ("val", vec!["a", "b", "c"].into_arrow_array()), ]) } diff --git a/kernel/tests/read.rs b/kernel/tests/read.rs index 3360ac222c..ded275a781 100644 --- a/kernel/tests/read.rs +++ b/kernel/tests/read.rs @@ -198,8 +198,8 @@ async fn stats() -> Result<(), Box> { let batch1 = generate_simple_batch()?; let batch2 = generate_batch(vec![ - ("id", vec![5, 7].into_array()), - ("val", vec!["e", "g"].into_array()), + ("id", vec![5, 7].into_arrow_array()), + ("val", vec!["e", "g"].into_arrow_array()), ])?; let storage = Arc::new(InMemory::new()); // valid commit with min/max (0, 2) @@ -996,7 +996,7 @@ fn with_predicate_and_removes() -> Result<(), Box> { #[tokio::test] async fn predicate_on_non_nullable_partition_column() -> Result<(), Box> { // Test for https://github.com/delta-io/delta-kernel-rs/issues/698 - let batch = generate_batch(vec![("val", vec!["a", "b", "c"].into_array())])?; + let batch = generate_batch(vec![("val", vec!["a", "b", "c"].into_arrow_array())])?; let storage = Arc::new(InMemory::new()); let actions = [ @@ -1048,8 +1048,8 @@ async fn predicate_on_non_nullable_partition_column() -> Result<(), Box Result<(), Box> { - let batch_1 = generate_batch(vec![("val", vec!["a", "b", "c"].into_array())])?; - let batch_2 = generate_batch(vec![("val", vec!["d", "e", "f"].into_array())])?; + let batch_1 = generate_batch(vec![("val", vec!["a", "b", "c"].into_arrow_array())])?; + let batch_2 = generate_batch(vec![("val", vec!["d", "e", "f"].into_arrow_array())])?; let storage = Arc::new(InMemory::new()); let actions = [ @@ -1319,16 +1319,16 @@ fn unshredded_variant_table() -> Result<(), Box> { async fn test_row_index_metadata_column() -> Result<(), Box> { // Setup up an in-memory table with different numbers of rows in each file let batch1 = generate_batch(vec![ - ("id", vec![1i32, 2, 3, 4, 5].into_array()), - ("value", vec!["a", "b", "c", "d", "e"].into_array()), + ("id", vec![1i32, 2, 3, 4, 5].into_arrow_array()), + ("value", vec!["a", "b", "c", "d", "e"].into_arrow_array()), ])?; let batch2 = generate_batch(vec![ - ("id", vec![10i32, 20, 30].into_array()), - ("value", vec!["x", "y", "z"].into_array()), + ("id", vec![10i32, 20, 30].into_arrow_array()), + ("value", vec!["x", "y", "z"].into_arrow_array()), ])?; let batch3 = generate_batch(vec![ - ("id", vec![100i32, 200, 300, 400].into_array()), - ("value", vec!["p", "q", "r", "s"].into_array()), + ("id", vec![100i32, 200, 300, 400].into_arrow_array()), + ("value", vec!["p", "q", "r", "s"].into_arrow_array()), ])?; let storage = Arc::new(InMemory::new()); @@ -1418,12 +1418,12 @@ async fn test_file_path_metadata_column() -> Result<(), Box ArrayRef; + fn into_arrow_array(self) -> ArrayRef; } impl IntoArray for Vec { - fn into_array(self) -> ArrayRef { + fn into_arrow_array(self) -> ArrayRef { Arc::new(Int32Array::from(self)) } } impl IntoArray for Vec { - fn into_array(self) -> ArrayRef { + fn into_arrow_array(self) -> ArrayRef { Arc::new(Int64Array::from(self)) } } impl IntoArray for Vec { - fn into_array(self) -> ArrayRef { + fn into_arrow_array(self) -> ArrayRef { Arc::new(BooleanArray::from(self)) } } impl IntoArray for Vec<&'static str> { - fn into_array(self) -> ArrayRef { + fn into_arrow_array(self) -> ArrayRef { Arc::new(StringArray::from(self)) } } @@ -179,8 +179,8 @@ where /// respectively pub fn generate_simple_batch() -> Result { generate_batch(vec![ - ("id", vec![1, 2, 3].into_array()), - ("val", vec!["a", "b", "c"].into_array()), + ("id", vec![1, 2, 3].into_arrow_array()), + ("val", vec!["a", "b", "c"].into_arrow_array()), ]) }