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

jonah pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 259443d66f Minor: consolidate ConfigExtension example into API docs 
(#13954)
259443d66f is described below

commit 259443d66f609e7b440537292ad530dcbed31f96
Author: Andrew Lamb <[email protected]>
AuthorDate: Wed Jan 1 22:26:04 2025 -0500

    Minor: consolidate ConfigExtension example into API docs (#13954)
    
    * Update examples README.md
    
    * Minor: consolidate ConfigExtension example into API docs
    
    * more docs
    
    * Remove update
    
    * clippy
    
    * Fix issue with ExtensionsOptions docs
---
 datafusion-examples/examples/config_extension.rs | 52 ------------------------
 datafusion/common/src/config.rs                  | 48 +++++++++++++++++++++-
 2 files changed, 46 insertions(+), 54 deletions(-)

diff --git a/datafusion-examples/examples/config_extension.rs 
b/datafusion-examples/examples/config_extension.rs
deleted file mode 100644
index b9f83f91ce..0000000000
--- a/datafusion-examples/examples/config_extension.rs
+++ /dev/null
@@ -1,52 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements.  See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership.  The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License.  You may obtain a copy of the License at
-//
-//   http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied.  See the License for the
-// specific language governing permissions and limitations
-// under the License.
-
-//! This example demonstrates how to extend the DataFusion configs with custom 
extensions.
-
-use datafusion::{
-    common::{config::ConfigExtension, extensions_options},
-    config::ConfigOptions,
-};
-
-extensions_options! {
-    /// My own config options.
-    pub struct MyConfig {
-        /// Should "foo" be replaced by "bar"?
-        pub foo_to_bar: bool, default = true
-
-        /// How many "baz" should be created?
-        pub baz_count: usize, default = 1337
-    }
-}
-
-impl ConfigExtension for MyConfig {
-    const PREFIX: &'static str = "my_config";
-}
-
-fn main() {
-    // set up config struct and register extension
-    let mut config = ConfigOptions::default();
-    config.extensions.insert(MyConfig::default());
-
-    // overwrite config default
-    config.set("my_config.baz_count", "42").unwrap();
-
-    // check config state
-    let my_config = config.extensions.get::<MyConfig>().unwrap();
-    assert!(my_config.foo_to_bar,);
-    assert_eq!(my_config.baz_count, 42,);
-}
diff --git a/datafusion/common/src/config.rs b/datafusion/common/src/config.rs
index 4da6921ba5..8d2742aaaf 100644
--- a/datafusion/common/src/config.rs
+++ b/datafusion/common/src/config.rs
@@ -895,8 +895,48 @@ impl ConfigOptions {
     }
 }
 
-/// [`ConfigExtension`] provides a mechanism to store third-party 
configuration within DataFusion
+/// [`ConfigExtension`] provides a mechanism to store third-party configuration
+/// within DataFusion [`ConfigOptions`]
 ///
+/// This mechanism can be used to pass configuration to user defined functions
+/// or optimizer passes
+///
+/// # Example
+/// ```
+/// use datafusion_common::{
+///     config::ConfigExtension, extensions_options,
+///     config::ConfigOptions,
+/// };
+///  // Define a new configuration struct using the `extensions_options` macro
+///  extensions_options! {
+///     /// My own config options.
+///     pub struct MyConfig {
+///         /// Should "foo" be replaced by "bar"?
+///         pub foo_to_bar: bool, default = true
+///
+///         /// How many "baz" should be created?
+///         pub baz_count: usize, default = 1337
+///     }
+///  }
+///
+///  impl ConfigExtension for MyConfig {
+///     const PREFIX: &'static str = "my_config";
+///  }
+///
+///  // set up config struct and register extension
+///  let mut config = ConfigOptions::default();
+///  config.extensions.insert(MyConfig::default());
+///
+///  // overwrite config default
+///  config.set("my_config.baz_count", "42").unwrap();
+///
+///  // check config state
+///  let my_config = config.extensions.get::<MyConfig>().unwrap();
+///  assert!(my_config.foo_to_bar,);
+///  assert_eq!(my_config.baz_count, 42,);
+/// ```
+///
+/// # Note:
 /// Unfortunately associated constants are not currently object-safe, and so 
this
 /// extends the object-safe [`ExtensionOptions`]
 pub trait ConfigExtension: ExtensionOptions {
@@ -906,7 +946,9 @@ pub trait ConfigExtension: ExtensionOptions {
     const PREFIX: &'static str;
 }
 
-/// An object-safe API for storing arbitrary configuration
+/// An object-safe API for storing arbitrary configuration.
+///
+/// See [`ConfigExtension`] for user defined configuration
 pub trait ExtensionOptions: Send + Sync + fmt::Debug + 'static {
     /// Return `self` as [`Any`]
     ///
@@ -1114,6 +1156,8 @@ pub trait Visit {
 /// - `<default_value>`: Default value matching the field type like `42`.
 ///
 /// # Example
+/// See also a full example on the [`ConfigExtension`] documentation
+///
 /// ```
 /// use datafusion_common::extensions_options;
 ///


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to