This is an automated email from the ASF dual-hosted git repository.

JingsongLi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-rust.git


The following commit(s) were added to refs/heads/main by this push:
     new a3807cef [datafusion] Expose procedure execution for external 
integrations (#1217)
a3807cef is described below

commit a3807cef950a151d6e34e699b29e5d175d63a538
Author: Smith Cruise <[email protected]>
AuthorDate: Sun Oct 25 23:09:35 2026 +0800

    [datafusion] Expose procedure execution for external integrations (#1217)
---
 crates/integrations/datafusion/src/lib.rs        |  1 +
 crates/integrations/datafusion/src/procedures.rs | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/crates/integrations/datafusion/src/lib.rs 
b/crates/integrations/datafusion/src/lib.rs
index cfab74c0..84bbdd16 100644
--- a/crates/integrations/datafusion/src/lib.rs
+++ b/crates/integrations/datafusion/src/lib.rs
@@ -91,6 +91,7 @@ pub use full_text_search::{register_full_text_search, 
FullTextSearchFunction};
 pub use hybrid_search::{register_hybrid_search, HybridSearchFunction};
 pub use merge_condition::compile_merge_condition;
 pub use physical_plan::PaimonTableScan;
+pub use procedures::execute_procedure;
 pub use relation_planner::PaimonRelationPlanner;
 pub use sql_context::{SQLContext, SQLContextBuilder};
 pub use table::PaimonTableProvider;
diff --git a/crates/integrations/datafusion/src/procedures.rs 
b/crates/integrations/datafusion/src/procedures.rs
index 0f743224..385fda0c 100644
--- a/crates/integrations/datafusion/src/procedures.rs
+++ b/crates/integrations/datafusion/src/procedures.rs
@@ -311,11 +311,20 @@ pub async fn execute_call(
     let catalog = catalogs
         .get(catalog_name)
         .ok_or_else(|| DataFusionError::Plan(format!("Unknown catalog 
'{catalog_name}'")))?;
-    let args = extract_named_args(&func.args)?;
+    execute_procedure(ctx, catalog, catalog_name, &proc_name, &func.args).await
+}
 
-    reject_unknown_args(&proc_name, &args)?;
+pub async fn execute_procedure(
+    ctx: &SessionContext,
+    catalog: &Arc<dyn Catalog>,
+    catalog_name: &str,
+    proc_name: &str,
+    arguments: &FunctionArguments,
+) -> DFResult<DataFrame> {
+    let args = extract_named_args(arguments)?;
+    reject_unknown_args(proc_name, &args)?;
 
-    match proc_name.as_str() {
+    match proc_name {
         "create_tag" => proc_create_tag(ctx, catalog, catalog_name, 
&args).await,
         "delete_tag" => proc_delete_tag(ctx, catalog, catalog_name, 
&args).await,
         "rename_tag" => proc_rename_tag(ctx, catalog, catalog_name, 
&args).await,

Reply via email to