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

westonpace pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new 7423f0332c GH-33850: [C++] Allow Substrait's default extension 
provider to be configured (#34042)
7423f0332c is described below

commit 7423f0332cb11eb780f421c07bac71f87bf44a03
Author: rtpsw <[email protected]>
AuthorDate: Tue Feb 7 01:34:59 2023 +0200

    GH-33850: [C++] Allow Substrait's default extension provider to be 
configured (#34042)
    
    See #33850
    * Closes: #33850
    
    Authored-by: Yaron Gvili <[email protected]>
    Signed-off-by: Weston Pace <[email protected]>
---
 cpp/src/arrow/engine/substrait/options.cc | 16 ++++++++++++++--
 cpp/src/arrow/engine/substrait/options.h  |  7 ++++++-
 2 files changed, 20 insertions(+), 3 deletions(-)

diff --git a/cpp/src/arrow/engine/substrait/options.cc 
b/cpp/src/arrow/engine/substrait/options.cc
index 643ce2296a..2fd506d827 100644
--- a/cpp/src/arrow/engine/substrait/options.cc
+++ b/cpp/src/arrow/engine/substrait/options.cc
@@ -122,11 +122,23 @@ class DefaultExtensionProvider : public 
BaseExtensionProvider {
   }
 };
 
-std::shared_ptr<ExtensionProvider> 
ExtensionProvider::kDefaultExtensionProvider =
+namespace {
+
+std::shared_ptr<ExtensionProvider> g_default_extension_provider =
     std::make_shared<DefaultExtensionProvider>();
 
+std::mutex g_default_extension_provider_mutex;
+
+}  // namespace
+
 std::shared_ptr<ExtensionProvider> default_extension_provider() {
-  return ExtensionProvider::kDefaultExtensionProvider;
+  std::unique_lock<std::mutex> lock(g_default_extension_provider_mutex);
+  return g_default_extension_provider;
+}
+
+void set_default_extension_provider(const std::shared_ptr<ExtensionProvider>& 
provider) {
+  std::unique_lock<std::mutex> lock(g_default_extension_provider_mutex);
+  g_default_extension_provider = provider;
 }
 
 }  // namespace engine
diff --git a/cpp/src/arrow/engine/substrait/options.h 
b/cpp/src/arrow/engine/substrait/options.h
index bf32610ad4..35a4f70aa9 100644
--- a/cpp/src/arrow/engine/substrait/options.h
+++ b/cpp/src/arrow/engine/substrait/options.h
@@ -74,14 +74,19 @@ class ARROW_ENGINE_EXPORT ExtensionDetails {
 
 class ARROW_ENGINE_EXPORT ExtensionProvider {
  public:
-  static std::shared_ptr<ExtensionProvider> kDefaultExtensionProvider;
   virtual ~ExtensionProvider() = default;
   virtual Result<RelationInfo> MakeRel(const std::vector<DeclarationInfo>& 
inputs,
                                        const ExtensionDetails& ext_details,
                                        const ExtensionSet& ext_set) = 0;
 };
 
+/// \brief Get the default extension provider
 ARROW_ENGINE_EXPORT std::shared_ptr<ExtensionProvider> 
default_extension_provider();
+/// \brief Set the default extension provider
+///
+/// \param[in] provider the new provider to be set as default
+ARROW_ENGINE_EXPORT void set_default_extension_provider(
+    const std::shared_ptr<ExtensionProvider>& provider);
 
 /// Options that control the conversion between Substrait and Acero 
representations of a
 /// plan.

Reply via email to