This is an automated email from the ASF dual-hosted git repository.
comphead pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion.git
The following commit(s) were added to refs/heads/main by this push:
new 98e5f64df3 Replace some usages of `Expr::to_field` with
`Expr::qualified_name` (#12522)
98e5f64df3 is described below
commit 98e5f64df37b7a3a70ce5018d0d4098d0bed6ddb
Author: Jonah Gao <[email protected]>
AuthorDate: Thu Sep 19 22:59:50 2024 +0800
Replace some usages of `Expr::to_field` with `Expr::qualified_name` (#12522)
---
datafusion/expr/src/expr_rewriter/order_by.rs | 9 ++--
.../optimizer/src/common_subexpr_eliminate.rs | 60 +++++-----------------
2 files changed, 16 insertions(+), 53 deletions(-)
diff --git a/datafusion/expr/src/expr_rewriter/order_by.rs
b/datafusion/expr/src/expr_rewriter/order_by.rs
index 48d380cd59..f0d3d8fcd0 100644
--- a/datafusion/expr/src/expr_rewriter/order_by.rs
+++ b/datafusion/expr/src/expr_rewriter/order_by.rs
@@ -19,7 +19,7 @@
use crate::expr::Alias;
use crate::expr_rewriter::normalize_col;
-use crate::{expr::Sort, Cast, Expr, ExprSchemable, LogicalPlan, TryCast};
+use crate::{expr::Sort, Cast, Expr, LogicalPlan, TryCast};
use datafusion_common::tree_node::{Transformed, TransformedResult, TreeNode};
use datafusion_common::{Column, Result};
@@ -77,11 +77,8 @@ fn rewrite_in_terms_of_projection(
expr.transform(|expr| {
// search for unnormalized names first such as "c1" (such as aliases)
if let Some(found) = proj_exprs.iter().find(|a| (**a) == expr) {
- let col = Expr::Column(
- found
- .to_field(input.schema())
- .map(|(qualifier, field)| Column::new(qualifier,
field.name()))?,
- );
+ let (qualifier, field_name) = found.qualified_name();
+ let col = Expr::Column(Column::new(qualifier, field_name));
return Ok(Transformed::yes(col));
}
diff --git a/datafusion/optimizer/src/common_subexpr_eliminate.rs
b/datafusion/optimizer/src/common_subexpr_eliminate.rs
index 14b23a4524..442cc93f5b 100644
--- a/datafusion/optimizer/src/common_subexpr_eliminate.rs
+++ b/datafusion/optimizer/src/common_subexpr_eliminate.rs
@@ -37,7 +37,7 @@ use datafusion_expr::logical_plan::{
Aggregate, Filter, LogicalPlan, Projection, Sort, Window,
};
use datafusion_expr::tree_node::replace_sort_expressions;
-use datafusion_expr::{col, BinaryExpr, Case, Expr, ExprSchemable, Operator};
+use datafusion_expr::{col, BinaryExpr, Case, Expr, Operator};
use indexmap::IndexMap;
const CSE_PREFIX: &str = "__common_expr";
@@ -533,14 +533,9 @@ impl CommonSubexprEliminate {
.map(|(expr, expr_alias)|
expr.alias(expr_alias))
.collect::<Vec<_>>();
- let new_input_schema =
Arc::clone(new_input.schema());
let mut proj_exprs = vec![];
for expr in &new_group_expr {
- extract_expressions(
- expr,
- &new_input_schema,
- &mut proj_exprs,
- )?
+ extract_expressions(expr, &mut proj_exprs)
}
for (expr_rewritten, expr_orig) in
rewritten_aggr_expr.into_iter().zip(new_aggr_expr)
@@ -555,11 +550,11 @@ impl CommonSubexprEliminate {
} else {
let expr_alias =
config.alias_generator().next(CSE_PREFIX);
- let (qualifier, field) =
-
expr_rewritten.to_field(&new_input_schema)?;
+ let (qualifier, field_name) =
+ expr_rewritten.qualified_name();
let out_name = qualified_name(
qualifier.as_ref(),
- field.name(),
+ &field_name,
);
agg_exprs.push(expr_rewritten.alias(&expr_alias));
@@ -855,24 +850,18 @@ fn build_recover_project_plan(
Projection::try_new(col_exprs,
Arc::new(input)).map(LogicalPlan::Projection)
}
-fn extract_expressions(
- expr: &Expr,
- schema: &DFSchema,
- result: &mut Vec<Expr>,
-) -> Result<()> {
+fn extract_expressions(expr: &Expr, result: &mut Vec<Expr>) {
if let Expr::GroupingSet(groupings) = expr {
for e in groupings.distinct_expr() {
- let (qualifier, field) = e.to_field(schema)?;
- let col = Column::new(qualifier, field.name());
+ let (qualifier, field_name) = e.qualified_name();
+ let col = Column::new(qualifier, field_name);
result.push(Expr::Column(col))
}
} else {
- let (qualifier, field) = expr.to_field(schema)?;
- let col = Column::new(qualifier, field.name());
+ let (qualifier, field_name) = expr.qualified_name();
+ let col = Column::new(qualifier, field_name);
result.push(Expr::Column(col));
}
-
- Ok(())
}
/// Which type of [expressions](Expr) should be considered for rewriting?
@@ -1780,16 +1769,7 @@ mod test {
fn test_extract_expressions_from_grouping_set() -> Result<()> {
let mut result = Vec::with_capacity(3);
let grouping = grouping_set(vec![vec![col("a"), col("b")],
vec![col("c")]]);
- let schema = DFSchema::from_unqualified_fields(
- vec![
- Field::new("a", DataType::Int32, false),
- Field::new("b", DataType::Int32, false),
- Field::new("c", DataType::Int32, false),
- ]
- .into(),
- HashMap::default(),
- )?;
- extract_expressions(&grouping, &schema, &mut result)?;
+ extract_expressions(&grouping, &mut result);
assert!(result.len() == 3);
Ok(())
@@ -1799,16 +1779,7 @@ mod test {
fn test_extract_expressions_from_grouping_set_with_identical_expr() ->
Result<()> {
let mut result = Vec::with_capacity(2);
let grouping = grouping_set(vec![vec![col("a"), col("b")],
vec![col("a")]]);
- let schema = DFSchema::from_unqualified_fields(
- vec![
- Field::new("a", DataType::Int32, false),
- Field::new("b", DataType::Int32, false),
- ]
- .into(),
- HashMap::default(),
- )?;
- extract_expressions(&grouping, &schema, &mut result)?;
-
+ extract_expressions(&grouping, &mut result);
assert!(result.len() == 2);
Ok(())
}
@@ -1868,12 +1839,7 @@ mod test {
#[test]
fn test_extract_expressions_from_col() -> Result<()> {
let mut result = Vec::with_capacity(1);
- let schema = DFSchema::from_unqualified_fields(
- vec![Field::new("a", DataType::Int32, false)].into(),
- HashMap::default(),
- )?;
- extract_expressions(&col("a"), &schema, &mut result)?;
-
+ extract_expressions(&col("a"), &mut result);
assert!(result.len() == 1);
Ok(())
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]