gruuya opened a new issue, #20818:
URL: https://github.com/apache/datafusion/issues/20818

   ### Describe the bug
   
   When a query involving set expressions (UNION, EXCEPT, INTERSECT):
   
   1.  provides field names in the first SELECT
   2. but some other SELECTs don't, and
   3. these also contain more than one literal of the same value
   
   then the projection validation logic (`validate_unique_names`) will error 
out.
   
   ### To Reproduce
   
   ```sql
   > SELECT 1 c1, 0 c2, 0 c3 UNION ALL SELECT 2, 0, 0;
   Error during planning: Projections require unique expression names but the 
expression "Int64(0)" at position 1 and "Int64(0)" at position 2 have the same 
name. Consider aliasing ("AS") one of them.
   ```
   
   This is all the more frustrating since the field names for the all other 
SELECTs but the first are actually discarded in the final output, so they're 
effectively a throw-away input to abide by the projection validation logic
   ```sql
   > SELECT 1 c1, 0 c2, 0 c3 UNION ALL SELECT 2 as a, 0 as b, 0 as c;
   +----+----+----+
   | c1 | c2 | c3 |
   +----+----+----+
   | 2  | 0  | 0  |
   | 1  | 0  | 0  |
   +----+----+----+
   2 row(s) fetched.
   ```
   
   ### Expected behavior
   
   ```sql
   >  SELECT 1 c1, 0 c2, 0 c3 UNION ALL SELECT 2, 0, 0;
   +----+----+----+
   | c1 | c2 | c3 |
   +----+----+----+
   | 2  | 0  | 0  |
   | 1  | 0  | 0  |
   +----+----+----+
   2 row(s) fetched. 
   ```
   
   ### Additional context
   
   This works as expected in Postgres
   ```sql
   postgres@localhost:postgres> SELECT 1 c1, 0 c2, 0 c3 UNION ALL SELECT 2, 0, 
0;
   +----+----+----+
   | c1 | c2 | c3 |
   |----+----+----|
   | 1  | 0  | 0  |
   | 2  | 0  | 0  |
   +----+----+----+
   SELECT 2
   ```
   and DuckDB
   ```sql
   D SELECT 1 c1, 0 c2, 0 c3 UNION ALL SELECT 2, 0, 0;
   ┌───────┬───────┬───────┐
   │  c1   │  c2   │  c3   │
   │ int32 │ int32 │ int32 │
   ├───────┼───────┼───────┤
   │     1 │     0 │     0 │
   │     2 │     0 │     0 │
   └───────┴───────┴───────┘
   ```


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to