diff options
Diffstat (limited to 'sqlglot/dialects/teradata.py')
-rw-r--r-- | sqlglot/dialects/teradata.py | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/sqlglot/dialects/teradata.py b/sqlglot/dialects/teradata.py index e8162c2..141d9c0 100644 --- a/sqlglot/dialects/teradata.py +++ b/sqlglot/dialects/teradata.py @@ -9,6 +9,7 @@ from sqlglot.tokens import TokenType class Teradata(Dialect): SUPPORTS_SEMI_ANTI_JOIN = False + TYPED_DIVISION = True TIME_MAPPING = { "Y": "%Y", @@ -33,8 +34,10 @@ class Teradata(Dialect): class Tokenizer(tokens.Tokenizer): # https://docs.teradata.com/r/Teradata-Database-SQL-Functions-Operators-Expressions-and-Predicates/March-2017/Comparison-Operators-and-Functions/Comparison-Operators/ANSI-Compliance + # https://docs.teradata.com/r/SQL-Functions-Operators-Expressions-and-Predicates/June-2017/Arithmetic-Trigonometric-Hyperbolic-Operators/Functions KEYWORDS = { **tokens.Tokenizer.KEYWORDS, + "**": TokenType.DSTAR, "^=": TokenType.NEQ, "BYTEINT": TokenType.SMALLINT, "COLLECT": TokenType.COMMAND, @@ -112,10 +115,16 @@ class Teradata(Dialect): FUNCTION_PARSERS = { **parser.Parser.FUNCTION_PARSERS, + # https://docs.teradata.com/r/SQL-Functions-Operators-Expressions-and-Predicates/June-2017/Data-Type-Conversions/TRYCAST + "TRYCAST": parser.Parser.FUNCTION_PARSERS["TRY_CAST"], "RANGE_N": lambda self: self._parse_rangen(), "TRANSLATE": lambda self: self._parse_translate(self.STRICT_CAST), } + EXPONENT = { + TokenType.DSTAR: exp.Pow, + } + def _parse_translate(self, strict: bool) -> exp.Expression: this = self._parse_conjunction() @@ -177,6 +186,7 @@ class Teradata(Dialect): exp.ArgMin: rename_func("MIN_BY"), exp.Max: max_or_greatest, exp.Min: min_or_least, + exp.Pow: lambda self, e: self.binary(e, "**"), exp.Select: transforms.preprocess( [transforms.eliminate_distinct_on, transforms.eliminate_semi_and_anti_joins] ), @@ -192,6 +202,9 @@ class Teradata(Dialect): return super().cast_sql(expression, safe_prefix=safe_prefix) + def trycast_sql(self, expression: exp.TryCast) -> str: + return self.cast_sql(expression, safe_prefix="TRY") + def tablesample_sql( self, expression: exp.TableSample, seed_prefix: str = "SEED", sep=" AS " ) -> str: |