Skip to content

Commit 92e479e

Browse files
authored
fix(hive)!: support STRUCT(*) and MAP(*) (#4876)
* fix(hive)!: support STRUCT(*) and MAP(*) * PR feedback 1
1 parent 038da09 commit 92e479e

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

sqlglot/dialects/hive.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,9 @@ def _parse_parameter(self) -> exp.Parameter:
446446
return self.expression(exp.Parameter, this=this, expression=expression)
447447

448448
def _to_prop_eq(self, expression: exp.Expression, index: int) -> exp.Expression:
449+
if expression.is_star:
450+
return expression
451+
449452
if isinstance(expression, exp.Column):
450453
key = expression.this
451454
else:
@@ -577,6 +580,7 @@ class Generator(generator.Generator):
577580
exp.StrToTime: _str_to_time_sql,
578581
exp.StrToUnix: _str_to_unix_sql,
579582
exp.StructExtract: struct_extract_sql,
583+
exp.StarMap: rename_func("MAP"),
580584
exp.Table: transforms.preprocess([transforms.unnest_generate_series]),
581585
exp.TimeStrToDate: rename_func("TO_DATE"),
582586
exp.TimeStrToTime: timestrtotime_sql,

tests/dialects/test_hive.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -810,6 +810,21 @@ def test_hive(self):
810810

811811
self.validate_identity("SELECT 1_2")
812812

813+
self.validate_all(
814+
"SELECT MAP(*), STRUCT(*) FROM t",
815+
read={
816+
"hive": "SELECT MAP(*), STRUCT(*) FROM t",
817+
"spark2": "SELECT MAP(*), STRUCT(*) FROM t",
818+
"spark": "SELECT MAP(*), STRUCT(*) FROM t",
819+
"databricks": "SELECT MAP(*), STRUCT(*) FROM t",
820+
},
821+
write={
822+
"spark2": "SELECT MAP(*), STRUCT(*) FROM t",
823+
"spark": "SELECT MAP(*), STRUCT(*) FROM t",
824+
"databricks": "SELECT MAP(*), STRUCT(*) FROM t",
825+
},
826+
)
827+
813828
def test_escapes(self) -> None:
814829
self.validate_identity("'\n'", "'\\n'")
815830
self.validate_identity("'\\n'")

0 commit comments

Comments
 (0)