Skip to content

Commit b1407f8

Browse files
cpcloudgforsyth
authored andcommitted
fix(duckdb): use functions for temporal literals
1 parent 0e896c6 commit b1407f8

File tree

7 files changed

+19
-1
lines changed

7 files changed

+19
-1
lines changed

ibis/backends/duckdb/registry.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,8 +208,14 @@ def _literal(t, op):
208208
return sa.func.map(
209209
sa.func.list_value(*value.keys()), sa.func.list_value(*value.values())
210210
)
211+
elif dtype.is_timestamp():
212+
return sa.cast(value.isoformat(), t.get_sqla_type(dtype))
211213
elif dtype.is_date():
212-
return sa.cast(sa.literal(str(value)), sqla_type)
214+
return sa.func.make_date(value.year, value.month, value.day)
215+
elif dtype.is_time():
216+
return sa.func.make_time(
217+
value.hour, value.minute, value.second + value.microsecond / 1e6
218+
)
213219
else:
214220
return sa.cast(sa.literal(value), sqla_type)
215221

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
MAKE_DATE(2023, 4, 7) AS "datetime.date(2023, 4, 7)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
MAKE_TIME(4, 5, 6) AS "datetime.time(4, 5, 6, 230136)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
MAKE_TIMESTAMP(1680854706230136) AS "datetime.datetime(2023, 4, 7, 4, 5, 6, 230136)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
MAKE_TIME(4, 5, 6.0) AS "datetime.time(4, 5, 6)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
MAKE_TIME(4, 5, 6.234567) AS "datetime.time(4, 5, 6, 234567)"
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
SELECT
2+
CAST('04:05:06.230136' AS TIME) AS "datetime.time(4, 5, 6, 230136)"

0 commit comments

Comments
 (0)