-
Notifications
You must be signed in to change notification settings - Fork 1.8k
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 yor(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
Expralways have to deal with theAliascase, 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,
NamedExprthat is used to refer to a named expression
struct NamedExpr {
/// Alias or generated name
name: String,
/// The expression
expr: Expr,
}-
The
NamedExprnow can be used inside projections, aggregates, etc. -
The function
aliasonDataFrameshould return anNamedExpr -
Add an
impl From<Expr> for NamedExprthat generates a name. -
Some functions can accept Into to keep being ergonomic to use.
Describe alternatives you've considered
Additional context