| 298 | } |
| 299 | |
| 300 | unsafe extern "C" fn clone_fn_wrapper(provider: &FFI_SessionRef) -> FFI_SessionRef { |
| 301 | unsafe { |
| 302 | let old_private_data = provider.private_data as *const SessionPrivateData; |
| 303 | |
| 304 | let private_data = Box::into_raw(Box::new(SessionPrivateData { |
| 305 | session: (*old_private_data).session, |
| 306 | runtime: (*old_private_data).runtime.clone(), |
| 307 | })) as *mut c_void; |
| 308 | |
| 309 | FFI_SessionRef { |
| 310 | session_id: session_id_fn_wrapper, |
| 311 | config: config_fn_wrapper, |
| 312 | create_physical_plan: create_physical_plan_fn_wrapper, |
| 313 | create_physical_expr: create_physical_expr_fn_wrapper, |
| 314 | scalar_functions: scalar_functions_fn_wrapper, |
| 315 | aggregate_functions: aggregate_functions_fn_wrapper, |
| 316 | window_functions: window_functions_fn_wrapper, |
| 317 | table_options: table_options_fn_wrapper, |
| 318 | default_table_options: default_table_options_fn_wrapper, |
| 319 | task_ctx: task_ctx_fn_wrapper, |
| 320 | logical_codec: provider.logical_codec.clone(), |
| 321 | |
| 322 | clone: clone_fn_wrapper, |
| 323 | release: release_fn_wrapper, |
| 324 | version: super::version, |
| 325 | private_data, |
| 326 | library_marker_id: crate::get_library_marker_id, |
| 327 | } |
| 328 | } |
| 329 | } |
| 330 | |
| 331 | impl Drop for FFI_SessionRef { |
| 332 | fn drop(&mut self) { |