@@ -4,12 +4,11 @@ use std::sync::Arc;
44use std:: sync:: Mutex ;
55
66use delta_kernel:: arrow:: array:: { Array , ArrayData , RecordBatch , StructArray } ;
7- use delta_kernel:: arrow:: compute:: filter_record_batch;
87use delta_kernel:: arrow:: ffi:: to_ffi;
98use delta_kernel:: engine:: arrow_data:: ArrowEngineData ;
10- use delta_kernel:: scan:: ScanResult ;
119use delta_kernel:: table_changes:: scan:: TableChangesScan ;
1210use delta_kernel:: table_changes:: TableChanges ;
11+ use delta_kernel:: EngineData ;
1312use delta_kernel:: Error ;
1413use delta_kernel:: { DeltaResult , Version } ;
1514use delta_kernel_ffi_macros:: handle_descriptor;
@@ -238,8 +237,10 @@ pub unsafe extern "C" fn table_changes_scan_physical_schema(
238237 table_changes_scan. physical_schema ( ) . clone ( ) . into ( )
239238}
240239
240+ type TableChangesData = Mutex < Box < dyn Iterator < Item = DeltaResult < Box < dyn EngineData > > > + Send > > ;
241+
241242pub struct ScanTableChangesIterator {
242- data : Mutex < Box < dyn Iterator < Item = DeltaResult < ScanResult > > + Send > > ,
243+ data : TableChangesData ,
243244 engine : Arc < dyn ExternEngine > ,
244245}
245246
@@ -314,22 +315,16 @@ fn scan_table_changes_next_impl(data: &ScanTableChangesIterator) -> DeltaResult<
314315 . lock ( )
315316 . map_err ( |_| Error :: generic ( "poisoned scan table changes iterator mutex" ) ) ?;
316317
317- let Some ( scan_result ) = data. next ( ) . transpose ( ) ? else {
318+ let Some ( data ) = data. next ( ) . transpose ( ) ? else {
318319 return Ok ( ArrowFFIData :: empty ( ) ) ;
319320 } ;
320321
321- let mask = scan_result. full_mask ( ) ;
322- let data = scan_result. raw_data ?;
323- let mut record_batch: RecordBatch = data
322+ let record_batch: RecordBatch = data
324323 . into_any ( )
325324 . downcast :: < ArrowEngineData > ( )
326325 . map_err ( |_| delta_kernel:: Error :: EngineDataType ( "ArrowEngineData" . to_string ( ) ) ) ?
327326 . into ( ) ;
328327
329- if let Some ( mask) = mask {
330- record_batch = filter_record_batch ( & record_batch, & mask. into ( ) ) ?;
331- }
332-
333328 let batch_struct_array: StructArray = record_batch. into ( ) ;
334329 let array_data: ArrayData = batch_struct_array. into_data ( ) ;
335330 let ( out_array, out_schema) = to_ffi ( & array_data) ?;
@@ -485,17 +480,7 @@ mod tests {
485480 ) -> DeltaResult < Vec < RecordBatch > > {
486481 let scan_results = scan. execute ( engine) ?;
487482 scan_results
488- . map ( |scan_result| -> DeltaResult < _ > {
489- let scan_result = scan_result?;
490- let mask = scan_result. full_mask ( ) ;
491- let data = scan_result. raw_data ?;
492- let record_batch = to_arrow ( data) ?;
493- if let Some ( mask) = mask {
494- Ok ( filter_record_batch ( & record_batch, & mask. into ( ) ) ?)
495- } else {
496- Ok ( record_batch)
497- }
498- } )
483+ . map ( |data| -> DeltaResult < _ > { to_arrow ( data?) } )
499484 . try_collect ( )
500485 }
501486
0 commit comments