@@ -22,15 +22,15 @@ use datafusion_expr::planner::{
2222} ;
2323use sqlparser:: ast:: {
2424 BinaryOperator , CastFormat , CastKind , DataType as SQLDataType , DictionaryField ,
25- Expr as SQLExpr , MapEntry , StructField , Subscript , TrimWhereField , Value ,
25+ Expr as SQLExpr , ExprWithAlias as SQLExprWithAlias , MapEntry , StructField , Subscript ,
26+ TrimWhereField , Value ,
2627} ;
2728
2829use datafusion_common:: {
2930 internal_datafusion_err, internal_err, not_impl_err, plan_err, DFSchema , Result ,
3031 ScalarValue ,
3132} ;
32- use datafusion_expr:: expr:: ScalarFunction ;
33- use datafusion_expr:: expr:: { InList , WildcardOptions } ;
33+ use datafusion_expr:: expr:: { InList , ScalarFunction , WildcardOptions } ;
3434use datafusion_expr:: {
3535 lit, Between , BinaryExpr , Cast , Expr , ExprSchemable , GetFieldAccess , Like , Literal ,
3636 Operator , TryCast ,
@@ -49,6 +49,19 @@ mod unary_op;
4949mod value;
5050
5151impl < ' a , S : ContextProvider > SqlToRel < ' a , S > {
52+ pub ( crate ) fn sql_expr_to_logical_expr_with_alias (
53+ & self ,
54+ sql : SQLExprWithAlias ,
55+ schema : & DFSchema ,
56+ planner_context : & mut PlannerContext ,
57+ ) -> Result < Expr > {
58+ let mut expr =
59+ self . sql_expr_to_logical_expr ( sql. expr , schema, planner_context) ?;
60+ if let Some ( alias) = sql. alias {
61+ expr = expr. alias ( alias. value ) ;
62+ }
63+ Ok ( expr)
64+ }
5265 pub ( crate ) fn sql_expr_to_logical_expr (
5366 & self ,
5467 sql : SQLExpr ,
@@ -130,6 +143,20 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
130143 ) ) )
131144 }
132145
146+ pub fn sql_to_expr_with_alias (
147+ & self ,
148+ sql : SQLExprWithAlias ,
149+ schema : & DFSchema ,
150+ planner_context : & mut PlannerContext ,
151+ ) -> Result < Expr > {
152+ let mut expr =
153+ self . sql_expr_to_logical_expr_with_alias ( sql, schema, planner_context) ?;
154+ expr = self . rewrite_partial_qualifier ( expr, schema) ;
155+ self . validate_schema_satisfies_exprs ( schema, & [ expr. clone ( ) ] ) ?;
156+ let expr = expr. infer_placeholder_types ( schema) ?;
157+ Ok ( expr)
158+ }
159+
133160 /// Generate a relational expression from a SQL expression
134161 pub fn sql_to_expr (
135162 & self ,
0 commit comments