Substrait doesn't support alias in projection
Describe the bug
SQLs like these will fail:
SELECT a as alias_a, a FROM data;
or
SELECT a as alias_a FROM data ORDER BY a;
The error message looks like
Error: Plan("Projections require unique expression names but the expression \"data.a\" at position 0 and \"data.a\" at position 1 have the same name. Consider aliasing (\"AS\") one of them.")
To Reproduce
Adding case in datafusion/substrait/tests/roundtrip_logical_plan.rs like:
#[tokio::test]
async fn roundtrip_alias_in_projection() -> Result<()> {
roundtrip("SELECT a as alias_a, a FROM data").await
}
Expected behavior
It should generate correct LogicalPlan without error
Additional context
No response
https://github.com/apache/arrow-datafusion/pull/5077/files#diff-7bd0ab7829b96498566ab887a4003134c38092e96441b8f5c8ccdb297478884eR384-R386 processes Expr::Alias but it isn't supported yet.
#[tokio::test]
async fn roundtrip_field_alias() -> Result<()> {
roundtrip("SELECT data.a as b FROM data").await
}
Fails with
Projection: data.a AS b
TableScan: data projection=[a]
TableScan: data projection=[a]
thread 'cases::roundtrip_logical_plan::roundtrip_field_alias' panicked at 'assertion failed: `(left == right)`
left: `"Projection: data.a AS b\n TableScan: data projection=[a]"`,
right: `"TableScan: data projection=[a]"`
Looks like it was fix in https://github.com/apache/datafusion/pull/10829
Yea @waynexia I think this one should be fixed!
The included test case almost works, the plan isn't exactly the same after the roundtrip, but effectively still the same:
assertion `left == right` failed
left: "Projection: data.a AS alias_a, data.a\n TableScan: data projection=[a]"
right: "Projection: data.a AS alias_a, data.a AS data.a__temp__0 AS a\n TableScan: data projection=[a]"