From 4d308a2e6238565f8790e36f9df8e1ae2b082cbb Mon Sep 17 00:00:00 2001 From: batmanknows <122247678+batmnnn@users.noreply.github.com> Date: Thu, 23 Oct 2025 16:54:57 +0530 Subject: [PATCH 01/12] replaced data_type to field_ref --- datafusion/expr/src/expr.rs | 6 +++--- datafusion/expr/src/expr_schema.rs | 12 ++++++------ datafusion/expr/src/planner.rs | 14 +++++++++++++- datafusion/sql/src/expr/identifier.rs | 14 ++++++++------ datafusion/sql/src/unparser/expr.rs | 7 +++++-- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/datafusion/expr/src/expr.rs b/datafusion/expr/src/expr.rs index 282b3f6a0f55c..431ef8cee6b80 100644 --- a/datafusion/expr/src/expr.rs +++ b/datafusion/expr/src/expr.rs @@ -311,7 +311,7 @@ pub enum Expr { /// A named reference to a qualified field in a schema. Column(Column), /// A named reference to a variable in a registry. - ScalarVariable(DataType, Vec), + ScalarVariable(FieldRef, Vec), /// A constant value along with associated [`FieldMetadata`]. Literal(ScalarValue, Option), /// A binary expression such as "age > 21" @@ -2737,8 +2737,8 @@ impl HashNode for Expr { Expr::Column(column) => { column.hash(state); } - Expr::ScalarVariable(data_type, name) => { - data_type.hash(state); + Expr::ScalarVariable(field, name) => { + field.hash(state); name.hash(state); } Expr::Literal(scalar_value, _) => { diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index e803e35341305..d05198b579e4a 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -113,7 +113,7 @@ impl ExprSchemable for Expr { Expr::Negative(expr) => expr.get_type(schema), Expr::Column(c) => Ok(schema.data_type(c)?.clone()), Expr::OuterReferenceColumn(field, _) => Ok(field.data_type().clone()), - Expr::ScalarVariable(ty, _) => Ok(ty.clone()), + Expr::ScalarVariable(field, _) => Ok(field.data_type().clone()), Expr::Literal(l, _) => Ok(l.data_type()), Expr::Case(case) => { for (_, then_expr) in &case.when_then_expr { @@ -309,8 +309,8 @@ impl ExprSchemable for Expr { window_function, ) .map(|(_, nullable)| nullable), - Expr::ScalarVariable(_, _) - | Expr::TryCast { .. } + Expr::ScalarVariable(field, _) => Ok(field.is_nullable()), + Expr::TryCast { .. } | Expr::Unnest(_) | Expr::Placeholder(_) => Ok(true), Expr::IsNull(_) @@ -460,9 +460,9 @@ impl ExprSchemable for Expr { Expr::OuterReferenceColumn(field, _) => { Ok(Arc::new(field.as_ref().clone().with_name(&schema_name))) } - Expr::ScalarVariable(ty, _) => { - Ok(Arc::new(Field::new(&schema_name, ty.clone(), true))) - } + Expr::ScalarVariable(field, _) => Ok(Arc::new( + field.as_ref().clone().with_name(&schema_name), + )), Expr::Literal(l, metadata) => { let mut field = Field::new(&schema_name, l.data_type(), l.is_null()); if let Some(metadata) = metadata { diff --git a/datafusion/expr/src/planner.rs b/datafusion/expr/src/planner.rs index 25a0f83947eee..a337b6633e9bc 100644 --- a/datafusion/expr/src/planner.rs +++ b/datafusion/expr/src/planner.rs @@ -25,7 +25,7 @@ use crate::{ AggregateUDF, Expr, GetFieldAccess, ScalarUDF, SortExpr, TableSource, WindowFrame, WindowFunctionDefinition, WindowUDF, }; -use arrow::datatypes::{DataType, Field, SchemaRef}; +use arrow::datatypes::{DataType, Field, FieldRef, SchemaRef}; use datafusion_common::{ config::ConfigOptions, file_options::file_type::FileType, not_impl_err, DFSchema, Result, TableReference, @@ -103,6 +103,18 @@ pub trait ContextProvider { /// A user defined variable is typically accessed via `@var_name` fn get_variable_type(&self, variable_names: &[String]) -> Option; + /// Return metadata about a system/user-defined variable, if any. + /// + /// By default, this wraps [`Self::get_variable_type`] in an Arrow [`Field`] + /// with nullable set to `true` and no metadata. Implementations that can + /// provide richer information (such as nullability or extension metadata) + /// should override this method. + fn get_variable_field(&self, variable_names: &[String]) -> Option { + self.get_variable_type(variable_names).map(|data_type| { + Arc::new(Field::new("", data_type, true)) as FieldRef + }) + } + /// Return overall configuration options fn options(&self) -> &ConfigOptions; diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index 3c57d195ade67..a6cfb8cde45a5 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -39,13 +39,14 @@ impl SqlToRel<'_, S> { if id.value.starts_with('@') { // TODO: figure out if ScalarVariables should be insensitive. let var_names = vec![id.value]; - let ty = self + let field = self .context_provider - .get_variable_type(&var_names) + .get_variable_field(&var_names) + .or_else(|| self.context_provider.get_variable_type(&var_names).map(|ty| Arc::new(Field::new("", ty, true)))) .ok_or_else(|| { plan_datafusion_err!("variable {var_names:?} has no type information") })?; - Ok(Expr::ScalarVariable(ty, var_names)) + Ok(Expr::ScalarVariable(field, var_names)) } else { // Don't use `col()` here because it will try to // interpret names with '.' as if they were @@ -113,13 +114,14 @@ impl SqlToRel<'_, S> { .into_iter() .map(|id| self.ident_normalizer.normalize(id)) .collect(); - let ty = self + let field = self .context_provider - .get_variable_type(&var_names) + .get_variable_field(&var_names) + .or_else(|| self.context_provider.get_variable_type(&var_names).map(|ty| Arc::new(Field::new("", ty, true)))) .ok_or_else(|| { exec_datafusion_err!("variable {var_names:?} has no type information") })?; - Ok(Expr::ScalarVariable(ty, var_names)) + Ok(Expr::ScalarVariable(field, var_names)) } else { let ids = ids .into_iter() diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index a7fe8efa153c9..955b8bd892da9 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -2169,12 +2169,15 @@ mod tests { r#"TRY_CAST(a AS INTEGER UNSIGNED)"#, ), ( - Expr::ScalarVariable(Int8, vec![String::from("@a")]), + Expr::ScalarVariable( + Arc::new(Field::new("", Int8, true)), + vec![String::from("@a")], + ), r#"@a"#, ), ( Expr::ScalarVariable( - Int8, + Arc::new(Field::new("", Int8, true)), vec![String::from("@root"), String::from("foo")], ), r#"@root.foo"#, From 5fdf4533aa5d3539ac54b61f3ec9562a2ffe4554 Mon Sep 17 00:00:00 2001 From: batmanknows <122247678+batmnnn@users.noreply.github.com> Date: Fri, 24 Oct 2025 02:25:31 +0530 Subject: [PATCH 02/12] updated formatting --- .../T/.tmpU3MvU3/target.csv\"" | 0 datafusion/expr/src/expr_schema.rs | 10 ++++------ datafusion/expr/src/planner.rs | 5 ++--- datafusion/sql/src/expr/identifier.rs | 12 ++++++++++-- 4 files changed, 16 insertions(+), 11 deletions(-) create mode 100644 "datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" diff --git "a/datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" "b/datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index d05198b579e4a..5daf91e2b3306 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -310,9 +310,7 @@ impl ExprSchemable for Expr { ) .map(|(_, nullable)| nullable), Expr::ScalarVariable(field, _) => Ok(field.is_nullable()), - Expr::TryCast { .. } - | Expr::Unnest(_) - | Expr::Placeholder(_) => Ok(true), + Expr::TryCast { .. } | Expr::Unnest(_) | Expr::Placeholder(_) => Ok(true), Expr::IsNull(_) | Expr::IsNotNull(_) | Expr::IsTrue(_) @@ -460,9 +458,9 @@ impl ExprSchemable for Expr { Expr::OuterReferenceColumn(field, _) => { Ok(Arc::new(field.as_ref().clone().with_name(&schema_name))) } - Expr::ScalarVariable(field, _) => Ok(Arc::new( - field.as_ref().clone().with_name(&schema_name), - )), + Expr::ScalarVariable(field, _) => { + Ok(Arc::new(field.as_ref().clone().with_name(&schema_name))) + } Expr::Literal(l, metadata) => { let mut field = Field::new(&schema_name, l.data_type(), l.is_null()); if let Some(metadata) = metadata { diff --git a/datafusion/expr/src/planner.rs b/datafusion/expr/src/planner.rs index a337b6633e9bc..46e9b9b45d2ac 100644 --- a/datafusion/expr/src/planner.rs +++ b/datafusion/expr/src/planner.rs @@ -110,9 +110,8 @@ pub trait ContextProvider { /// provide richer information (such as nullability or extension metadata) /// should override this method. fn get_variable_field(&self, variable_names: &[String]) -> Option { - self.get_variable_type(variable_names).map(|data_type| { - Arc::new(Field::new("", data_type, true)) as FieldRef - }) + self.get_variable_type(variable_names) + .map(|data_type| Arc::new(Field::new("", data_type, true)) as FieldRef) } /// Return overall configuration options diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index a6cfb8cde45a5..d2815abc73bbf 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -42,7 +42,11 @@ impl SqlToRel<'_, S> { let field = self .context_provider .get_variable_field(&var_names) - .or_else(|| self.context_provider.get_variable_type(&var_names).map(|ty| Arc::new(Field::new("", ty, true)))) + .or_else(|| { + self.context_provider + .get_variable_type(&var_names) + .map(|ty| Arc::new(Field::new("", ty, true))) + }) .ok_or_else(|| { plan_datafusion_err!("variable {var_names:?} has no type information") })?; @@ -117,7 +121,11 @@ impl SqlToRel<'_, S> { let field = self .context_provider .get_variable_field(&var_names) - .or_else(|| self.context_provider.get_variable_type(&var_names).map(|ty| Arc::new(Field::new("", ty, true)))) + .or_else(|| { + self.context_provider + .get_variable_type(&var_names) + .map(|ty| Arc::new(Field::new("", ty, true))) + }) .ok_or_else(|| { exec_datafusion_err!("variable {var_names:?} has no type information") })?; From 3515648ed38e174ffa76705cd3b05231e90da514 Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:10:28 +0530 Subject: [PATCH 03/12] Update datafusion/sql/src/expr/identifier.rs Co-authored-by: Dewey Dunnington --- datafusion/sql/src/expr/identifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index d2815abc73bbf..a71437bba0240 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -45,7 +45,7 @@ impl SqlToRel<'_, S> { .or_else(|| { self.context_provider .get_variable_type(&var_names) - .map(|ty| Arc::new(Field::new("", ty, true))) + .map(|ty| ty.into_nullable_field_ref()) }) .ok_or_else(|| { plan_datafusion_err!("variable {var_names:?} has no type information") From 71f0d20076a56c7a1d063cdd7592beede5098a2f Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:10:45 +0530 Subject: [PATCH 04/12] Update datafusion/sql/src/expr/identifier.rs Co-authored-by: Dewey Dunnington --- datafusion/sql/src/expr/identifier.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index a71437bba0240..e408a5eca3c6d 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -124,7 +124,7 @@ impl SqlToRel<'_, S> { .or_else(|| { self.context_provider .get_variable_type(&var_names) - .map(|ty| Arc::new(Field::new("", ty, true))) + .map(|ty| ty.into_nullable_field_ref()) }) .ok_or_else(|| { exec_datafusion_err!("variable {var_names:?} has no type information") From 4ccc186ec307ac3aff93629bbba0393126921802 Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:10:51 +0530 Subject: [PATCH 05/12] Update datafusion/sql/src/unparser/expr.rs Co-authored-by: Dewey Dunnington --- datafusion/sql/src/unparser/expr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index 955b8bd892da9..9dfef54f3fc0f 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -2177,7 +2177,7 @@ mod tests { ), ( Expr::ScalarVariable( - Arc::new(Field::new("", Int8, true)), + Int8.into_nullable_field_ref(), vec![String::from("@root"), String::from("foo")], ), r#"@root.foo"#, From 35899808f2e753325622d9bc30a2a2893cbf05b8 Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:11:02 +0530 Subject: [PATCH 06/12] Update datafusion/sql/src/unparser/expr.rs Co-authored-by: Dewey Dunnington --- datafusion/sql/src/unparser/expr.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index 9dfef54f3fc0f..8c1032eae49c0 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -2170,7 +2170,7 @@ mod tests { ), ( Expr::ScalarVariable( - Arc::new(Field::new("", Int8, true)), + Int8.into_nullable_field_ref(), vec![String::from("@a")], ), r#"@a"#, From ee8466be7a1b3c8aa10ff55a9f25248c7e128890 Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:11:10 +0530 Subject: [PATCH 07/12] Update datafusion/expr/src/planner.rs Co-authored-by: Dewey Dunnington --- datafusion/expr/src/planner.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/datafusion/expr/src/planner.rs b/datafusion/expr/src/planner.rs index 46e9b9b45d2ac..39df2e9dedfb0 100644 --- a/datafusion/expr/src/planner.rs +++ b/datafusion/expr/src/planner.rs @@ -111,7 +111,7 @@ pub trait ContextProvider { /// should override this method. fn get_variable_field(&self, variable_names: &[String]) -> Option { self.get_variable_type(variable_names) - .map(|data_type| Arc::new(Field::new("", data_type, true)) as FieldRef) + .map(|data_type| data_type.into_nullable_field_ref()) } /// Return overall configuration options From 5fbed16b9abef93ea0ed8de0690c6d53ca79dba4 Mon Sep 17 00:00:00 2001 From: Shubham Yadav <122247678+batmnnn@users.noreply.github.com> Date: Thu, 30 Oct 2025 02:12:07 +0530 Subject: [PATCH 08/12] Delete datafusion/core/"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv" --- .../xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 "datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" diff --git "a/datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" "b/datafusion/core/\"/var/folders/xf/78z9wmtx4r9g_9pmytgm2ysm0000gn/T/.tmpU3MvU3/target.csv\"" deleted file mode 100644 index e69de29bb2d1d..0000000000000 From cdb985e21666ae66ee607bb0389e641a8574f76b Mon Sep 17 00:00:00 2001 From: batmanknows <122247678+batmnnn@users.noreply.github.com> Date: Mon, 1 Dec 2025 23:39:59 +0530 Subject: [PATCH 09/12] final fix --- datafusion/expr/src/expr_schema.rs | 17 +++++++++++++++++ datafusion/expr/src/planner.rs | 1 + 2 files changed, 18 insertions(+) diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index b7e968419571e..9c58cd34a1721 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -1007,4 +1007,21 @@ mod tests { Ok(&self.field) } } + + #[test] + fn test_scalar_variable() { + let mut meta = HashMap::new(); + meta.insert("bar".to_string(), "buzz".to_string()); + let meta = FieldMetadata::from(meta); + + let field = Field::new("foo", DataType::Int32, true); + let field = meta.add_to_field(field); + let field = Arc::new(field); + + let expr = Expr::ScalarVariable(field, vec!["foo".to_string()]); + + let schema = MockExprSchema::new(); + + assert_eq!(meta, expr.metadata(&schema).unwrap()); + } } diff --git a/datafusion/expr/src/planner.rs b/datafusion/expr/src/planner.rs index 39df2e9dedfb0..9c4201fe72599 100644 --- a/datafusion/expr/src/planner.rs +++ b/datafusion/expr/src/planner.rs @@ -26,6 +26,7 @@ use crate::{ WindowFunctionDefinition, WindowUDF, }; use arrow::datatypes::{DataType, Field, FieldRef, SchemaRef}; +use datafusion_common::datatype::DataTypeExt; use datafusion_common::{ config::ConfigOptions, file_options::file_type::FileType, not_impl_err, DFSchema, Result, TableReference, From 9e05ed43c60bd6ee995db9db7fdfac088abdfd9d Mon Sep 17 00:00:00 2001 From: batmanknows <122247678+batmnnn@users.noreply.github.com> Date: Tue, 2 Dec 2025 02:55:51 +0530 Subject: [PATCH 10/12] fixed --- datafusion/sql/src/expr/identifier.rs | 1 + datafusion/sql/src/unparser/expr.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index 5802c8ee25d12..e3334969b576b 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -20,6 +20,7 @@ use datafusion_common::{ assert_or_internal_err, exec_datafusion_err, internal_err, not_impl_err, plan_datafusion_err, plan_err, Column, DFSchema, Result, Span, TableReference, }; +use datafusion_common::datatype::DataTypeExt; use datafusion_expr::planner::PlannerResult; use datafusion_expr::{Case, Expr}; use sqlparser::ast::{CaseWhen, Expr as SQLExpr, Ident}; diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index 42cda7e3188e3..670a80a49a907 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -43,6 +43,7 @@ use datafusion_common::{ assert_eq_or_internal_err, assert_or_internal_err, internal_datafusion_err, internal_err, not_impl_err, plan_err, Column, Result, ScalarValue, }; +use datafusion_common::datatype::DataTypeExt; use datafusion_expr::{ expr::{Alias, Exists, InList, ScalarFunction, Sort, WindowFunction}, Between, BinaryExpr, Case, Cast, Expr, GroupingSet, Like, Operator, TryCast, From 3a63573f918ccdf69d1909691c49de913c1054aa Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Wed, 3 Dec 2025 10:58:07 -0500 Subject: [PATCH 11/12] Fix clippy --- datafusion/expr/src/expr_schema.rs | 4 ++-- datafusion/sql/src/unparser/expr.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index c97504f5ded18..12aa9e0aa71b1 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -1,4 +1,4 @@ -// Licensed to the Apache Software Foundation (ASF) under one + // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file @@ -506,7 +506,7 @@ impl ExprSchemable for Expr { Ok(Arc::clone(field).renamed(&schema_name)) } Expr::ScalarVariable(field, _) => { - Ok(Arc::new(field.as_ref().clone().with_name(&schema_name))) + Ok(Arc::clone(field).renamed(&schema_name)) } Expr::Literal(l, metadata) => Ok(Arc::new( Field::new(&schema_name, l.data_type(), l.is_null()) diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index 670a80a49a907..22007535820d2 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -43,7 +43,6 @@ use datafusion_common::{ assert_eq_or_internal_err, assert_or_internal_err, internal_datafusion_err, internal_err, not_impl_err, plan_err, Column, Result, ScalarValue, }; -use datafusion_common::datatype::DataTypeExt; use datafusion_expr::{ expr::{Alias, Exists, InList, ScalarFunction, Sort, WindowFunction}, Between, BinaryExpr, Case, Cast, Expr, GroupingSet, Like, Operator, TryCast, @@ -1785,6 +1784,7 @@ mod tests { use arrow::datatypes::{DataType::Int8, Field, Int32Type, Schema, TimeUnit}; use ast::ObjectName; use datafusion_common::{Spans, TableReference}; + use datafusion_common::datatype::DataTypeExt; use datafusion_expr::expr::WildcardOptions; use datafusion_expr::{ case, cast, col, cube, exists, grouping_set, interval_datetime_lit, From 9a4ad3f28010213629ca81fff2eb05982b68f557 Mon Sep 17 00:00:00 2001 From: Andrew Lamb Date: Wed, 3 Dec 2025 14:52:53 -0500 Subject: [PATCH 12/12] fmt --- datafusion/expr/src/expr_schema.rs | 6 ++---- datafusion/sql/src/expr/identifier.rs | 2 +- datafusion/sql/src/unparser/expr.rs | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/datafusion/expr/src/expr_schema.rs b/datafusion/expr/src/expr_schema.rs index 12aa9e0aa71b1..c7de681641f9f 100644 --- a/datafusion/expr/src/expr_schema.rs +++ b/datafusion/expr/src/expr_schema.rs @@ -1,4 +1,4 @@ - // Licensed to the Apache Software Foundation (ASF) under one +// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file @@ -505,9 +505,7 @@ impl ExprSchemable for Expr { Expr::OuterReferenceColumn(field, _) => { Ok(Arc::clone(field).renamed(&schema_name)) } - Expr::ScalarVariable(field, _) => { - Ok(Arc::clone(field).renamed(&schema_name)) - } + Expr::ScalarVariable(field, _) => Ok(Arc::clone(field).renamed(&schema_name)), Expr::Literal(l, metadata) => Ok(Arc::new( Field::new(&schema_name, l.data_type(), l.is_null()) .with_field_metadata_opt(metadata.as_ref()), diff --git a/datafusion/sql/src/expr/identifier.rs b/datafusion/sql/src/expr/identifier.rs index e3334969b576b..79f65e3f59b32 100644 --- a/datafusion/sql/src/expr/identifier.rs +++ b/datafusion/sql/src/expr/identifier.rs @@ -16,11 +16,11 @@ // under the License. use arrow::datatypes::FieldRef; +use datafusion_common::datatype::DataTypeExt; use datafusion_common::{ assert_or_internal_err, exec_datafusion_err, internal_err, not_impl_err, plan_datafusion_err, plan_err, Column, DFSchema, Result, Span, TableReference, }; -use datafusion_common::datatype::DataTypeExt; use datafusion_expr::planner::PlannerResult; use datafusion_expr::{Case, Expr}; use sqlparser::ast::{CaseWhen, Expr as SQLExpr, Ident}; diff --git a/datafusion/sql/src/unparser/expr.rs b/datafusion/sql/src/unparser/expr.rs index 22007535820d2..62e1927ccfa14 100644 --- a/datafusion/sql/src/unparser/expr.rs +++ b/datafusion/sql/src/unparser/expr.rs @@ -1783,8 +1783,8 @@ mod tests { use arrow::array::{LargeListArray, ListArray}; use arrow::datatypes::{DataType::Int8, Field, Int32Type, Schema, TimeUnit}; use ast::ObjectName; - use datafusion_common::{Spans, TableReference}; use datafusion_common::datatype::DataTypeExt; + use datafusion_common::{Spans, TableReference}; use datafusion_expr::expr::WildcardOptions; use datafusion_expr::{ case, cast, col, cube, exists, grouping_set, interval_datetime_lit,