diff --git a/datafusion/common/src/column.rs b/datafusion/common/src/column.rs index c7f0b5a4f4881..71253891f7d3e 100644 --- a/datafusion/common/src/column.rs +++ b/datafusion/common/src/column.rs @@ -327,26 +327,6 @@ impl Column { } } -impl From<&str> for Column { - fn from(c: &str) -> Self { - Self::from_qualified_name(c) - } -} - -/// Create a column, cloning the string -impl From<&String> for Column { - fn from(c: &String) -> Self { - Self::from_qualified_name(c) - } -} - -/// Create a column, reusing the existing string -impl From for Column { - fn from(c: String) -> Self { - Self::from_qualified_name(c) - } -} - /// Create a column, use qualifier and field name impl From<(Option<&TableReference>, &Field)> for Column { fn from((relation, field): (Option<&TableReference>, &Field)) -> Self { @@ -366,7 +346,7 @@ impl std::str::FromStr for Column { type Err = std::convert::Infallible; fn from_str(s: &str) -> Result { - Ok(s.into()) + Ok(Self::from_qualified_name(s)) } } diff --git a/datafusion/core/src/dataframe/mod.rs b/datafusion/core/src/dataframe/mod.rs index fe760760eef3f..abaddf3b19974 100644 --- a/datafusion/core/src/dataframe/mod.rs +++ b/datafusion/core/src/dataframe/mod.rs @@ -514,7 +514,7 @@ impl DataFrame { columns: &[&str], options: UnnestOptions, ) -> Result { - let columns = columns.iter().map(|c| Column::from(*c)).collect(); + let columns = columns.iter().map(|c| Column::from_qualified_name(*c)).collect(); let plan = LogicalPlanBuilder::from(self.plan) .unnest_columns_with_options(columns, options)? .build()?; @@ -1257,7 +1257,10 @@ impl DataFrame { .join( right.plan, join_type, - (left_cols.to_vec(), right_cols.to_vec()), + ( + left_cols.iter().map(|c| Column::from_qualified_name(*c)).collect(), + right_cols.iter().map(|c| Column::from_qualified_name(*c)).collect(), + ), filter, )? .build()?; @@ -2167,7 +2170,7 @@ impl DataFrame { col_exists = true; Some((new_column.clone(), true)) } else { - let e = col(Column::from((qualifier, field))); + let e = Expr::Column(Column::from((qualifier, field))); Some((e, self.projection_requires_validation)) } }) @@ -2245,12 +2248,12 @@ impl DataFrame { .map(|(qualifier, field)| { if qualifier.eq(&qualifier_rename) && field == field_rename { ( - col(Column::from((qualifier, field))) + Expr::Column(Column::from((qualifier, field))) .alias_qualified(qualifier.cloned(), new_name), false, ) } else { - (col(Column::from((qualifier, field))), false) + (Expr::Column(Column::from((qualifier, field))), false) } }) .collect::>(); diff --git a/datafusion/core/src/datasource/listing/table.rs b/datafusion/core/src/datasource/listing/table.rs index 4e33f3cad51a4..32516cf5a7823 100644 --- a/datafusion/core/src/datasource/listing/table.rs +++ b/datafusion/core/src/datasource/listing/table.rs @@ -129,7 +129,7 @@ mod tests { ListingOptions, ListingTable, ListingTableConfig, SchemaSource, }; use datafusion_common::{ - DataFusionError, Result, ScalarValue, assert_contains, + Column, DataFusionError, Result, ScalarValue, assert_contains, stats::Precision, test_util::{batches_to_string, datafusion_test_data}, }; @@ -776,7 +776,7 @@ mod tests { )])); let filter_predicate = Expr::BinaryExpr(BinaryExpr::new( - Box::new(Expr::Column("column1".into())), + Box::new(Expr::Column(Column::from_qualified_name("column1"))), Operator::GtEq, Box::new(Expr::Literal(ScalarValue::Int32(Some(0)), None)), )); diff --git a/datafusion/expr/src/expr.rs b/datafusion/expr/src/expr.rs index 8234247c92db6..14a69d2653a67 100644 --- a/datafusion/expr/src/expr.rs +++ b/datafusion/expr/src/expr.rs @@ -1852,7 +1852,7 @@ impl Expr { /// # use datafusion_common::Column; /// use datafusion_expr::{col, Expr}; /// let expr = col("foo"); - /// assert_eq!(expr.try_as_col(), Some(&Column::from("foo"))); + /// assert_eq!(expr.try_as_col(), Some(&Column::from_qualified_name("foo"))); /// /// let expr = col("foo").alias("bar"); /// assert_eq!(expr.try_as_col(), None); diff --git a/datafusion/expr/src/expr_fn.rs b/datafusion/expr/src/expr_fn.rs index 4254602d7c555..13d624b783e34 100644 --- a/datafusion/expr/src/expr_fn.rs +++ b/datafusion/expr/src/expr_fn.rs @@ -65,15 +65,15 @@ use std::sync::Arc; /// let c3 = col(r#""A""#); /// assert_ne!(c1, c3); /// ``` -pub fn col(ident: impl Into) -> Expr { - Expr::Column(ident.into()) +pub fn col(ident: impl Into) -> Expr { + Expr::Column(Column::from_qualified_name(ident)) } /// Create an out reference column which hold a reference that has been resolved to a field /// outside of the current plan. /// The expression created by this function does not preserve the metadata of the outer column. /// Please use `out_ref_col_with_metadata` if you want to preserve the metadata. -pub fn out_ref_col(dt: DataType, ident: impl Into) -> Expr { +pub fn out_ref_col(dt: DataType, ident: impl Into) -> Expr { out_ref_col_with_metadata(dt, HashMap::new(), ident) } @@ -81,9 +81,9 @@ pub fn out_ref_col(dt: DataType, ident: impl Into) -> Expr { pub fn out_ref_col_with_metadata( dt: DataType, metadata: HashMap, - ident: impl Into, + ident: impl Into, ) -> Expr { - let column = ident.into(); + let column = Column::from_qualified_name(ident); let field: FieldRef = Arc::new(Field::new(column.name(), dt, true).with_metadata(metadata)); Expr::OuterReferenceColumn(field, column) diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index 854e907d68b1a..1feed1c0b48b8 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -1083,7 +1083,7 @@ mod tests { let outer_ref = out_ref_col_with_metadata( DataType::Int32, meta.to_hashmap(), - Column::from_name("foo"), + "foo", ); assert_eq!(meta, outer_ref.metadata(&schema).unwrap()); } diff --git a/datafusion/expr/src/logical_plan/builder.rs b/datafusion/expr/src/logical_plan/builder.rs index edf989a6df596..b5316e11fe5bb 100644 --- a/datafusion/expr/src/logical_plan/builder.rs +++ b/datafusion/expr/src/logical_plan/builder.rs @@ -1500,19 +1500,19 @@ impl LogicalPlanBuilder { } /// Unnest the given column. - pub fn unnest_column(self, column: impl Into) -> Result { - unnest(Arc::unwrap_or_clone(self.plan), vec![column.into()]).map(Self::new) + pub fn unnest_column(self, column: impl Into) -> Result { + unnest(Arc::unwrap_or_clone(self.plan), vec![Column::from_qualified_name(column)]).map(Self::new) } /// Unnest the given column given [`UnnestOptions`] pub fn unnest_column_with_options( self, - column: impl Into, + column: impl Into, options: UnnestOptions, ) -> Result { unnest_with_options( Arc::unwrap_or_clone(self.plan), - vec![column.into()], + vec![Column::from_qualified_name(column)], options, ) .map(Self::new) @@ -2664,7 +2664,7 @@ mod tests { // Unnesting multiple fields at the same time, using infer syntax let cols = vec!["strings", "structs", "struct_singular"] .into_iter() - .map(|c| c.into()) + .map(Column::from_qualified_name) .collect(); let plan = nested_table_scan("test_table")? @@ -2683,16 +2683,16 @@ mod tests { // Simultaneously unnesting a list (with different depth) and a struct column let plan = nested_table_scan("test_table")? .unnest_columns_with_options( - vec!["stringss".into(), "struct_singular".into()], + vec![Column::from_qualified_name("stringss"), Column::from_qualified_name("struct_singular")], UnnestOptions::default() .with_recursions(RecursionUnnestOption { - input_column: "stringss".into(), - output_column: "stringss_depth_1".into(), + input_column: Column::from_qualified_name("stringss"), + output_column: Column::from_qualified_name("stringss_depth_1"), depth: 1, }) .with_recursions(RecursionUnnestOption { - input_column: "stringss".into(), - output_column: "stringss_depth_2".into(), + input_column: Column::from_qualified_name("stringss"), + output_column: Column::from_qualified_name("stringss_depth_2"), depth: 2, }), )? diff --git a/datafusion/expr/src/logical_plan/plan.rs b/datafusion/expr/src/logical_plan/plan.rs index 5b143ef135eda..24f0e3da5527a 100644 --- a/datafusion/expr/src/logical_plan/plan.rs +++ b/datafusion/expr/src/logical_plan/plan.rs @@ -4989,7 +4989,7 @@ mod tests { let col = schema.field_names()[0].clone(); let filter = Filter::try_new( - Expr::Column(col.into()).eq(Expr::Literal(ScalarValue::Int32(Some(1)), None)), + Expr::Column(Column::from_qualified_name(col)).eq(Expr::Literal(ScalarValue::Int32(Some(1)), None)), scan, ) .unwrap(); @@ -5019,7 +5019,7 @@ mod tests { let col = schema.field_names()[0].clone(); let filter = - Filter::try_new(Expr::Column(col.into()).eq(lit(1i32)), scan).unwrap(); + Filter::try_new(Expr::Column(Column::from_qualified_name(col)).eq(lit(1i32)), scan).unwrap(); assert!(filter.is_scalar()); } diff --git a/datafusion/optimizer/src/analyzer/resolve_grouping_function.rs b/datafusion/optimizer/src/analyzer/resolve_grouping_function.rs index 747c54e2cd26d..dc04915122cb4 100644 --- a/datafusion/optimizer/src/analyzer/resolve_grouping_function.rs +++ b/datafusion/optimizer/src/analyzer/resolve_grouping_function.rs @@ -205,7 +205,7 @@ fn grouping_function_on_id( } }; - let grouping_id_column = Expr::Column(Column::from(Aggregate::INTERNAL_GROUPING_ID)); + let grouping_id_column = Expr::Column(Column::from_qualified_name(Aggregate::INTERNAL_GROUPING_ID)); // The grouping call is exactly our internal grouping id if args.len() == group_by_expr_count && args diff --git a/datafusion/optimizer/src/common_subexpr_eliminate.rs b/datafusion/optimizer/src/common_subexpr_eliminate.rs index d9273a8f60fb2..a3d82ec8fc959 100644 --- a/datafusion/optimizer/src/common_subexpr_eliminate.rs +++ b/datafusion/optimizer/src/common_subexpr_eliminate.rs @@ -1167,7 +1167,7 @@ mod test { let table_scan_1 = test_table_scan_with_name("test1").unwrap(); let table_scan_2 = test_table_scan_with_name("test2").unwrap(); let join = LogicalPlanBuilder::from(table_scan_1) - .join(table_scan_2, JoinType::Inner, (vec!["a"], vec!["a"]), None) + .join(table_scan_2, JoinType::Inner, (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None) .unwrap() .build() .unwrap(); diff --git a/datafusion/optimizer/src/eliminate_cross_join.rs b/datafusion/optimizer/src/eliminate_cross_join.rs index c5a3a7d96ce89..f771da5bd9fdb 100644 --- a/datafusion/optimizer/src/eliminate_cross_join.rs +++ b/datafusion/optimizer/src/eliminate_cross_join.rs @@ -449,6 +449,7 @@ mod tests { use crate::optimizer::OptimizerContext; use crate::test::*; + use datafusion_common::Column; use datafusion_expr::{ Operator::{And, Or}, binary_expr, col, lit, @@ -654,10 +655,10 @@ mod tests { .join( t3, JoinType::Inner, - (vec!["t1.a"], vec!["t3.a"]), + (vec![Column::from_qualified_name("t1.a")], vec![Column::from_qualified_name("t3.a")]), Some(col("t1.a").gt(lit(20u32))), )? - .join(t2, JoinType::Inner, (vec!["t1.a"], vec!["t2.a"]), None)? + .join(t2, JoinType::Inner, (vec![Column::from_qualified_name("t1.a")], vec![Column::from_qualified_name("t2.a")]), None)? .filter(col("t1.a").gt(lit(15u32)))? .build()?; diff --git a/datafusion/optimizer/src/filter_null_join_keys.rs b/datafusion/optimizer/src/filter_null_join_keys.rs index c8f419d3e543e..65cf1c3f09e9e 100644 --- a/datafusion/optimizer/src/filter_null_join_keys.rs +++ b/datafusion/optimizer/src/filter_null_join_keys.rs @@ -308,7 +308,7 @@ mod tests { .join( t2, JoinType::Inner, - (vec!["optional_id"], vec!["t2.optional_id"]), + (vec![Column::from_qualified_name("optional_id")], vec![Column::from_qualified_name("t2.optional_id")]), None, )? .build()?; diff --git a/datafusion/optimizer/src/optimize_projections/mod.rs b/datafusion/optimizer/src/optimize_projections/mod.rs index 548eadffa242e..7612f0de53dfe 100644 --- a/datafusion/optimizer/src/optimize_projections/mod.rs +++ b/datafusion/optimizer/src/optimize_projections/mod.rs @@ -1734,9 +1734,9 @@ mod tests { let plan = table_scan(Some("m4"), &schema, None)? .aggregate( Vec::::new(), - vec![max(col(Column::new_unqualified("tag.one"))).alias("tag.one")], + vec![max(Expr::Column(Column::new_unqualified("tag.one"))).alias("tag.one")], )? - .project([col(Column::new_unqualified("tag.one"))])? + .project([Expr::Column(Column::new_unqualified("tag.one"))])? .build()?; assert_optimized_plan_equal!( @@ -1842,7 +1842,7 @@ mod tests { let table2_scan = scan_empty(Some("test2"), &schema, None)?.build()?; let plan = LogicalPlanBuilder::from(table_scan) - .join(table2_scan, JoinType::Left, (vec!["a"], vec!["c1"]), None)? + .join(table2_scan, JoinType::Left, (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("c1")]), None)? .project(vec![col("a"), col("b"), col("c1")])? .build()?; @@ -1894,7 +1894,7 @@ mod tests { let table2_scan = scan_empty(Some("test2"), &schema, None)?.build()?; let plan = LogicalPlanBuilder::from(table_scan) - .join(table2_scan, JoinType::Left, (vec!["a"], vec!["c1"]), None)? + .join(table2_scan, JoinType::Left, (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("c1")]), None)? // projecting joined column `a` should push the right side column `c1` projection as // well into test2 table even though `c1` is not referenced in projection. .project(vec![col("a"), col("b")])? @@ -1949,7 +1949,7 @@ mod tests { let table2_scan = scan_empty(Some("test2"), &schema, None)?.build()?; let plan = LogicalPlanBuilder::from(table_scan) - .join_using(table2_scan, JoinType::Left, vec!["a".into()])? + .join_using(table2_scan, JoinType::Left, vec![Column::from_qualified_name("a")])? .project(vec![col("a"), col("b")])? .build()?; diff --git a/datafusion/optimizer/src/push_down_limit.rs b/datafusion/optimizer/src/push_down_limit.rs index 7b302adf22acc..53cad6f012bd0 100644 --- a/datafusion/optimizer/src/push_down_limit.rs +++ b/datafusion/optimizer/src/push_down_limit.rs @@ -279,7 +279,7 @@ mod test { use crate::test::*; use crate::OptimizerContext; - use datafusion_common::DFSchemaRef; + use datafusion_common::{Column, DFSchemaRef}; use datafusion_expr::{ Expr, Extension, UserDefinedLogicalNodeCore, col, exists, logical_plan::builder::LogicalPlanBuilder, @@ -837,7 +837,7 @@ mod test { .join( LogicalPlanBuilder::from(table_scan_2).build()?, JoinType::Inner, - (vec!["a"], vec!["a"]), + (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None, )? .limit(10, Some(1000))? @@ -864,7 +864,7 @@ mod test { .join( LogicalPlanBuilder::from(table_scan_2).build()?, JoinType::Inner, - (vec!["a"], vec!["a"]), + (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None, )? .limit(10, Some(1000))? @@ -955,7 +955,7 @@ mod test { .join( LogicalPlanBuilder::from(table_scan_2).build()?, JoinType::Left, - (vec!["a"], vec!["a"]), + (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None, )? .limit(10, Some(1000))? @@ -983,7 +983,7 @@ mod test { .join( LogicalPlanBuilder::from(table_scan_2).build()?, JoinType::Right, - (vec!["a"], vec!["a"]), + (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None, )? .limit(0, Some(1000))? @@ -1011,7 +1011,7 @@ mod test { .join( LogicalPlanBuilder::from(table_scan_2).build()?, JoinType::Right, - (vec!["a"], vec!["a"]), + (vec![Column::from_qualified_name("a")], vec![Column::from_qualified_name("a")]), None, )? .limit(10, Some(1000))? diff --git a/datafusion/optimizer/src/replace_distinct_aggregate.rs b/datafusion/optimizer/src/replace_distinct_aggregate.rs index f24ca1f119b61..e554110178c34 100644 --- a/datafusion/optimizer/src/replace_distinct_aggregate.rs +++ b/datafusion/optimizer/src/replace_distinct_aggregate.rs @@ -26,7 +26,7 @@ use datafusion_common::{Column, Result}; use datafusion_expr::expr_rewriter::normalize_cols; use datafusion_expr::utils::expand_wildcard; use datafusion_expr::{Aggregate, Distinct, DistinctOn, Expr, LogicalPlan}; -use datafusion_expr::{ExprFunctionExt, Limit, LogicalPlanBuilder, col, lit}; +use datafusion_expr::{ExprFunctionExt, Limit, LogicalPlanBuilder, lit}; /// Optimizer that replaces logical [[Distinct]] with a logical [[Aggregate]] /// @@ -179,7 +179,7 @@ impl OptimizerRule for ReplaceDistinctWithAggregate { .skip(expr_cnt) .zip(schema.iter()) .map(|((new_qualifier, new_field), (old_qualifier, old_field))| { - col(Column::from((new_qualifier, new_field))) + Expr::Column(Column::from((new_qualifier, new_field))) .alias_qualified(old_qualifier.cloned(), old_field.name()) }) .collect::>(); diff --git a/datafusion/optimizer/src/simplify_expressions/simplify_predicates.rs b/datafusion/optimizer/src/simplify_expressions/simplify_predicates.rs index e811ce7313102..75afdbd744f77 100644 --- a/datafusion/optimizer/src/simplify_expressions/simplify_predicates.rs +++ b/datafusion/optimizer/src/simplify_expressions/simplify_predicates.rs @@ -300,7 +300,7 @@ mod tests { // Test that it still extracts from direct column references let col_expr = col("a"); - assert_eq!(extract_column_from_expr(&col_expr), Some(Column::from("a"))); + assert_eq!(extract_column_from_expr(&col_expr), Some(Column::from_qualified_name("a"))); } #[test] diff --git a/datafusion/sql/src/unparser/rewrite.rs b/datafusion/sql/src/unparser/rewrite.rs index ec1b17cd28a91..1f0d022e01e61 100644 --- a/datafusion/sql/src/unparser/rewrite.rs +++ b/datafusion/sql/src/unparser/rewrite.rs @@ -202,19 +202,19 @@ pub(super) fn rewrite_plan_for_sort_on_non_projected_fields( .enumerate() .map(|(i, f)| match f { Expr::Alias(alias) => { - let a = Expr::Column(alias.name.clone().into()); + let a = Expr::Column(Column::from_qualified_name(alias.name.clone())); map.insert(a.clone(), f.clone()); a } Expr::Column(_) => { map.insert( - Expr::Column(inner_p.schema.field(i).name().into()), + Expr::Column(Column::from_qualified_name(inner_p.schema.field(i).name())), f.clone(), ); f.clone() } _ => { - let a = Expr::Column(inner_p.schema.field(i).name().into()); + let a = Expr::Column(Column::from_qualified_name(inner_p.schema.field(i).name())); map.insert(a.clone(), f.clone()); a } diff --git a/datafusion/sql/tests/cases/plan_to_sql.rs b/datafusion/sql/tests/cases/plan_to_sql.rs index 46a42ae534af0..f17f4c58cc79f 100644 --- a/datafusion/sql/tests/cases/plan_to_sql.rs +++ b/datafusion/sql/tests/cases/plan_to_sql.rs @@ -1773,7 +1773,7 @@ fn test_join_with_table_scan_filters() -> Result<()> { .join( right_plan.clone(), datafusion_expr::JoinType::Inner, - (vec!["left.id"], vec!["right_table.id"]), + (vec![Column::from_qualified_name("left.id")], vec![Column::from_qualified_name("right_table.id")]), Some(col("left.id").gt(lit(5))), )? .build()?; @@ -1788,7 +1788,7 @@ fn test_join_with_table_scan_filters() -> Result<()> { .join( right_plan, datafusion_expr::JoinType::Inner, - (vec!["left.id"], vec!["right_table.id"]), + (vec![Column::from_qualified_name("left.id")], vec![Column::from_qualified_name("right_table.id")]), None, )? .build()?; @@ -1812,7 +1812,7 @@ fn test_join_with_table_scan_filters() -> Result<()> { .join( right_plan_with_filter, datafusion_expr::JoinType::Inner, - (vec!["left.id"], vec!["right_table.id"]), + (vec![Column::from_qualified_name("left.id")], vec![Column::from_qualified_name("right_table.id")]), Some(col("left.id").gt(lit(5))), )? .filter(col("left.name").eq(lit("after_join_filter_val")))? @@ -1843,7 +1843,7 @@ fn test_join_with_table_scan_filters() -> Result<()> { .join( right_plan_with_duplicated_filter, datafusion_expr::JoinType::Inner, - (vec!["left.id"], vec!["right_table.id"]), + (vec![Column::from_qualified_name("left.id")], vec![Column::from_qualified_name("right_table.id")]), Some(col("left.id").gt(lit(5))), )? .build()?; diff --git a/datafusion/substrait/src/logical_plan/consumer/plan.rs b/datafusion/substrait/src/logical_plan/consumer/plan.rs index d5e10fb604017..26a19e0223e27 100644 --- a/datafusion/substrait/src/logical_plan/consumer/plan.rs +++ b/datafusion/substrait/src/logical_plan/consumer/plan.rs @@ -20,7 +20,7 @@ use super::{DefaultSubstraitConsumer, SubstraitConsumer}; use crate::extensions::Extensions; use datafusion::common::{not_impl_err, plan_err}; use datafusion::execution::SessionState; -use datafusion::logical_expr::{Aggregate, LogicalPlan, Projection, col}; +use datafusion::logical_expr::{Aggregate, Expr, LogicalPlan, Projection}; use std::sync::Arc; use substrait::proto::{Plan, plan_rel}; @@ -107,7 +107,7 @@ pub async fn from_substrait_plan_with_consumer( plan.schema() .columns() .iter() - .map(|c| col(c.to_owned())), + .map(|c| Expr::Column(c.clone())), plan.schema(), renamed_schema.fields(), )?, diff --git a/datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs b/datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs index 3604630d6f0bb..37dfe5fc521cd 100644 --- a/datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs +++ b/datafusion/substrait/src/logical_plan/consumer/rel/join_rel.rs @@ -75,7 +75,7 @@ pub async fn from_join_rel( .build() } None => { - let on: Vec = vec![]; + let on: Vec = vec![]; left.join_detailed( right.build()?, join_type, diff --git a/datafusion/substrait/src/logical_plan/producer/expr/mod.rs b/datafusion/substrait/src/logical_plan/producer/expr/mod.rs index 5057564d370cf..35771e676f988 100644 --- a/datafusion/substrait/src/logical_plan/producer/expr/mod.rs +++ b/datafusion/substrait/src/logical_plan/producer/expr/mod.rs @@ -168,7 +168,7 @@ mod tests { use super::*; use crate::logical_plan::consumer::from_substrait_extended_expr; use datafusion::arrow::datatypes::{DataType, Schema}; - use datafusion::common::{DFSchema, DataFusionError, ScalarValue}; + use datafusion::common::{Column, DFSchema, DataFusionError, ScalarValue}; use datafusion::execution::SessionStateBuilder; #[tokio::test] @@ -191,8 +191,8 @@ mod tests { assert_eq!(rt_expr, &expr); // Multiple expressions, with column references - let expr1 = Expr::Column("c0".into()); - let expr2 = Expr::Column("c1".into()); + let expr1 = Expr::Column(Column::from_qualified_name("c0")); + let expr2 = Expr::Column(Column::from_qualified_name("c1")); let out1 = Field::new("out1", DataType::Int32, true); let out2 = Field::new("out2", DataType::Utf8, true); let input_schema = DFSchemaRef::new(DFSchema::try_from(Schema::new(vec![ @@ -228,7 +228,7 @@ mod tests { let state = SessionStateBuilder::default().build(); // Not ok if input schema is missing field referenced by expr - let expr = Expr::Column("missing".into()); + let expr = Expr::Column(Column::from_qualified_name("missing")); let field = Field::new("out", DataType::Int32, false); let empty_schema = DFSchemaRef::new(DFSchema::empty());