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.py21
1 files changed, 20 insertions, 1 deletions
diff --git a/sqlglot/dialects/teradata.py b/sqlglot/dialects/teradata.py
index 3d43793..331e105 100644
--- a/sqlglot/dialects/teradata.py
+++ b/sqlglot/dialects/teradata.py
@@ -1,7 +1,14 @@
from __future__ import annotations
+import typing as t
+
from sqlglot import exp, generator, parser, tokens
-from sqlglot.dialects.dialect import Dialect, max_or_greatest, min_or_least
+from sqlglot.dialects.dialect import (
+ Dialect,
+ format_time_lambda,
+ max_or_greatest,
+ min_or_least,
+)
from sqlglot.tokens import TokenType
@@ -115,7 +122,18 @@ class Teradata(Dialect):
return self.expression(exp.RangeN, this=this, expressions=expressions, each=each)
+ def _parse_cast(self, strict: bool) -> exp.Expression:
+ cast = t.cast(exp.Cast, super()._parse_cast(strict))
+ if cast.to.this == exp.DataType.Type.DATE and self._match(TokenType.FORMAT):
+ return format_time_lambda(exp.TimeToStr, "teradata")(
+ [cast.this, self._parse_string()]
+ )
+ return cast
+
class Generator(generator.Generator):
+ JOIN_HINTS = False
+ TABLE_HINTS = False
+
TYPE_MAPPING = {
**generator.Generator.TYPE_MAPPING, # type: ignore
exp.DataType.Type.GEOMETRY: "ST_GEOMETRY",
@@ -130,6 +148,7 @@ class Teradata(Dialect):
**generator.Generator.TRANSFORMS,
exp.Max: max_or_greatest,
exp.Min: min_or_least,
+ exp.TimeToStr: lambda self, e: f"CAST({self.sql(e, 'this')} AS DATE FORMAT {self.format_time(e)})",
exp.ToChar: lambda self, e: self.function_fallback_sql(e),
}