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,