diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-04-07 12:35:04 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2023-04-07 12:35:04 +0000 |
commit | fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c (patch) | |
tree | 476513580a6824dfe34364f98f0dbf7f66d188f4 /sqlglot/optimizer | |
parent | Releasing debian version 11.4.5-1. (diff) | |
download | sqlglot-fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c.tar.xz sqlglot-fb7e79eb4c8d6e22b7324de4bb1ea9cd11b8da7c.zip |
Merging upstream version 11.5.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/optimizer')
-rw-r--r-- | sqlglot/optimizer/qualify_columns.py | 21 | ||||
-rw-r--r-- | sqlglot/optimizer/simplify.py | 5 |
2 files changed, 16 insertions, 10 deletions
diff --git a/sqlglot/optimizer/qualify_columns.py b/sqlglot/optimizer/qualify_columns.py index 5e40cf3..6eae2b5 100644 --- a/sqlglot/optimizer/qualify_columns.py +++ b/sqlglot/optimizer/qualify_columns.py @@ -143,12 +143,12 @@ def _expand_alias_refs(scope, resolver): selects = {} # Replace references to select aliases - def transform(node, *_): + def transform(node, source_first=True): if isinstance(node, exp.Column) and not node.table: table = resolver.get_table(node.name) # Source columns get priority over select aliases - if table: + if source_first and table: node.set("table", table) return node @@ -163,16 +163,21 @@ def _expand_alias_refs(scope, resolver): select = select.this return select.copy() + node.set("table", table) + elif isinstance(node, exp.Expression) and not isinstance(node, exp.Subqueryable): + exp.replace_children(node, transform, source_first) + return node for select in scope.expression.selects: - select.transform(transform, copy=False) - - for modifier in ("where", "group"): - part = scope.expression.args.get(modifier) + transform(select) - if part: - part.transform(transform, copy=False) + for modifier, source_first in ( + ("where", True), + ("group", True), + ("having", False), + ): + transform(scope.expression.args.get(modifier), source_first=source_first) def _expand_group_by(scope, resolver): diff --git a/sqlglot/optimizer/simplify.py b/sqlglot/optimizer/simplify.py index 1ed3ca2..28ae86d 100644 --- a/sqlglot/optimizer/simplify.py +++ b/sqlglot/optimizer/simplify.py @@ -347,8 +347,9 @@ def _simplify_binary(expression, a, b): if isinstance(expression, exp.Mul): return exp.Literal.number(a * b) if isinstance(expression, exp.Div): + # engines have differing int div behavior so intdiv is not safe if isinstance(a, int) and isinstance(b, int): - return exp.Literal.number(a // b) + return None return exp.Literal.number(a / b) boolean = eval_boolean(expression, a, b) @@ -491,7 +492,7 @@ def _flat_simplify(expression, simplifier, root=True): if result: queue.remove(b) - queue.append(result) + queue.appendleft(result) break else: operands.append(a) |