From d825c12d84f913f8913c89efd15e734c60a9cf65 Mon Sep 17 00:00:00 2001 From: Oussama Saoudi Date: Thu, 26 Sep 2024 23:43:42 -0700 Subject: [PATCH 1/3] Make support schemas --- datafusion/core/src/catalog_common/mod.rs | 7 ++++--- datafusion/sql/src/statement.rs | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/datafusion/core/src/catalog_common/mod.rs b/datafusion/core/src/catalog_common/mod.rs index b8414378862e..78b9ddff3611 100644 --- a/datafusion/core/src/catalog_common/mod.rs +++ b/datafusion/core/src/catalog_common/mod.rs @@ -185,9 +185,8 @@ pub fn resolve_table_references( let _ = s.as_ref().visit(visitor); } DFStatement::CreateExternalTable(table) => { - visitor - .relations - .insert(ObjectName(vec![Ident::from(table.name.as_str())])); + let idents: Vec = table.name.split('.').map(Ident::from).collect(); + visitor.relations.insert(ObjectName(idents)); } DFStatement::CopyTo(CopyToStatement { source, .. }) => match source { CopyToSource::Relation(table_name) => { @@ -213,6 +212,8 @@ pub fn resolve_table_references( .into_iter() .map(|x| object_name_to_table_reference(x, enable_ident_normalization)) .collect::>()?; + println!("Table refs: {:?}", table_refs); + println!("ctes : {:?}", ctes); Ok((table_refs, ctes)) } diff --git a/datafusion/sql/src/statement.rs b/datafusion/sql/src/statement.rs index 29dfe25993f1..22f989fed4c1 100644 --- a/datafusion/sql/src/statement.rs +++ b/datafusion/sql/src/statement.rs @@ -25,7 +25,8 @@ use crate::parser::{ LexOrdering, Statement as DFStatement, }; use crate::planner::{ - object_name_to_qualifier, ContextProvider, PlannerContext, SqlToRel, + object_name_to_qualifier, object_name_to_table_reference, ContextProvider, + PlannerContext, SqlToRel, }; use crate::utils::normalize_ident; @@ -1240,7 +1241,11 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { self.build_order_by(order_exprs, &df_schema, &mut planner_context)?; // External tables do not support schemas at the moment, so the name is just a table name - let name = TableReference::bare(name); + // + let idents: Vec = name.split('.').map(Ident::from).collect(); + let obj = ObjectName(idents); + let name = object_name_to_table_reference(obj, false)?; + // let name = TableReference::bare(name); let constraints = Constraints::new_from_table_constraints(&all_constraints, &df_schema)?; Ok(LogicalPlan::Ddl(DdlStatement::CreateExternalTable( From 187151ff51002eb9f17a672d22bfe85ad71f7603 Mon Sep 17 00:00:00 2001 From: Oussama Saoudi Date: Thu, 26 Sep 2024 23:52:59 -0700 Subject: [PATCH 2/3] Set default name to table --- datafusion/sql/src/statement.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/datafusion/sql/src/statement.rs b/datafusion/sql/src/statement.rs index 22f989fed4c1..b475bfad6ee7 100644 --- a/datafusion/sql/src/statement.rs +++ b/datafusion/sql/src/statement.rs @@ -1244,7 +1244,8 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { // let idents: Vec = name.split('.').map(Ident::from).collect(); let obj = ObjectName(idents); - let name = object_name_to_table_reference(obj, false)?; + let name = object_name_to_table_reference(obj, false) + .unwrap_or(TableReference::bare(name)); // let name = TableReference::bare(name); let constraints = Constraints::new_from_table_constraints(&all_constraints, &df_schema)?; From 170f239550491b116ae51cffde46215053bd2588 Mon Sep 17 00:00:00 2001 From: Oussama Saoudi Date: Fri, 27 Sep 2024 00:08:35 -0700 Subject: [PATCH 3/3] Remove print statements and stale comment --- datafusion/core/src/catalog_common/mod.rs | 2 -- datafusion/sql/src/statement.rs | 6 +----- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/datafusion/core/src/catalog_common/mod.rs b/datafusion/core/src/catalog_common/mod.rs index 78b9ddff3611..e272894177a0 100644 --- a/datafusion/core/src/catalog_common/mod.rs +++ b/datafusion/core/src/catalog_common/mod.rs @@ -212,8 +212,6 @@ pub fn resolve_table_references( .into_iter() .map(|x| object_name_to_table_reference(x, enable_ident_normalization)) .collect::>()?; - println!("Table refs: {:?}", table_refs); - println!("ctes : {:?}", ctes); Ok((table_refs, ctes)) } diff --git a/datafusion/sql/src/statement.rs b/datafusion/sql/src/statement.rs index b475bfad6ee7..cd120b349117 100644 --- a/datafusion/sql/src/statement.rs +++ b/datafusion/sql/src/statement.rs @@ -1240,13 +1240,9 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { let ordered_exprs = self.build_order_by(order_exprs, &df_schema, &mut planner_context)?; - // External tables do not support schemas at the moment, so the name is just a table name - // let idents: Vec = name.split('.').map(Ident::from).collect(); - let obj = ObjectName(idents); - let name = object_name_to_table_reference(obj, false) + let name = object_name_to_table_reference(ObjectName(idents), false) .unwrap_or(TableReference::bare(name)); - // let name = TableReference::bare(name); let constraints = Constraints::new_from_table_constraints(&all_constraints, &df_schema)?; Ok(LogicalPlan::Ddl(DdlStatement::CreateExternalTable(