Changeset: f3bedb392e6f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f3bedb392e6f
Modified Files:
sql/backends/monet5/UDF/pyapi3/conversion3.c
Branch: Aug2024
Log Message:
Keep dates and timestamps within bounds in Python interface.
diffs (48 lines):
diff --git a/sql/backends/monet5/UDF/pyapi3/conversion3.c
b/sql/backends/monet5/UDF/pyapi3/conversion3.c
--- a/sql/backends/monet5/UDF/pyapi3/conversion3.c
+++ b/sql/backends/monet5/UDF/pyapi3/conversion3.c
@@ -281,8 +281,10 @@ PyArrayObject_FromBAT(PyInput *inp, size
j = 0;
BATloop(b, p, q)
{
- const date* dt = (const
date*)BUNtail(li, p);
- data[j++] =
PyDate_FromDate(date_year(*dt), date_month(*dt), date_day(*dt));
+ date dt = *(const
date*)BUNtail(li, p);
+ if (is_date_nil(dt))
+ dt = date_create(1, 1,
1);
+ data[j++] =
PyDate_FromDate(date_year(dt), date_month(dt), date_day(dt));
}
}
bat_iterator_end(&li);
@@ -299,11 +301,13 @@ PyArrayObject_FromBAT(PyInput *inp, size
j = 0;
BATloop(b, p, q)
{
- const daytime* dt = (const
daytime*)BUNtail(li, p);
- data[j++] =
PyTime_FromTime(daytime_hour(*dt),
-
daytime_min(*dt),
-
daytime_sec(*dt),
-
daytime_usec(*dt));
+ daytime dt = *(const
daytime*)BUNtail(li, p);
+ if (is_daytime_nil(dt))
+ dt = daytime_create(0,
0, 0, 0);
+ data[j++] =
PyTime_FromTime(daytime_hour(dt),
+
daytime_min(dt),
+
daytime_sec(dt),
+
daytime_usec(dt));
}
}
bat_iterator_end(&li);
@@ -320,9 +324,9 @@ PyArrayObject_FromBAT(PyInput *inp, size
j = 0;
BATloop(b, p, q)
{
- const timestamp* ts = (const
timestamp*)BUNtail(li, p);
- const date dt =
timestamp_date(*ts);
- const daytime dtm =
timestamp_daytime(*ts);
+ const timestamp ts = *(const
timestamp*)BUNtail(li, p);
+ const date dt =
is_timestamp_nil(ts) ? date_create(1, 1, 1) : timestamp_date(ts);
+ const daytime dtm =
is_timestamp_nil(ts) ? daytime_create(0, 0, 0, 0) : timestamp_daytime(ts);
data[j++] =
PyDateTime_FromDateAndTime(date_year(dt), date_month(dt), date_day(dt),
daytime_hour(dtm), daytime_min(dtm), daytime_sec(dtm), daytime_usec(dtm));
}
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]