From 8a8f28be057a0296705e4bc2fadfc6d3a7d78257 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sat, 12 Jun 2021 14:53:20 -0700 Subject: [PATCH 1/2] support table alias in join clause --- datafusion/src/sql/planner.rs | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/datafusion/src/sql/planner.rs b/datafusion/src/sql/planner.rs index 860d21714ec6..4bd8ecd09d5f 100644 --- a/datafusion/src/sql/planner.rs +++ b/datafusion/src/sql/planner.rs @@ -424,7 +424,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { ctes: &mut HashMap, ) -> Result { match relation { - TableFactor::Table { name, .. } => { + TableFactor::Table { name, alias, .. } => { let table_name = name.to_string(); let cte = ctes.get(&table_name); match ( @@ -432,9 +432,16 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { self.schema_provider.get_table_provider(name.try_into()?), ) { (Some(cte_plan), _) => Ok(cte_plan.clone()), - (_, Some(provider)) => { - LogicalPlanBuilder::scan(&table_name, provider, None)?.build() - } + (_, Some(provider)) => LogicalPlanBuilder::scan( + // take alias into account to support `JOIN table1 as table2` + alias + .as_ref() + .map(|a| a.name.value.as_str()) + .unwrap_or(&table_name), + provider, + None, + )? + .build(), (_, None) => Err(DataFusionError::Plan(format!( "Table or CTE with name '{}' not found", name From b4949d4cd7e0807e99aeddcf98e463836f709ece Mon Sep 17 00:00:00 2001 From: QP Hou Date: Sun, 13 Jun 2021 10:01:10 -0700 Subject: [PATCH 2/2] Update datafusion/src/sql/planner.rs Co-authored-by: Andrew Lamb --- datafusion/src/sql/planner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/src/sql/planner.rs b/datafusion/src/sql/planner.rs index 4bd8ecd09d5f..1f8601be673e 100644 --- a/datafusion/src/sql/planner.rs +++ b/datafusion/src/sql/planner.rs @@ -442,7 +442,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> { None, )? .build(), - (_, None) => Err(DataFusionError::Plan(format!( + (None, None) => Err(DataFusionError::Plan(format!( "Table or CTE with name '{}' not found", name ))),