summaryrefslogtreecommitdiffstats
path: root/sqlglot/dialects/hive.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 05:35:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-18 05:35:55 +0000
commitfe979e8421c04c038353a0a2d07d81779516186a (patch)
treeefb70a52261e5cf4862a7eb69e1d7cd16356fcba /sqlglot/dialects/hive.py
parentReleasing debian version 23.13.7-1. (diff)
downloadsqlglot-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.py41
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})"