diff --git a/ffi/examples/read-table/read_table.c b/ffi/examples/read-table/read_table.c index 2fc992aef9..642d3f4778 100644 --- a/ffi/examples/read-table/read_table.c +++ b/ffi/examples/read-table/read_table.c @@ -110,7 +110,11 @@ void do_visit_scan_metadata(void* engine_context, HandleSharedScanMetadata scan_ // Ask kernel to iterate each individual file and call us back with extracted metadata print_diag("Asking kernel to call us back for each scan row (file to read)\n"); - visit_scan_metadata(scan_metadata, engine_context, scan_row_callback); + ExternResultNullableCvoid result = visit_scan_metadata(scan_metadata, context->engine, engine_context, scan_row_callback); + if (result.tag != OkNullableCvoid) { + printf("Error visiting scan metadata\n"); + exit(-1); + } free_bool_slice(selection_vector); free_scan_metadata(scan_metadata); } diff --git a/ffi/src/scan.rs b/ffi/src/scan.rs index 0b6165f985..fd7e059117 100644 --- a/ffi/src/scan.rs +++ b/ffi/src/scan.rs @@ -499,19 +499,21 @@ struct ContextWrapper { #[no_mangle] pub unsafe extern "C" fn visit_scan_metadata( scan_metadata: Handle, + engine: Handle, engine_context: NullableCvoid, callback: CScanCallback, -) { +) -> ExternResult { + let engine = unsafe { engine.as_ref() }; let scan_metadata = unsafe { scan_metadata.as_ref() }; let context_wrapper = ContextWrapper { engine_context, callback, }; - // TODO: return ExternResult to caller instead of panicking? scan_metadata .visit_scan_files(context_wrapper, rust_callback) - .unwrap(); + .map(|_| None) + .into_extern_result(&engine) } #[cfg(test)]