Skip to content

Commit

Permalink
minor: Remove more clones from the planner
Browse files Browse the repository at this point in the history
  • Loading branch information
alamb committed Dec 7, 2022
1 parent 895b4cd commit 685e75c
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 9 deletions.
17 changes: 12 additions & 5 deletions datafusion/expr/src/logical_plan/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ impl LogicalPlanBuilder {
}

/// Apply an alias
pub fn alias(&self, alias: &str) -> Result<Self> {
pub fn alias(&self, alias: impl Into<String>) -> Result<Self> {
Ok(Self::from(subquery_alias(&self.plan, alias)?))
}

Expand Down Expand Up @@ -965,16 +965,23 @@ pub fn project(
}

/// Create a SubqueryAlias to wrap a LogicalPlan.
pub fn subquery_alias(plan: &LogicalPlan, alias: &str) -> Result<LogicalPlan> {
pub fn subquery_alias(
plan: &LogicalPlan,
alias: impl Into<String>,
) -> Result<LogicalPlan> {
subquery_alias_owned(plan.clone(), alias)
}

pub fn subquery_alias_owned(plan: LogicalPlan, alias: &str) -> Result<LogicalPlan> {
pub fn subquery_alias_owned(
plan: LogicalPlan,
alias: impl Into<String>,
) -> Result<LogicalPlan> {
let alias = alias.into();
let schema: Schema = plan.schema().as_ref().clone().into();
let schema = DFSchemaRef::new(DFSchema::try_from_qualified_schema(alias, &schema)?);
let schema = DFSchemaRef::new(DFSchema::try_from_qualified_schema(&alias, &schema)?);
Ok(LogicalPlan::SubqueryAlias(SubqueryAlias {
input: Arc::new(plan),
alias: alias.to_string(),
alias,
schema,
}))
}
Expand Down
8 changes: 4 additions & 4 deletions datafusion/sql/src/planner.rs
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
self.schema_provider.get_table_provider((&table_ref).into()),
) {
(Some(cte_plan), _) => match table_alias {
Some(cte_alias) => subquery_alias(cte_plan, &cte_alias),
Some(cte_alias) => subquery_alias(cte_plan, cte_alias),
_ => Ok(cte_plan.clone()),
},
(_, Ok(provider)) => {
Expand Down Expand Up @@ -943,7 +943,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
let normalized_alias =
alias.as_ref().map(|a| normalize_ident(a.name.clone()));
let plan = match normalized_alias {
Some(alias) => subquery_alias_owned(logical_plan, &alias)?,
Some(alias) => subquery_alias_owned(logical_plan, alias)?,
_ => logical_plan,
};
(plan, alias)
Expand Down Expand Up @@ -993,7 +993,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
} else {
subquery_alias_owned(
Self::apply_expr_alias(plan, alias.columns)?,
&normalize_ident(alias.name),
normalize_ident(alias.name),
)
}
}
Expand Down Expand Up @@ -1256,7 +1256,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
// final projection
let mut plan = project(plan, select_exprs_post_aggr)?;
plan = match alias {
Some(alias) => subquery_alias_owned(plan, &alias)?,
Some(alias) => subquery_alias_owned(plan, alias)?,
None => plan,
};

Expand Down

0 comments on commit 685e75c

Please sign in to comment.