apache / apache/datafusion-sqlparser-rs
How to interprete 'B = T1.A' and 'T1.A AS B' as equivalent? (convert "UnnamedExpr" with "op": "Eq" into "ExprWithAlias")
- Dominant language
- Rust
- Stars
- 3.5k
- Forks
- 772
- Avg merge
- 4d 9h
- Merged PRs (30d)
- 17
Description
in views mssqlserver allows 2 ways to define a columns alias. I would like to "normalize" the representation in json. I would like to have the same style in JSON for the same logic. There could be a property to indicate how this was in the original expression to not lost this information.
The best would be, if I could convert the presentation of `B = T1.A` into the presentation of `T1.A AS B`
but it would also be OK to convert `T1.C AS D` into `D = T1.C`
```sql
CREATE VIEW aaa.test01 AS SELECT B = T1.A, T1.C AS D FROM aaa.bbb AS T1
```
Serialized as JSON:
```json
[
{
"CreateView": {
"or_replace": false,
"materialized": false,
"name": [
{
"value": "aaa",
"quote_style": null
},
{
"value": "test01",
"quote_style": null
}
],
"columns": [],
"query": {
"ctes": [],
"body": {
"Select": {
"distinct": false,
"top": null,
"projection": [
{
"UnnamedExpr": {
"BinaryOp": {
"left": {
"Identifier": {
"value": "B",
"quote_style": null
}
},
"op": "Eq",
"right": {
"CompoundIdentifier": [
{
"value": "T1",
"quote_style": null
},
{
"value": "A",
"quote_style": null
}
]
}
}
}
},
{
"ExprWithAlias": {
"expr": {
"CompoundIdentifier": [
{
"value": "T1",
"quote_style": null
},
{
"value": "C",
"quote_style": null
}
]
},
"alias": {
"value": "D",
"quote_style": null
}
}
}
],
"from": [
{
"relation": {
"Table": {
"name": [
{
"value": "aaa",
"quote_style": null
},
{
"value": "bbb",
"quote_style": null
}
],
"alias": {
"name": {
"value": "T1",
"quote_style": null
},
"columns": []
},
"args": [],
"with_hints": []
}
},
"joins": []
}
],
"selection": null,
"group_by": [],
"having": null
}
},
"order_by": [],
"limit": null,
"offset": null,
"fetch": null
},
"with_options": []
}
}
]
```
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by tracing how the SQL parser represents the `UnnamedExpr`/`BinaryOp` form and the `ExprWithAlias` form shown in the issue's JSON. Define how equivalent SQL Server aliases should normalize and how the original presentation would be preserved, then verify both CREATE VIEW examples serialize consistently.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, sql
- Domain
- compilers
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 30/100