Adding upstream version 25.24.5.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
a0663ae805
commit
7af32ea9ec
80 changed files with 61531 additions and 59444 deletions
|
@ -8,6 +8,7 @@ from sqlglot.helper import find_new_name, name_sequence
|
|||
|
||||
|
||||
if t.TYPE_CHECKING:
|
||||
from sqlglot._typing import E
|
||||
from sqlglot.generator import Generator
|
||||
|
||||
|
||||
|
@ -628,16 +629,28 @@ def eliminate_full_outer_join(expression: exp.Expression) -> exp.Expression:
|
|||
expression_copy = expression.copy()
|
||||
expression.set("limit", None)
|
||||
index, full_outer_join = full_outer_joins[0]
|
||||
full_outer_join.set("side", "left")
|
||||
expression_copy.args["joins"][index].set("side", "right")
|
||||
expression_copy.args.pop("with", None) # remove CTEs from RIGHT side
|
||||
|
||||
return exp.union(expression, expression_copy, copy=False)
|
||||
tables = (expression.args["from"].alias_or_name, full_outer_join.alias_or_name)
|
||||
join_conditions = full_outer_join.args.get("on") or exp.and_(
|
||||
*[
|
||||
exp.column(col, tables[0]).eq(exp.column(col, tables[1]))
|
||||
for col in full_outer_join.args.get("using")
|
||||
]
|
||||
)
|
||||
|
||||
full_outer_join.set("side", "left")
|
||||
anti_join_clause = exp.select("1").from_(expression.args["from"]).where(join_conditions)
|
||||
expression_copy.args["joins"][index].set("side", "right")
|
||||
expression_copy = expression_copy.where(exp.Exists(this=anti_join_clause).not_())
|
||||
expression_copy.args.pop("with", None) # remove CTEs from RIGHT side
|
||||
expression.args.pop("order", None) # remove order by from LEFT side
|
||||
|
||||
return exp.union(expression, expression_copy, copy=False, distinct=False)
|
||||
|
||||
return expression
|
||||
|
||||
|
||||
def move_ctes_to_top_level(expression: exp.Expression) -> exp.Expression:
|
||||
def move_ctes_to_top_level(expression: E) -> E:
|
||||
"""
|
||||
Some dialects (e.g. Hive, T-SQL, Spark prior to version 3) only allow CTEs to be
|
||||
defined at the top-level, so for example queries like:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue