diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 02:50:25 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 02:50:25 +0000 |
commit | cf49728f719975144a958f23ba5f3336fb81ae55 (patch) | |
tree | 78aa5446e86cc5623808508ee167c9a476754939 /sqlglot/optimizer/simplify.py | |
parent | Releasing debian version 23.10.0-1. (diff) | |
download | sqlglot-cf49728f719975144a958f23ba5f3336fb81ae55.tar.xz sqlglot-cf49728f719975144a958f23ba5f3336fb81ae55.zip |
Merging upstream version 23.12.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/optimizer/simplify.py')
-rw-r--r-- | sqlglot/optimizer/simplify.py | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/sqlglot/optimizer/simplify.py b/sqlglot/optimizer/simplify.py index d9a0d2b..9910572 100644 --- a/sqlglot/optimizer/simplify.py +++ b/sqlglot/optimizer/simplify.py @@ -6,6 +6,7 @@ import itertools import typing as t from collections import deque from decimal import Decimal +from functools import reduce import sqlglot from sqlglot import Dialect, exp @@ -658,17 +659,21 @@ def simplify_parens(expression): parent = expression.parent parent_is_predicate = isinstance(parent, exp.Predicate) - if not isinstance(this, exp.Select) and ( - not isinstance(parent, (exp.Condition, exp.Binary)) - or isinstance(parent, exp.Paren) - or ( - not isinstance(this, exp.Binary) - and not (isinstance(this, (exp.Not, exp.Is)) and parent_is_predicate) + if ( + not isinstance(this, exp.Select) + and not isinstance(parent, exp.SubqueryPredicate) + and ( + not isinstance(parent, (exp.Condition, exp.Binary)) + or isinstance(parent, exp.Paren) + or ( + not isinstance(this, exp.Binary) + and not (isinstance(this, (exp.Not, exp.Is)) and parent_is_predicate) + ) + or (isinstance(this, exp.Predicate) and not parent_is_predicate) + or (isinstance(this, exp.Add) and isinstance(parent, exp.Add)) + or (isinstance(this, exp.Mul) and isinstance(parent, exp.Mul)) + or (isinstance(this, exp.Mul) and isinstance(parent, (exp.Add, exp.Sub))) ) - or (isinstance(this, exp.Predicate) and not parent_is_predicate) - or (isinstance(this, exp.Add) and isinstance(parent, exp.Add)) - or (isinstance(this, exp.Mul) and isinstance(parent, exp.Mul)) - or (isinstance(this, exp.Mul) and isinstance(parent, (exp.Add, exp.Sub))) ): return this return expression @@ -779,6 +784,8 @@ def simplify_concat(expression): if concat_type is exp.ConcatWs: new_args = [sep_expr] + new_args + elif isinstance(expression, exp.DPipe): + return reduce(lambda x, y: exp.DPipe(this=x, expression=y), new_args) return concat_type(expressions=new_args, **args) |