Changeset: 481953652537 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/481953652537
Branch: default
Log Message:
Merge with Aug2024 branch.
diffs (142 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
@@ -136,11 +136,9 @@ PyMaskedArray_FromBAT(PyInput *inp, size
bool bnonil = b->tnonil;
MT_lock_unset(&b->theaplock);
if (!bnonil) {
- PyObject *nme = PyUnicode_FromString("numpy.ma");
- PyObject *mod = PyImport_Import(nme);
+ PyObject *mod = PyImport_ImportModule("numpy.ma");
PyObject *mafunc = PyObject_GetAttrString( mod, "masked_array");
PyObject *nullmask = PyNullMask_FromBAT(b, t_start, t_end);
- Py_DECREF(nme);
if (!nullmask) {
Py_DECREF(vararray);
@@ -283,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);
@@ -301,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);
@@ -322,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));
}
diff --git a/sql/backends/monet5/UDF/pyapi3/pyapi3.c
b/sql/backends/monet5/UDF/pyapi3/pyapi3.c
--- a/sql/backends/monet5/UDF/pyapi3/pyapi3.c
+++ b/sql/backends/monet5/UDF/pyapi3/pyapi3.c
@@ -662,7 +662,6 @@ PYAPI3PyAPIprelude(void) {
wchar_t* program = L"mserver5";
wchar_t* argv[] = { program, NULL };
str msg = MAL_SUCCEED;
- PyObject *tmp;
static_assert(PY_MAJOR_VERSION == 3, "Python 3.X required");
#if PY_MINOR_VERSION >= 11
@@ -705,10 +704,8 @@ PYAPI3PyAPIprelude(void) {
}
_pytypes_init();
_loader_init();
- tmp = PyUnicode_FromString("marshal");
- marshal_module = PyImport_Import(tmp);
+ marshal_module = PyImport_ImportModule("marshal");
init_DateTimeAPI();
- Py_DECREF(tmp);
if (marshal_module == NULL) {
MT_lock_unset(&pyapiLock);
return createException(MAL, "pyapi3.eval",
SQLSTATE(PY000) "Failed to load Marshal module.");
diff --git a/sql/server/rel_statistics_functions.c
b/sql/server/rel_statistics_functions.c
--- a/sql/server/rel_statistics_functions.c
+++ b/sql/server/rel_statistics_functions.c
@@ -132,16 +132,16 @@ sql_sub_propagate_statistics(mvc *sql, s
switch (t1->type->eclass) {
case EC_DATE: {
- res1 = atom_int(sql->sa,
sql_bind_localtype("int"), date_diff_imp((date)lmax->data.val.ival,
(date)rmin->data.val.ival));
- res2 = atom_int(sql->sa,
sql_bind_localtype("int"), date_diff_imp((date)lmin->data.val.ival,
(date)rmax->data.val.ival));
+ res1 = atom_int(sql->sa,
exp_subtype(e), date_diff_imp((date)lmax->data.val.ival,
(date)rmin->data.val.ival));
+ res2 = atom_int(sql->sa,
exp_subtype(e), date_diff_imp((date)lmin->data.val.ival,
(date)rmax->data.val.ival));
} break;
case EC_TIME: {
- res1 = atom_int(sql->sa,
sql_bind_localtype("lng"), daytime_diff((daytime)lmax->data.val.lval,
(daytime)rmin->data.val.lval));
- res2 = atom_int(sql->sa,
sql_bind_localtype("lng"), daytime_diff((daytime)lmin->data.val.lval,
(daytime)rmax->data.val.lval));
+ res1 = atom_int(sql->sa,
exp_subtype(e), daytime_diff((daytime)lmax->data.val.lval,
(daytime)rmin->data.val.lval));
+ res2 = atom_int(sql->sa,
exp_subtype(e), daytime_diff((daytime)lmin->data.val.lval,
(daytime)rmax->data.val.lval));
} break;
case EC_TIMESTAMP: {
- res1 = atom_int(sql->sa,
sql_bind_localtype("lng"), TSDIFF((timestamp)lmax->data.val.lval,
(timestamp)rmin->data.val.lval));
- res2 = atom_int(sql->sa,
sql_bind_localtype("lng"), TSDIFF((timestamp)lmin->data.val.lval,
(timestamp)rmax->data.val.lval));
+ res1 = atom_int(sql->sa,
exp_subtype(e), TSDIFF((timestamp)lmax->data.val.lval,
(timestamp)rmin->data.val.lval));
+ res2 = atom_int(sql->sa,
exp_subtype(e), TSDIFF((timestamp)lmin->data.val.lval,
(timestamp)rmax->data.val.lval));
} break;
default:
break;
@@ -604,7 +604,7 @@ sql_day_propagate_statistics(mvc *sql, s
set_minmax_property(sql, e, PROP_MAX, atom_int(sql->sa,
sql_bind_localtype(localtype), nmax));
set_minmax_property(sql, e, PROP_MIN, atom_int(sql->sa,
sql_bind_localtype(localtype), nmin));
prop *p = e->p = prop_create(sql->sa, PROP_NUNIQUES, e->p);
- p->value.dval = 31;
+ p->value.dval = nmax - nmin + 1;
}
static void
diff --git a/sql/test/BugTracker-2024/Tests/7580-date-diff.test
b/sql/test/BugTracker-2024/Tests/7580-date-diff.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/7580-date-diff.test
@@ -0,0 +1,10 @@
+
+query IIIIII
+select t.d1, t.d2
+, cast(extract(day from (t.d1 - t.d2)) as integer) as verschil
+, cast(extract(day from (t.d1 - t.d2)) as integer) < 100 as f -- false
+, cast(extract(day from (t.d1 - t.d2)) as integer) >=100 as t -- true
+, case when cast(extract(day from (t.d1 - t.d2)) as integer) < 100 then
'false' else 'true' end as true_or_false -- false
+from (select cast('2024-01-18' as date) as d1, cast('2013-06-06' as date) as
d2) t
+where abs(cast(extract(day from (t.d1 - t.d2)) as integer)) < 100 -- this is
false, not true, so this shouldn't produce any result.
+----
diff --git a/sql/test/BugTracker-2024/Tests/All
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -90,3 +90,4 @@ 7563-is-distinct-from
7572-max-length-changes
7570-timestamp-str
7574-startswith-bug
+7580-date-diff
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]