apache / datafusion

Apache DataFusion SQL Query Engine
https://datafusion.apache.org/
Apache License 2.0
6.33k stars 1.2k forks source link

Unparse inner join with no conditions as a cross join #13459

Closed phillipleblanc closed 3 days ago

phillipleblanc commented 4 days ago

Describe the bug

As part of the upgrade to DataFusion v43, we found that the CrossJoin logical plan node was removed in DataFusion (https://github.com/apache/datafusion/pull/12985), replacing it with a JOIN with no conditions.

i.e. in DataFusion the following two statements are logically similar:

SELECT * FROM t1 JOIN t2;
SELECT * FROM t1 CROSS JOIN t2;

This is not true for all databases systems, like Postgres/SQL Server - which will interpret the JOIN as an inner join, which then errors out that no conditions were specified: SELECT * FROM t1 JOIN t2 -- Error: syntax error at or near "JOIN"

For the unparser, we should return an explicit CROSS JOIN when we unparser a JOIN with no conditions.

To Reproduce

Run the unparser for the following query:

SELECT * FROM t1 CROSS JOIN t2 and observe it gets unparsed to SELECT * FROM t1 JOIN t2

Expected behavior

SELECT * FROM t1 CROSS JOIN t2 and SELECT * FROM t1 JOIN t2 are unparsed to SELECT * FROM t1 CROSS JOIN t2

Additional context

No response