Skip to content

Commit

Permalink
Fix: optimizer join needs on condition
Browse files Browse the repository at this point in the history
  • Loading branch information
tobymao committed Aug 29, 2023
1 parent d9f9e2e commit be56bc0
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 4 deletions.
7 changes: 6 additions & 1 deletion sqlglot/optimizer/optimize_joins.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,13 @@ def normalize(expression):
if not any(join.args.get(k) for k in JOIN_ATTRS):
join.set("kind", "CROSS")

if join.kind != "CROSS":
if join.kind == "CROSS":
join.set("on", None)
else:
join.set("kind", None)

if not join.args.get("on") and not join.args.get("using"):
join.set("on", exp.true())
return expression


Expand Down
12 changes: 9 additions & 3 deletions tests/fixtures/optimizer/optimize_joins.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,19 +14,25 @@ SELECT * FROM x INNER JOIN z ON x.id = z.id;
SELECT * FROM x JOIN z ON x.id = z.id;

SELECT * FROM x LEFT OUTER JOIN z;
SELECT * FROM x LEFT JOIN z;
SELECT * FROM x LEFT JOIN z ON TRUE;

SELECT * FROM x CROSS JOIN z;
SELECT * FROM x CROSS JOIN z;

SELECT * FROM x JOIN z;
SELECT * FROM x CROSS JOIN z;

SELECT * FROM x FULL JOIN z;
SELECT * FROM x FULL JOIN z ON TRUE;

SELECT * FROM x NATURAL JOIN z;
SELECT * FROM x NATURAL JOIN z;
SELECT * FROM x NATURAL JOIN z ON TRUE;

SELECT * FROM x RIGHT JOIN z;
SELECT * FROM x RIGHT JOIN z;
SELECT * FROM x RIGHT JOIN z ON TRUE;

SELECT * FROM x JOIN z USING (id);
SELECT * FROM x JOIN z USING (id);

SELECT * FROM x CROSS JOIN z ON TRUE;
SELECT * FROM x CROSS JOIN z;

0 comments on commit be56bc0

Please sign in to comment.