Skip to content

Commit da52181

Browse files
authored
fix(hive)!: TO_DATE parsing with safe flag true (#4713)
* fix(snowflake): make TRY_TO_DATE default transpilation method * fix(hive)!: TO_DATE parsing with safe flag true * PR feedback 1
1 parent 707d45e commit da52181

File tree

4 files changed

+13
-2
lines changed

4 files changed

+13
-2
lines changed

sqlglot/dialects/databricks.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
date_delta_sql,
88
build_date_delta,
99
timestamptrunc_sql,
10+
build_formatted_time,
1011
)
1112
from sqlglot.dialects.spark import Spark
1213
from sqlglot.tokens import TokenType
@@ -46,6 +47,7 @@ class Parser(Spark.Parser):
4647
"DATEDIFF": build_date_delta(exp.DateDiff),
4748
"DATE_DIFF": build_date_delta(exp.DateDiff),
4849
"GET_JSON_OBJECT": _build_json_extract,
50+
"TO_DATE": build_formatted_time(exp.TsOrDsToDate, "databricks"),
4951
}
5052

5153
FACTOR = {

sqlglot/dialects/hive.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,12 @@ def _parse(args: t.List[exp.Expression]) -> exp.Expression:
187187
return _parse
188188

189189

190+
def _build_to_date(args: t.List) -> exp.TsOrDsToDate:
191+
expr = build_formatted_time(exp.TsOrDsToDate, "hive")(args)
192+
expr.set("safe", True)
193+
return expr
194+
195+
190196
class Hive(Dialect):
191197
ALIAS_POST_TABLESAMPLE = True
192198
IDENTIFIERS_CAN_START_WITH_DIGIT = True
@@ -318,7 +324,7 @@ class Parser(parser.Parser):
318324
pair_delim=seq_get(args, 1) or exp.Literal.string(","),
319325
key_value_delim=seq_get(args, 2) or exp.Literal.string(":"),
320326
),
321-
"TO_DATE": build_formatted_time(exp.TsOrDsToDate, "hive"),
327+
"TO_DATE": _build_to_date,
322328
"TO_JSON": exp.JSONFormat.from_arg_list,
323329
"TRUNC": exp.TimestampTrunc.from_arg_list,
324330
"UNBASE64": exp.FromBase64.from_arg_list,

tests/dialects/test_spark.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,8 @@ def test_to_date(self):
150150
"hive": "TO_DATE(x)",
151151
"presto": "CAST(CAST(x AS TIMESTAMP) AS DATE)",
152152
"spark": "TO_DATE(x)",
153+
"snowflake": "TRY_TO_DATE(x, 'yyyy-mm-DD')",
154+
"databricks": "TO_DATE(x)",
153155
},
154156
)
155157
self.validate_all(
@@ -159,6 +161,8 @@ def test_to_date(self):
159161
"hive": "TO_DATE(x, 'yyyy')",
160162
"presto": "CAST(DATE_PARSE(x, '%Y') AS DATE)",
161163
"spark": "TO_DATE(x, 'yyyy')",
164+
"snowflake": "TRY_TO_DATE(x, 'yyyy')",
165+
"databricks": "TO_DATE(x, 'yyyy')",
162166
},
163167
)
164168

tests/test_expressions.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ def test_eq(self):
5555
parse_one("ROW() OVER(Partition by y)"),
5656
parse_one("ROW() OVER (partition BY y)"),
5757
)
58-
self.assertEqual(parse_one("TO_DATE(x)", read="hive"), parse_one("ts_or_ds_to_date(x)"))
5958
self.assertEqual(exp.Table(pivots=[]), exp.Table())
6059
self.assertNotEqual(exp.Table(pivots=[None]), exp.Table())
6160
self.assertEqual(

0 commit comments

Comments
 (0)