Changeset: c513830f2fa8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/c513830f2fa8 Modified Files: sql/server/rel_statistics_functions.c Branch: properties Log Message:
Look for overflows diffs (45 lines): 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 @@ -51,12 +51,15 @@ sql_add_propagate_statistics(mvc *sql, s res2 = atom_general_ptr(sql->sa, &tp, &sub2); } } else if (strcmp(f->func->imp, "time_add_msec_interval") == 0) { - daytime sub1 = time_add_msec_interval((daytime)lmax->data.val.lval, rmax->data.val.lval), - sub2 = time_add_msec_interval((daytime)lmin->data.val.lval, rmin->data.val.lval); + daytime v1 = (daytime)lmax->data.val.lval, v2 = (daytime)lmin->data.val.lval, + sub1 = time_add_msec_interval(v1, rmax->data.val.lval), + sub2 = time_add_msec_interval(v2, rmin->data.val.lval); - sql_find_subtype(&tp, "time", 0, 0); - res1 = atom_general_ptr(sql->sa, &tp, &sub1); - res2 = atom_general_ptr(sql->sa, &tp, &sub2); + if (sub1 >= v1 && sub2 >= v2) { /* look for overflows */ + sql_find_subtype(&tp, "time", 0, 0); + res1 = atom_general_ptr(sql->sa, &tp, &sub1); + res2 = atom_general_ptr(sql->sa, &tp, &sub2); + } } else if (strcmp(f->func->imp, "timestamp_add_msec_interval") == 0) { timestamp sub1, sub2; @@ -144,12 +147,15 @@ sql_sub_propagate_statistics(mvc *sql, s res2 = atom_general_ptr(sql->sa, &tp, &sub2); } } else if (strcmp(f->func->imp, "time_sub_msec_interval") == 0) { - daytime sub1 = time_sub_msec_interval((daytime)lmax->data.val.lval, rmin->data.val.lval), - sub2 = time_sub_msec_interval((daytime)lmin->data.val.lval, rmax->data.val.lval); + daytime v1 = (daytime)lmax->data.val.lval, v2 = (daytime)lmin->data.val.lval, + sub1 = time_sub_msec_interval(v1, rmin->data.val.lval), + sub2 = time_sub_msec_interval(v2, rmax->data.val.lval); - sql_find_subtype(&tp, "time", 0, 0); - res1 = atom_general_ptr(sql->sa, &tp, &sub1); - res2 = atom_general_ptr(sql->sa, &tp, &sub2); + if (sub1 <= v1 && sub2 <= v2) { /* look for overflows */ + sql_find_subtype(&tp, "time", 0, 0); + res1 = atom_general_ptr(sql->sa, &tp, &sub1); + res2 = atom_general_ptr(sql->sa, &tp, &sub2); + } } else if (strcmp(f->func->imp, "timestamp_sub_msec_interval") == 0) { timestamp sub1, sub2; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org