Skip to content

Commit 38472ce

Browse files
fivetran-ashashankargeorgesittas
authored andcommitted
feat(duckdb)!: transpile bigquery's %x format literal (#6375)
* feat(snowflake)!: %x is treated a literal in duckdb. support %x locale-dependent formats. * feat(snowflake)!: %x is treated a literal in duckdb. support %x locale-dependent formats. * Revert "feat(snowflake)!: %x is treated a literal in duckdb. support %x locale-dependent formats." This reverts commit 4514a5c. * Revert "feat(snowflake)!: %x is treated a literal in duckdb. support %x locale-dependent formats." This reverts commit a2400e8. * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb * feat(snowflake)!: transpilation support for %x formatting - format_date -bq to duckdb
1 parent 0ff3c41 commit 38472ce

File tree

3 files changed

+8
-6
lines changed

3 files changed

+8
-6
lines changed

sqlglot/dialects/bigquery.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,11 @@ def _build_levenshtein(args: t.List) -> exp.Levenshtein:
310310

311311
def _build_format_time(expr_type: t.Type[exp.Expression]) -> t.Callable[[t.List], exp.TimeToStr]:
312312
def _builder(args: t.List) -> exp.TimeToStr:
313-
return exp.TimeToStr(
314-
this=expr_type(this=seq_get(args, 1)),
315-
format=seq_get(args, 0),
316-
zone=seq_get(args, 2),
313+
formatted_time = build_formatted_time(exp.TimeToStr, "bigquery")(
314+
[expr_type(this=seq_get(args, 1)), seq_get(args, 0)]
317315
)
316+
formatted_time.set("zone", seq_get(args, 2))
317+
return formatted_time
318318

319319
return _builder
320320

@@ -377,6 +377,7 @@ class BigQuery(Dialect):
377377

378378
# https://cloud.google.com/bigquery/docs/reference/standard-sql/format-elements#format_elements_date_time
379379
TIME_MAPPING = {
380+
"%x": "%m/%d/%y",
380381
"%D": "%m/%d/%y",
381382
"%E6S": "%S.%f",
382383
"%e": "%-d",

sqlglot/dialects/duckdb.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -423,6 +423,7 @@ class DuckDB(Dialect):
423423
**Dialect.DATE_PART_MAPPING,
424424
"DAYOFWEEKISO": "ISODOW",
425425
}
426+
426427
DATE_PART_MAPPING.pop("WEEKDAY")
427428

428429
def to_json_path(self, path: t.Optional[exp.Expression]) -> t.Optional[exp.Expression]:

tests/dialects/test_bigquery.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2897,8 +2897,8 @@ def test_format_temporal(self):
28972897
self.validate_all(
28982898
"SELECT FORMAT_DATETIME('%x', '2023-12-25 15:30:00')",
28992899
write={
2900-
"bigquery": "SELECT FORMAT_DATETIME('%x', '2023-12-25 15:30:00')",
2901-
"duckdb": "SELECT STRFTIME(CAST('2023-12-25 15:30:00' AS TIMESTAMP), '%x')",
2900+
"bigquery": "SELECT FORMAT_DATETIME('%D', '2023-12-25 15:30:00')",
2901+
"duckdb": "SELECT STRFTIME(CAST('2023-12-25 15:30:00' AS TIMESTAMP), '%m/%d/%y')",
29022902
},
29032903
)
29042904
self.validate_all(

0 commit comments

Comments
 (0)