Skip to content

Commit

Permalink
Add method SessionStateBuilder::with_object_store (#12578)
Browse files Browse the repository at this point in the history
This PR adds the the method `SessionStateBuilder::with_object_store`,
which registers an object store with a specified URL to the RuntimeEnv.
  • Loading branch information
OussamaSaoudi authored Sep 23, 2024
1 parent 5768bba commit a35d007
Showing 1 changed file with 37 additions and 0 deletions.
37 changes: 37 additions & 0 deletions datafusion/core/src/execution/session_state.rs
Original file line number Diff line number Diff line change
Expand Up @@ -68,13 +68,15 @@ use datafusion_sql::parser::{DFParser, Statement};
use datafusion_sql::planner::{ContextProvider, ParserOptions, PlannerContext, SqlToRel};
use itertools::Itertools;
use log::{debug, info};
use object_store::ObjectStore;
use sqlparser::ast::Expr as SQLExpr;
use sqlparser::dialect::dialect_from_str;
use std::any::Any;
use std::collections::hash_map::Entry;
use std::collections::{HashMap, HashSet};
use std::fmt::Debug;
use std::sync::Arc;
use url::Url;
use uuid::Uuid;

/// `SessionState` contains all the necessary state to plan and execute queries,
Expand Down Expand Up @@ -1229,6 +1231,41 @@ impl SessionStateBuilder {
self
}

/// Register an `ObjectStore` to the [`RuntimeEnv`]. See [`RuntimeEnv::register_object_store`]
/// for more details.
///
/// Note that this creates a default [`RuntimeEnv`] if there isn't one passed in already.
///
/// ```
/// # use datafusion::prelude::*;
/// # use datafusion::execution::session_state::SessionStateBuilder;
/// # use datafusion_execution::runtime_env::RuntimeEnv;
/// # use url::Url;
/// # use std::sync::Arc;
/// # let http_store = object_store::local::LocalFileSystem::new();
/// let url = Url::try_from("file://").unwrap();
/// let object_store = object_store::local::LocalFileSystem::new();
/// let state = SessionStateBuilder::new()
/// .with_config(SessionConfig::new())
/// .with_object_store(&url, Arc::new(object_store))
/// .with_default_features()
/// .build();
/// ```
pub fn with_object_store(
mut self,
url: &Url,
object_store: Arc<dyn ObjectStore>,
) -> Self {
if self.runtime_env.is_none() {
self.runtime_env = Some(Arc::new(RuntimeEnv::default()));
}
self.runtime_env
.as_ref()
.unwrap()
.register_object_store(url, object_store);
self
}

/// Builds a [`SessionState`] with the current configuration.
///
/// Note that there is an explicit option for enabling catalog and schema defaults
Expand Down

0 comments on commit a35d007

Please sign in to comment.