Description
Is your feature request related to a problem or challenge? Please describe what you are trying to do.
Currently a named expression / alias can be encoded by wrapping an existing Expr
in an Expr::Alias
.
However, this has some side effects:
-
We can encode expressions that don't make sense, such as
(1 + 1 AS x) AS y
or(1 AS X) + (1 AS Y)
(in SQL it's disallowed by the parser, but it's just to show it is possible to do this in the DataFrame API or the raw API. In dataframes we could do things likeexpr.alias("x").alias("y")
. -
Code dealing with
Expr
always have to deal with theAlias
case, even when it doesn't care. This could lead to more complex code or even subtle bugs.
Describe the solution you'd like
- Create a new struct,
NamedExpr
that is used to refer to a named expression
struct NamedExpr {
/// Alias or generated name
name: String,
/// The expression
expr: Expr,
}
-
The
NamedExpr
now can be used inside projections, aggregates, etc. -
The function
alias
onDataFrame
should return anNamedExpr
-
Add an
impl From<Expr> for NamedExpr
that generates a name. -
Some functions can accept Into to keep being ergonomic to use.
Describe alternatives you've considered
Additional context