MCPcopy Create free account
hub / github.com/apache/datafusion / call_with_args_wrapper

Function call_with_args_wrapper

datafusion/ffi/src/udtf.rs:134–173  ·  view source on GitHub ↗
(
    udtf: &FFI_TableFunction,
    args: SVec<u8>,
    session: FFI_SessionRef,
)

Source from the content-addressed store, hash-verified

132}
133
134unsafe extern "C" fn call_with_args_wrapper(
135 udtf: &FFI_TableFunction,
136 args: SVec<u8>,
137 session: FFI_SessionRef,
138) -> FFI_Result<FFI_TableProvider> {
139 let runtime = udtf.runtime();
140 let udtf_inner = udtf.inner();
141
142 let ctx: Arc<TaskContext> =
143 sresult_return!((&udtf.logical_codec.task_ctx_provider).try_into());
144 let codec: Arc<dyn LogicalExtensionCodec> = (&udtf.logical_codec).into();
145
146 let proto_filters = sresult_return!(LogicalExprList::decode(args.as_ref()));
147
148 let args = sresult_return!(parse_exprs(
149 proto_filters.expr.iter(),
150 ctx.as_ref(),
151 codec.as_ref()
152 ));
153
154 let mut foreign_session = None;
155 let session = sresult_return!(
156 session
157 .as_local()
158 .map(Ok::<&(dyn Session + Send + Sync), DataFusionError>)
159 .unwrap_or_else(|| {
160 foreign_session = Some(ForeignSession::try_from(&session)?);
161 Ok(foreign_session.as_ref().unwrap())
162 })
163 );
164 let table_provider = sresult_return!(
165 udtf_inner.call_with_args(TableFunctionArgs::new(&args, session))
166 );
167 FFI_Result::Ok(FFI_TableProvider::new_with_ffi_codec(
168 table_provider,
169 false,
170 runtime,
171 udtf.logical_codec.clone(),
172 ))
173}
174
175unsafe extern "C" fn release_fn_wrapper(udtf: &mut FFI_TableFunction) {
176 unsafe {

Callers

nothing calls this directly

Calls 4

runtimeMethod · 0.45
innerMethod · 0.45
intoMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…