diff options
Diffstat (limited to '')
-rw-r--r-- | sqlglot/dialects/teradata.py | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/sqlglot/dialects/teradata.py b/sqlglot/dialects/teradata.py index 7953bc5..415681c 100644 --- a/sqlglot/dialects/teradata.py +++ b/sqlglot/dialects/teradata.py @@ -74,6 +74,7 @@ class Teradata(Dialect): FUNCTION_PARSERS = { **parser.Parser.FUNCTION_PARSERS, # type: ignore + "RANGE_N": lambda self: self._parse_rangen(), "TRANSLATE": lambda self: self._parse_translate(self.STRICT_CAST), } @@ -105,6 +106,15 @@ class Teradata(Dialect): }, ) + def _parse_rangen(self): + this = self._parse_id_var() + self._match(TokenType.BETWEEN) + + expressions = self._parse_csv(self._parse_conjunction) + each = self._match_text_seq("EACH") and self._parse_conjunction() + + return self.expression(exp.RangeN, this=this, expressions=expressions, each=each) + class Generator(generator.Generator): TYPE_MAPPING = { **generator.Generator.TYPE_MAPPING, # type: ignore @@ -114,7 +124,6 @@ class Teradata(Dialect): PROPERTIES_LOCATION = { **generator.Generator.PROPERTIES_LOCATION, # type: ignore exp.PartitionedByProperty: exp.Properties.Location.POST_INDEX, - exp.VolatilityProperty: exp.Properties.Location.POST_CREATE, } def partitionedbyproperty_sql(self, expression: exp.PartitionedByProperty) -> str: @@ -137,3 +146,11 @@ class Teradata(Dialect): type_sql = super().datatype_sql(expression) prefix_sql = expression.args.get("prefix") return f"SYSUDTLIB.{type_sql}" if prefix_sql else type_sql + + def rangen_sql(self, expression: exp.RangeN) -> str: + this = self.sql(expression, "this") + expressions_sql = self.expressions(expression) + each_sql = self.sql(expression, "each") + each_sql = f" EACH {each_sql}" if each_sql else "" + + return f"RANGE_N({this} BETWEEN {expressions_sql}{each_sql})" |