Skip to content

Commit 033b2ef

Browse files
authored
Improve ContextProvider naming: rename get_table_provider --> get_table_source, deprecate get_table_provider (#7831)
* Improve naming * Add deprecated warning * Improve more * Improve tests
1 parent 511be33 commit 033b2ef

File tree

11 files changed

+56
-56
lines changed

11 files changed

+56
-56
lines changed

datafusion-examples/examples/rewrite_expr.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ struct MyContextProvider {
191191
}
192192

193193
impl ContextProvider for MyContextProvider {
194-
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
194+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
195195
if name.table() == "person" {
196196
Ok(Arc::new(MyTableSource {
197197
schema: Arc::new(Schema::new(vec![

datafusion/core/src/execution/context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2014,7 +2014,7 @@ struct SessionContextProvider<'a> {
20142014
}
20152015

20162016
impl<'a> ContextProvider for SessionContextProvider<'a> {
2017-
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
2017+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
20182018
let name = self.state.resolve_table_ref(name).to_string();
20192019
self.tables
20202020
.get(&name)

datafusion/optimizer/tests/optimizer_integration.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,8 @@ fn test_sql(sql: &str) -> Result<LogicalPlan> {
339339
let statement = &ast[0];
340340

341341
// create a logical query plan
342-
let schema_provider = MySchemaProvider::default();
343-
let sql_to_rel = SqlToRel::new(&schema_provider);
342+
let context_provider = MyContextProvider::default();
343+
let sql_to_rel = SqlToRel::new(&context_provider);
344344
let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
345345

346346
// hard code the return value of now()
@@ -357,12 +357,12 @@ fn test_sql(sql: &str) -> Result<LogicalPlan> {
357357
}
358358

359359
#[derive(Default)]
360-
struct MySchemaProvider {
360+
struct MyContextProvider {
361361
options: ConfigOptions,
362362
}
363363

364-
impl ContextProvider for MySchemaProvider {
365-
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
364+
impl ContextProvider for MyContextProvider {
365+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
366366
let table_name = name.table();
367367
if table_name.starts_with("test") {
368368
let schema = Schema::new_with_metadata(

datafusion/sql/examples/sql.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,20 @@ fn main() {
4949
let statement = &ast[0];
5050

5151
// create a logical query plan
52-
let schema_provider = MySchemaProvider::new();
53-
let sql_to_rel = SqlToRel::new(&schema_provider);
52+
let context_provider = MyContextProvider::new();
53+
let sql_to_rel = SqlToRel::new(&context_provider);
5454
let plan = sql_to_rel.sql_statement_to_plan(statement.clone()).unwrap();
5555

5656
// show the plan
5757
println!("{plan:?}");
5858
}
5959

60-
struct MySchemaProvider {
60+
struct MyContextProvider {
6161
options: ConfigOptions,
6262
tables: HashMap<String, Arc<dyn TableSource>>,
6363
}
6464

65-
impl MySchemaProvider {
65+
impl MyContextProvider {
6666
fn new() -> Self {
6767
let mut tables = HashMap::new();
6868
tables.insert(
@@ -104,8 +104,8 @@ fn create_table_source(fields: Vec<Field>) -> Arc<dyn TableSource> {
104104
)))
105105
}
106106

107-
impl ContextProvider for MySchemaProvider {
108-
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
107+
impl ContextProvider for MyContextProvider {
108+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
109109
match self.tables.get(name.table()) {
110110
Some(table) => Ok(table.clone()),
111111
_ => plan_err!("Table not found: {}", name.table()),

datafusion/sql/src/expr/function.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
4949
};
5050

5151
// user-defined function (UDF) should have precedence in case it has the same name as a scalar built-in function
52-
if let Some(fm) = self.schema_provider.get_function_meta(&name) {
52+
if let Some(fm) = self.context_provider.get_function_meta(&name) {
5353
let args =
5454
self.function_args_to_expr(function.args, schema, planner_context)?;
5555
return Ok(Expr::ScalarUDF(ScalarUDF::new(fm, args)));
@@ -127,7 +127,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
127127
}
128128
} else {
129129
// User defined aggregate functions (UDAF) have precedence in case it has the same name as a scalar built-in function
130-
if let Some(fm) = self.schema_provider.get_aggregate_meta(&name) {
130+
if let Some(fm) = self.context_provider.get_aggregate_meta(&name) {
131131
let args =
132132
self.function_args_to_expr(function.args, schema, planner_context)?;
133133
return Ok(Expr::AggregateUDF(expr::AggregateUDF::new(
@@ -180,13 +180,13 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
180180
window_function::find_df_window_func(name)
181181
// next check user defined aggregates
182182
.or_else(|| {
183-
self.schema_provider
183+
self.context_provider
184184
.get_aggregate_meta(name)
185185
.map(WindowFunction::AggregateUDF)
186186
})
187187
// next check user defined window functions
188188
.or_else(|| {
189-
self.schema_provider
189+
self.context_provider
190190
.get_window_meta(name)
191191
.map(WindowFunction::WindowUDF)
192192
})

datafusion/sql/src/expr/identifier.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
3434
// TODO: figure out if ScalarVariables should be insensitive.
3535
let var_names = vec![id.value];
3636
let ty = self
37-
.schema_provider
37+
.context_provider
3838
.get_variable_type(&var_names)
3939
.ok_or_else(|| {
4040
plan_datafusion_err!("variable {var_names:?} has no type information")
@@ -98,7 +98,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
9898
.map(|id| self.normalizer.normalize(id))
9999
.collect();
100100
let ty = self
101-
.schema_provider
101+
.context_provider
102102
.get_variable_type(&var_names)
103103
.ok_or_else(|| {
104104
DataFusionError::Execution(format!(

datafusion/sql/src/expr/mod.rs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -728,12 +728,12 @@ mod tests {
728728

729729
use crate::TableReference;
730730

731-
struct TestSchemaProvider {
731+
struct TestContextProvider {
732732
options: ConfigOptions,
733733
tables: HashMap<String, Arc<dyn TableSource>>,
734734
}
735735

736-
impl TestSchemaProvider {
736+
impl TestContextProvider {
737737
pub fn new() -> Self {
738738
let mut tables = HashMap::new();
739739
tables.insert(
@@ -752,11 +752,8 @@ mod tests {
752752
}
753753
}
754754

755-
impl ContextProvider for TestSchemaProvider {
756-
fn get_table_provider(
757-
&self,
758-
name: TableReference,
759-
) -> Result<Arc<dyn TableSource>> {
755+
impl ContextProvider for TestContextProvider {
756+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
760757
match self.tables.get(name.table()) {
761758
Some(table) => Ok(table.clone()),
762759
_ => plan_err!("Table not found: {}", name.table()),
@@ -809,8 +806,8 @@ mod tests {
809806
.unwrap();
810807
let sql_expr = parser.parse_expr().unwrap();
811808

812-
let schema_provider = TestSchemaProvider::new();
813-
let sql_to_rel = SqlToRel::new(&schema_provider);
809+
let context_provider = TestContextProvider::new();
810+
let sql_to_rel = SqlToRel::new(&context_provider);
814811

815812
// Should not stack overflow
816813
sql_to_rel.sql_expr_to_logical_expr(

datafusion/sql/src/planner.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,12 @@ use crate::utils::make_decimal_type;
4545
/// The ContextProvider trait allows the query planner to obtain meta-data about tables and
4646
/// functions referenced in SQL statements
4747
pub trait ContextProvider {
48+
#[deprecated(since = "32.0.0", note = "please use `get_table_source` instead")]
49+
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>> {
50+
self.get_table_source(name)
51+
}
4852
/// Getter for a datasource
49-
fn get_table_provider(&self, name: TableReference) -> Result<Arc<dyn TableSource>>;
53+
fn get_table_source(&self, name: TableReference) -> Result<Arc<dyn TableSource>>;
5054
/// Getter for a UDF description
5155
fn get_function_meta(&self, name: &str) -> Option<Arc<ScalarUDF>>;
5256
/// Getter for a UDAF description
@@ -186,22 +190,22 @@ impl PlannerContext {
186190

187191
/// SQL query planner
188192
pub struct SqlToRel<'a, S: ContextProvider> {
189-
pub(crate) schema_provider: &'a S,
193+
pub(crate) context_provider: &'a S,
190194
pub(crate) options: ParserOptions,
191195
pub(crate) normalizer: IdentNormalizer,
192196
}
193197

194198
impl<'a, S: ContextProvider> SqlToRel<'a, S> {
195199
/// Create a new query planner
196-
pub fn new(schema_provider: &'a S) -> Self {
197-
Self::new_with_options(schema_provider, ParserOptions::default())
200+
pub fn new(context_provider: &'a S) -> Self {
201+
Self::new_with_options(context_provider, ParserOptions::default())
198202
}
199203

200204
/// Create a new query planner
201-
pub fn new_with_options(schema_provider: &'a S, options: ParserOptions) -> Self {
205+
pub fn new_with_options(context_provider: &'a S, options: ParserOptions) -> Self {
202206
let normalize = options.enable_ident_normalization;
203207
SqlToRel {
204-
schema_provider,
208+
context_provider,
205209
options,
206210
normalizer: IdentNormalizer::new(normalize),
207211
}
@@ -334,7 +338,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
334338
// Timestamp With Time Zone
335339
// INPUT : [SQLDataType] TimestampTz + [RuntimeConfig] Time Zone
336340
// OUTPUT: [ArrowDataType] Timestamp<TimeUnit, Some(Time Zone)>
337-
self.schema_provider.options().execution.time_zone.clone()
341+
self.context_provider.options().execution.time_zone.clone()
338342
} else {
339343
// Timestamp Without Time zone
340344
None

datafusion/sql/src/relation/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
3838
(
3939
match (
4040
cte,
41-
self.schema_provider.get_table_provider(table_ref.clone()),
41+
self.context_provider.get_table_source(table_ref.clone()),
4242
) {
4343
(Some(cte_plan), _) => Ok(cte_plan.clone()),
4444
(_, Ok(provider)) => {

datafusion/sql/src/statement.rs

Lines changed: 18 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -611,7 +611,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
611611
let DescribeTableStmt { table_name } = statement;
612612
let table_ref = self.object_name_to_table_reference(table_name)?;
613613

614-
let table_source = self.schema_provider.get_table_provider(table_ref)?;
614+
let table_source = self.context_provider.get_table_source(table_ref)?;
615615

616616
let schema = table_source.schema();
617617

@@ -630,7 +630,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
630630
CopyToSource::Relation(object_name) => {
631631
let table_ref =
632632
self.object_name_to_table_reference(object_name.clone())?;
633-
let table_source = self.schema_provider.get_table_provider(table_ref)?;
633+
let table_source = self.context_provider.get_table_source(table_ref)?;
634634
LogicalPlanBuilder::scan(
635635
object_name_to_string(&object_name),
636636
table_source,
@@ -912,12 +912,15 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
912912
) -> Result<LogicalPlan> {
913913
// Do a table lookup to verify the table exists
914914
let table_ref = self.object_name_to_table_reference(table_name.clone())?;
915-
let provider = self.schema_provider.get_table_provider(table_ref.clone())?;
916-
let schema = (*provider.schema()).clone();
915+
let table_source = self.context_provider.get_table_source(table_ref.clone())?;
916+
let schema = (*table_source.schema()).clone();
917917
let schema = DFSchema::try_from(schema)?;
918-
let scan =
919-
LogicalPlanBuilder::scan(object_name_to_string(&table_name), provider, None)?
920-
.build()?;
918+
let scan = LogicalPlanBuilder::scan(
919+
object_name_to_string(&table_name),
920+
table_source,
921+
None,
922+
)?
923+
.build()?;
921924
let mut planner_context = PlannerContext::new();
922925

923926
let source = match predicate_expr {
@@ -960,10 +963,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
960963

961964
// Do a table lookup to verify the table exists
962965
let table_name = self.object_name_to_table_reference(table_name)?;
963-
let provider = self
964-
.schema_provider
965-
.get_table_provider(table_name.clone())?;
966-
let arrow_schema = (*provider.schema()).clone();
966+
let table_source = self.context_provider.get_table_source(table_name.clone())?;
967+
let arrow_schema = (*table_source.schema()).clone();
967968
let table_schema = Arc::new(DFSchema::try_from_qualified_schema(
968969
table_name.clone(),
969970
&arrow_schema,
@@ -1066,10 +1067,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
10661067
) -> Result<LogicalPlan> {
10671068
// Do a table lookup to verify the table exists
10681069
let table_name = self.object_name_to_table_reference(table_name)?;
1069-
let provider = self
1070-
.schema_provider
1071-
.get_table_provider(table_name.clone())?;
1072-
let arrow_schema = (*provider.schema()).clone();
1070+
let table_source = self.context_provider.get_table_source(table_name.clone())?;
1071+
let arrow_schema = (*table_source.schema()).clone();
10731072
let table_schema = DFSchema::try_from(arrow_schema)?;
10741073

10751074
// Get insert fields and index_mapping
@@ -1193,7 +1192,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
11931192

11941193
// Do a table lookup to verify the table exists
11951194
let table_ref = self.object_name_to_table_reference(sql_table_name)?;
1196-
let _ = self.schema_provider.get_table_provider(table_ref)?;
1195+
let _ = self.context_provider.get_table_source(table_ref)?;
11971196

11981197
// treat both FULL and EXTENDED as the same
11991198
let select_list = if full || extended {
@@ -1228,7 +1227,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
12281227

12291228
// Do a table lookup to verify the table exists
12301229
let table_ref = self.object_name_to_table_reference(sql_table_name)?;
1231-
let _ = self.schema_provider.get_table_provider(table_ref)?;
1230+
let _ = self.context_provider.get_table_source(table_ref)?;
12321231

12331232
let query = format!(
12341233
"SELECT table_catalog, table_schema, table_name, definition FROM information_schema.views WHERE {where_clause}"
@@ -1245,8 +1244,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
12451244
schema: schema.into(),
12461245
table: table.into(),
12471246
};
1248-
self.schema_provider
1249-
.get_table_provider(tables_reference)
1247+
self.context_provider
1248+
.get_table_source(tables_reference)
12501249
.is_ok()
12511250
}
12521251
}

0 commit comments

Comments
 (0)