Changeset: e8c60cd2b678 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e8c60cd2b678 Modified Files: sql/server/rel_optimizer.c sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out.int128 Branch: Apr2019 Log Message:
fixes against overflow in atom_mul diffs (69 lines): diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -3030,7 +3030,8 @@ exp_simplify_math( mvc *sql, sql_exp *e, atom *la = exp_flatten(sql, le); atom *ra = exp_flatten(sql, re); - if (la && ra) { + /* TODO check if output type is larger then input */ + if (la && ra && subtype_cmp(atom_type(la), atom_type(ra)) == 0 && subtype_cmp(atom_type(la), exp_subtype(e)) == 0) { atom *a = atom_mul(la, ra); if (a && atom_cast(sql->sa, a, exp_subtype(e))) { diff --git a/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out b/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out --- a/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out +++ b/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out @@ -163,6 +163,24 @@ Ready. % bigint # type % 1 # length [ NULL ] +#SELECT ALL - - 11 + 51 + + 32 + 13 - - - NULLIF ( - + 52, + + 19 ) - + ( + + 9 ) + + 44 * - 69 / + - 30 + 24 / - 71 + + CAST ( NULL AS REAL ) * - 72 + - 44 * - + 68 + - + COUNT ( DISTINCT 55 ) AS col1; -- NULL +% .L5 # table_name +% col1 # name +% real # type +% 15 # length +[ NULL ] +#SELECT - + 94 * - 81 / + 4 + + 92 * + + CAST ( NULL AS REAL ) * + + 97 * - ( + - COUNT ( * ) ) AS col0; -- NULL +% .L5 # table_name +% col0 # name +% real # type +% 15 # length +[ NULL ] +#SELECT 71 * - 59 / - COUNT ( * ) + - 98 * - + 35 / + CAST ( NULL AS REAL ) / - ( + COUNT ( * ) ) AS col0; --NULL +% .L6 # table_name +% col0 # name +% real # type +% 15 # length +[ NULL ] # 16:20:37 > # 16:20:37 > "Done." diff --git a/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out.int128 b/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out.int128 --- a/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out.int128 +++ b/sql/test/BugTracker-2018/Tests/sqlitelogictest-aritmetic-expressions-handling.Bug-6576.stable.out.int128 @@ -163,6 +163,24 @@ Ready. % hugeint # type % 1 # length [ NULL ] +#SELECT ALL - - 11 + 51 + + 32 + 13 - - - NULLIF ( - + 52, + + 19 ) - + ( + + 9 ) + + 44 * - 69 / + - 30 + 24 / - 71 + + CAST ( NULL AS REAL ) * - 72 + - 44 * - + 68 + - + COUNT ( DISTINCT 55 ) AS col1; -- NULL +% .L5 # table_name +% col1 # name +% real # type +% 15 # length +[ NULL ] +#SELECT - + 94 * - 81 / + 4 + + 92 * + + CAST ( NULL AS REAL ) * + + 97 * - ( + - COUNT ( * ) ) AS col0; -- NULL +% .L5 # table_name +% col0 # name +% real # type +% 15 # length +[ NULL ] +#SELECT 71 * - 59 / - COUNT ( * ) + - 98 * - + 35 / + CAST ( NULL AS REAL ) / - ( + COUNT ( * ) ) AS col0; --NULL +% .L6 # table_name +% col0 # name +% real # type +% 15 # length +[ NULL ] # 16:20:37 > # 16:20:37 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list