diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 05:35:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-18 05:35:55 +0000 |
commit | fe979e8421c04c038353a0a2d07d81779516186a (patch) | |
tree | efb70a52261e5cf4862a7eb69e1d7cd16356fcba /sqlglot/dialects/hive.py | |
parent | Releasing debian version 23.13.7-1. (diff) | |
download | sqlglot-fe979e8421c04c038353a0a2d07d81779516186a.tar.xz sqlglot-fe979e8421c04c038353a0a2d07d81779516186a.zip |
Merging upstream version 23.16.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'sqlglot/dialects/hive.py')
-rw-r--r-- | sqlglot/dialects/hive.py | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/sqlglot/dialects/hive.py b/sqlglot/dialects/hive.py index d86691e..b12e200 100644 --- a/sqlglot/dialects/hive.py +++ b/sqlglot/dialects/hive.py @@ -254,7 +254,7 @@ class Hive(Dialect): "REFRESH": TokenType.REFRESH, "TIMESTAMP AS OF": TokenType.TIMESTAMP_SNAPSHOT, "VERSION AS OF": TokenType.VERSION_SNAPSHOT, - "WITH SERDEPROPERTIES": TokenType.SERDE_PROPERTIES, + "SERDEPROPERTIES": TokenType.SERDE_PROPERTIES, } NUMERIC_LITERALS = { @@ -332,7 +332,7 @@ class Hive(Dialect): PROPERTY_PARSERS = { **parser.Parser.PROPERTY_PARSERS, - "WITH SERDEPROPERTIES": lambda self: exp.SerdeProperties( + "SERDEPROPERTIES": lambda self: exp.SerdeProperties( expressions=self._parse_wrapped_csv(self._parse_property) ), } @@ -422,6 +422,15 @@ class Hive(Dialect): super()._parse_order(skip_order_token=self._match(TokenType.SORT_BY)), ) + def _parse_parameter(self) -> exp.Parameter: + self._match(TokenType.L_BRACE) + this = self._parse_identifier() or self._parse_primary_or_var() + expression = self._match(TokenType.COLON) and ( + self._parse_identifier() or self._parse_primary_or_var() + ) + self._match(TokenType.R_BRACE) + return self.expression(exp.Parameter, this=this, expression=expression) + class Generator(generator.Generator): LIMIT_FETCH = "LIMIT" TABLESAMPLE_WITH_METHOD = False @@ -434,6 +443,7 @@ class Hive(Dialect): LAST_DAY_SUPPORTS_DATE_PART = False JSON_PATH_SINGLE_QUOTE_ESCAPE = True SUPPORTS_TO_NUMBER = False + WITH_PROPERTIES_PREFIX = "TBLPROPERTIES" EXPRESSIONS_WITHOUT_NESTED_CTES = { exp.Insert, @@ -453,11 +463,12 @@ class Hive(Dialect): **generator.Generator.TYPE_MAPPING, exp.DataType.Type.BIT: "BOOLEAN", exp.DataType.Type.DATETIME: "TIMESTAMP", + exp.DataType.Type.ROWVERSION: "BINARY", exp.DataType.Type.TEXT: "STRING", exp.DataType.Type.TIME: "TIMESTAMP", exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP", + exp.DataType.Type.UTINYINT: "SMALLINT", exp.DataType.Type.VARBINARY: "BINARY", - exp.DataType.Type.ROWVERSION: "BINARY", } TRANSFORMS = { @@ -552,7 +563,6 @@ class Hive(Dialect): exp.UnixToTime: _unix_to_time_sql, exp.UnixToTimeStr: rename_func("FROM_UNIXTIME"), exp.PartitionedByProperty: lambda self, e: f"PARTITIONED BY {self.sql(e, 'this')}", - exp.SerdeProperties: lambda self, e: self.properties(e, prefix="WITH SERDEPROPERTIES"), exp.NumberToStr: rename_func("FORMAT_NUMBER"), exp.National: lambda self, e: self.national_sql(e, prefix=""), exp.ClusteredColumnConstraint: lambda self, @@ -618,9 +628,6 @@ class Hive(Dialect): expression.this.this if isinstance(expression.this, exp.Order) else expression.this, ) - def with_properties(self, properties: exp.Properties) -> str: - return self.properties(properties, prefix=self.seg("TBLPROPERTIES")) - def datatype_sql(self, expression: exp.DataType) -> str: if expression.this in self.PARAMETERIZABLE_TEXT_TYPES and ( not expression.expressions or expression.expressions[0].name == "MAX" @@ -655,3 +662,23 @@ class Hive(Dialect): values.append(e) return self.func("STRUCT", *values) + + def alterset_sql(self, expression: exp.AlterSet) -> str: + exprs = self.expressions(expression, flat=True) + exprs = f" {exprs}" if exprs else "" + location = self.sql(expression, "location") + location = f" LOCATION {location}" if location else "" + file_format = self.expressions(expression, key="file_format", flat=True, sep=" ") + file_format = f" FILEFORMAT {file_format}" if file_format else "" + serde = self.sql(expression, "serde") + serde = f" SERDE {serde}" if serde else "" + tags = self.expressions(expression, key="tag", flat=True, sep="") + tags = f" TAGS {tags}" if tags else "" + + return f"SET{serde}{exprs}{location}{file_format}{tags}" + + def serdeproperties_sql(self, expression: exp.SerdeProperties) -> str: + prefix = "WITH " if expression.args.get("with") else "" + exprs = self.expressions(expression, flat=True) + + return f"{prefix}SERDEPROPERTIES ({exprs})" |