Skip to content

Commit 8dff08a

Browse files
feat(ffi): do not panic in visit_scan_metadata
1 parent 3bcd274 commit 8dff08a

File tree

2 files changed

+10
-4
lines changed

2 files changed

+10
-4
lines changed

ffi/examples/read-table/read_table.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,11 @@ void do_visit_scan_metadata(void* engine_context, HandleSharedScanMetadata scan_
110110

111111
// Ask kernel to iterate each individual file and call us back with extracted metadata
112112
print_diag("Asking kernel to call us back for each scan row (file to read)\n");
113-
visit_scan_metadata(scan_metadata, engine_context, scan_row_callback);
113+
ExternResultNullableCvoid result = visit_scan_metadata(scan_metadata, context->engine, engine_context, scan_row_callback);
114+
if (result.tag != OkNullableCvoid) {
115+
printf("Error visiting scan metadata\n");
116+
exit(-1);
117+
}
114118
free_bool_slice(selection_vector);
115119
free_scan_metadata(scan_metadata);
116120
}

ffi/src/scan.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -499,19 +499,21 @@ struct ContextWrapper {
499499
#[no_mangle]
500500
pub unsafe extern "C" fn visit_scan_metadata(
501501
scan_metadata: Handle<SharedScanMetadata>,
502+
engine: Handle<SharedExternEngine>,
502503
engine_context: NullableCvoid,
503504
callback: CScanCallback,
504-
) {
505+
) -> ExternResult<NullableCvoid> {
506+
let engine = unsafe { engine.as_ref() };
505507
let scan_metadata = unsafe { scan_metadata.as_ref() };
506508
let context_wrapper = ContextWrapper {
507509
engine_context,
508510
callback,
509511
};
510512

511-
// TODO: return ExternResult to caller instead of panicking?
512513
scan_metadata
513514
.visit_scan_files(context_wrapper, rust_callback)
514-
.unwrap();
515+
.map(|_| None)
516+
.into_extern_result(&engine)
515517
}
516518

517519
#[cfg(test)]

0 commit comments

Comments
 (0)