summaryrefslogtreecommitdiffstats
path: root/sqlglot/optimizer/simplify.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 02:50:25 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 02:50:25 +0000
commitcf49728f719975144a958f23ba5f3336fb81ae55 (patch)
tree78aa5446e86cc5623808508ee167c9a476754939 /sqlglot/optimizer/simplify.py
parentReleasing debian version 23.10.0-1. (diff)
downloadsqlglot-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.py27
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)