summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/teradata.py
diff options
context:
space:
mode:
Diffstat (limited to 'sqlglot/dialects/teradata.py')
-rw-r--r--sqlglot/dialects/teradata.py13
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: