From 9f19773cebdc9476f2a3266d3c01c967c38fcd1e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 30 Jun 2023 10:03:58 +0200 Subject: Merging upstream version 16.7.7. Signed-off-by: Daniel Baumann --- sqlglot/parser.py | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) (limited to 'sqlglot/parser.py') diff --git a/sqlglot/parser.py b/sqlglot/parser.py index e5bd4ae..79e7cac 100644 --- a/sqlglot/parser.py +++ b/sqlglot/parser.py @@ -717,6 +717,7 @@ class Parser(metaclass=_Parser): FUNCTIONS_WITH_ALIASED_ARGS = {"STRUCT"} FUNCTION_PARSERS: t.Dict[str, t.Callable] = { + "ANY_VALUE": lambda self: self._parse_any_value(), "CAST": lambda self: self._parse_cast(self.STRICT_CAST), "CONCAT": lambda self: self._parse_concat(), "CONVERT": lambda self: self._parse_convert(self.STRICT_CAST), @@ -3321,11 +3322,6 @@ class Parser(metaclass=_Parser): else: this = self._parse_select_or_expression(alias=alias) - if isinstance(this, exp.EQ): - left = this.this - if isinstance(left, exp.Column): - left.replace(exp.var(left.text("this"))) - return self._parse_limit(self._parse_order(self._parse_respect_or_ignore_nulls(this))) def _parse_schema(self, this: t.Optional[exp.Expression] = None) -> t.Optional[exp.Expression]: @@ -3678,6 +3674,18 @@ class Parser(metaclass=_Parser): return self.expression(exp.Extract, this=this, expression=self._parse_bitwise()) + def _parse_any_value(self) -> exp.AnyValue: + this = self._parse_lambda() + is_max = None + having = None + + if self._match(TokenType.HAVING): + self._match_texts(("MAX", "MIN")) + is_max = self._prev.text == "MAX" + having = self._parse_column() + + return self.expression(exp.AnyValue, this=this, having=having, max=is_max) + def _parse_cast(self, strict: bool) -> exp.Expression: this = self._parse_conjunction() -- cgit v1.2.3