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 -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to