Skip to content

Commit 807fbbc

Browse files
authored
fix(duckdb)!: transpile timestamp without time zone (#5047)
* fix(duckdb)!: transpile timestamp without time zone * PR feedback 1 (george)
1 parent 167c547 commit 807fbbc

File tree

9 files changed

+32
-1
lines changed

9 files changed

+32
-1
lines changed

sqlglot/dialects/bigquery.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,6 +1040,7 @@ class Generator(generator.Generator):
10401040
exp.DataType.Type.SMALLINT: "INT64",
10411041
exp.DataType.Type.TEXT: "STRING",
10421042
exp.DataType.Type.TIMESTAMP: "DATETIME",
1043+
exp.DataType.Type.TIMESTAMPNTZ: "DATETIME",
10431044
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
10441045
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
10451046
exp.DataType.Type.TINYINT: "INT64",

sqlglot/dialects/clickhouse.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,7 @@ class Generator(generator.Generator):
10161016
exp.DataType.Type.DECIMAL128: "Decimal128",
10171017
exp.DataType.Type.DECIMAL256: "Decimal256",
10181018
exp.DataType.Type.TIMESTAMP: "DateTime",
1019+
exp.DataType.Type.TIMESTAMPNTZ: "DateTime",
10191020
exp.DataType.Type.TIMESTAMPTZ: "DateTime",
10201021
exp.DataType.Type.DOUBLE: "Float64",
10211022
exp.DataType.Type.ENUM: "Enum",

sqlglot/dialects/duckdb.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ class Tokenizer(tokens.Tokenizer):
321321
"BPCHAR": TokenType.TEXT,
322322
"CHAR": TokenType.TEXT,
323323
"CHARACTER VARYING": TokenType.TEXT,
324+
"DATETIME": TokenType.TIMESTAMPNTZ,
324325
"DETACH": TokenType.DETACH,
325326
"EXCLUDE": TokenType.EXCEPT,
326327
"LOGICAL": TokenType.BOOLEAN,
@@ -330,6 +331,7 @@ class Tokenizer(tokens.Tokenizer):
330331
"SIGNED": TokenType.INT,
331332
"STRING": TokenType.TEXT,
332333
"SUMMARIZE": TokenType.SUMMARIZE,
334+
"TIMESTAMP": TokenType.TIMESTAMPNTZ,
333335
"TIMESTAMP_S": TokenType.TIMESTAMP_S,
334336
"TIMESTAMP_MS": TokenType.TIMESTAMP_MS,
335337
"TIMESTAMP_NS": TokenType.TIMESTAMP_NS,

sqlglot/dialects/hive.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ class Generator(generator.Generator):
503503
exp.DataType.Type.ROWVERSION: "BINARY",
504504
exp.DataType.Type.TEXT: "STRING",
505505
exp.DataType.Type.TIME: "TIMESTAMP",
506+
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
506507
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
507508
exp.DataType.Type.UTINYINT: "SMALLINT",
508509
exp.DataType.Type.VARBINARY: "BINARY",

sqlglot/dialects/mysql.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -818,6 +818,7 @@ class Generator(generator.Generator):
818818
exp.DataType.Type.DATETIME2: "DATETIME",
819819
exp.DataType.Type.SMALLDATETIME: "DATETIME",
820820
exp.DataType.Type.TIMESTAMP: "DATETIME",
821+
exp.DataType.Type.TIMESTAMPNTZ: "DATETIME",
821822
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
822823
exp.DataType.Type.TIMESTAMPLTZ: "TIMESTAMP",
823824
}

sqlglot/dialects/oracle.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,7 @@ class Generator(generator.Generator):
266266
exp.DataType.Type.NCHAR: "NCHAR",
267267
exp.DataType.Type.TEXT: "CLOB",
268268
exp.DataType.Type.TIMETZ: "TIME",
269+
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
269270
exp.DataType.Type.TIMESTAMPTZ: "TIMESTAMP",
270271
exp.DataType.Type.BINARY: "BLOB",
271272
exp.DataType.Type.VARBINARY: "BLOB",

sqlglot/dialects/postgres.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ class Generator(generator.Generator):
539539
exp.DataType.Type.VARBINARY: "BYTEA",
540540
exp.DataType.Type.ROWVERSION: "BYTEA",
541541
exp.DataType.Type.DATETIME: "TIMESTAMP",
542+
exp.DataType.Type.TIMESTAMPNTZ: "TIMESTAMP",
542543
exp.DataType.Type.BLOB: "BYTEA",
543544
}
544545

tests/dialects/test_duckdb.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ def test_duckdb(self):
428428
"SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
429429
write={
430430
"duckdb": "SELECT STRFTIME(CAST('2020-01-01' AS TIMESTAMP), CONCAT('%Y', '%m'))",
431+
"spark": "SELECT DATE_FORMAT(CAST('2020-01-01' AS TIMESTAMP_NTZ), CONCAT(COALESCE('yyyy', ''), COALESCE('MM', '')))",
431432
"tsql": "SELECT FORMAT(CAST('2020-01-01' AS DATETIME2), CONCAT('yyyy', 'MM'))",
432433
},
433434
)
@@ -1110,6 +1111,28 @@ def test_time(self):
11101111
},
11111112
)
11121113

1114+
self.validate_all(
1115+
"SELECT TIMESTAMP 'foo'",
1116+
write={
1117+
"duckdb": "SELECT CAST('foo' AS TIMESTAMP)",
1118+
"hive": "SELECT CAST('foo' AS TIMESTAMP)",
1119+
"spark2": "SELECT CAST('foo' AS TIMESTAMP)",
1120+
"spark": "SELECT CAST('foo' AS TIMESTAMP_NTZ)",
1121+
"postgres": "SELECT CAST('foo' AS TIMESTAMP)",
1122+
"mysql": "SELECT CAST('foo' AS DATETIME)",
1123+
"clickhouse": "SELECT CAST('foo' AS Nullable(DateTime))",
1124+
"databricks": "SELECT CAST('foo' AS TIMESTAMP_NTZ)",
1125+
"snowflake": "SELECT CAST('foo' AS TIMESTAMPNTZ)",
1126+
"redshift": "SELECT CAST('foo' AS TIMESTAMP)",
1127+
"tsql": "SELECT CAST('foo' AS DATETIME2)",
1128+
"presto": "SELECT CAST('foo' AS TIMESTAMP)",
1129+
"trino": "SELECT CAST('foo' AS TIMESTAMP)",
1130+
"oracle": "SELECT CAST('foo' AS TIMESTAMP)",
1131+
"bigquery": "SELECT CAST('foo' AS DATETIME)",
1132+
"starrocks": "SELECT CAST('foo' AS DATETIME)",
1133+
},
1134+
)
1135+
11131136
def test_sample(self):
11141137
self.validate_identity(
11151138
"SELECT * FROM tbl USING SAMPLE 5",

tests/dialects/test_mysql.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1311,7 +1311,7 @@ def test_safe_div(self):
13111311

13121312
def test_timestamp_trunc(self):
13131313
hive_dialects = ("spark", "databricks")
1314-
for dialect in ("postgres", "snowflake", "duckdb", *hive_dialects):
1314+
for dialect in ("postgres", "snowflake", *hive_dialects):
13151315
for unit in (
13161316
"SECOND",
13171317
"DAY",

0 commit comments

Comments
 (0)