Changeset: 34087d48ef7d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=34087d48ef7d Modified Files: sql/server/rel_exp.c sql/server/rel_optimizer.c sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out 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 sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-add.Bug-6630.stable.out Branch: default Log Message:
Merge with Apr2019 branch. diffs (220 lines): diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1455,7 +1455,7 @@ exp_is_null(mvc *sql, sql_exp *e ) list *l = e->l; if (!r && l) - for (n = l->h; n && r; n = n->next) + for (n = l->h; n && !r; n = n->next) r |= exp_is_null(sql, n->data); return r; } 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 @@ -6466,7 +6466,7 @@ rel_mark_used(mvc *sql, sql_rel *rel, in } } -static sql_rel * rel_dce_sub(mvc *sql, sql_rel *rel, list *refs); +static sql_rel * rel_dce_sub(mvc *sql, sql_rel *rel); static sql_rel * rel_remove_unused(mvc *sql, sql_rel *rel) @@ -6769,25 +6769,22 @@ rel_dce_refs(mvc *sql, sql_rel *rel, lis } static sql_rel * -rel_dce_down(mvc *sql, sql_rel *rel, list *refs, int skip_proj) +rel_dce_down(mvc *sql, sql_rel *rel, int skip_proj) { if (!rel) return rel; - if (!skip_proj && rel_is_ref(rel)) { - if (!list_find(refs, rel, NULL)) - list_append(refs, rel); + if (!skip_proj && rel_is_ref(rel)) return rel; - } switch(rel->op) { case op_basetable: case op_table: if (skip_proj && rel->l && rel->op == op_table && rel->flag != 2) - rel->l = rel_dce_down(sql, rel->l, refs, 0); + rel->l = rel_dce_down(sql, rel->l, 0); if (!skip_proj) - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); /* fall through */ case op_truncate: @@ -6797,16 +6794,16 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis case op_insert: rel_used(rel->r); - rel_dce_sub(sql, rel->r, refs); + rel_dce_sub(sql, rel->r); return rel; case op_update: case op_delete: if (skip_proj && rel->r) - rel->r = rel_dce_down(sql, rel->r, refs, 0); + rel->r = rel_dce_down(sql, rel->r, 0); if (!skip_proj) - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); return rel; case op_topn: @@ -6815,9 +6812,9 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis case op_groupby: if (skip_proj && rel->l) - rel->l = rel_dce_down(sql, rel->l, refs, is_topn(rel->op) || is_sample(rel->op)); + rel->l = rel_dce_down(sql, rel->l, is_topn(rel->op) || is_sample(rel->op)); if (!skip_proj) - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); return rel; case op_union: @@ -6825,17 +6822,17 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis case op_except: if (skip_proj) { if (rel->l) - rel->l = rel_dce_down(sql, rel->l, refs, 0); + rel->l = rel_dce_down(sql, rel->l, 0); if (rel->r) - rel->r = rel_dce_down(sql, rel->r, refs, 0); + rel->r = rel_dce_down(sql, rel->r, 0); } if (!skip_proj) - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); return rel; case op_select: if (rel->l) - rel->l = rel_dce_down(sql, rel->l, refs, 0); + rel->l = rel_dce_down(sql, rel->l, 0); return rel; case op_join: @@ -6845,9 +6842,9 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis case op_semi: case op_anti: if (rel->l) - rel->l = rel_dce_down(sql, rel->l, refs, 0); + rel->l = rel_dce_down(sql, rel->l, 0); if (rel->r) - rel->r = rel_dce_down(sql, rel->r, refs, 0); + rel->r = rel_dce_down(sql, rel->r, 0); return rel; } return rel; @@ -6860,7 +6857,7 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis */ static sql_rel * -rel_dce_sub(mvc *sql, sql_rel *rel, list *refs) +rel_dce_sub(mvc *sql, sql_rel *rel) { if (!rel) return rel; @@ -6872,7 +6869,7 @@ rel_dce_sub(mvc *sql, sql_rel *rel, list */ rel_mark_used(sql, rel, 1); rel = rel_remove_unused(sql, rel); - rel_dce_down(sql, rel, refs, 1); + rel_dce_down(sql, rel, 1); return rel; } @@ -6948,7 +6945,6 @@ sql_rel * rel_dce(mvc *sql, sql_rel *rel) { list *refs = sa_list(sql->sa); - //node *n; rel_dce_refs(sql, rel, refs); if (refs) { @@ -6965,7 +6961,7 @@ rel_dce(mvc *sql, sql_rel *rel) } rel = rel_add_projects(sql, rel); rel_used(rel); - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); return rel; } @@ -9153,7 +9149,7 @@ optimize(mvc *sql, sql_rel *rel, int val for (n = refs->h; n; n = n->next) n->data = optimize_rel(sql, n->data, &changes, 0, value_based_opt); } - + rel = rel_dce(sql, rel); return rel; } diff --git a/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out b/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out --- a/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out +++ b/sql/test/BugTracker-2017/Tests/sqlitelogictest-cast-decimal.Bug-6445.stable.out @@ -30,7 +30,7 @@ stdout of test 'sqlitelogictest-cast-dec % real # type % 15 # length #SELECT col0 + - - CAST( NULL AS DECIMAL ) - + col0 + + col1 FROM tab1 cor0 WHERE ( NULL ) IS NOT NULL; -% sys.L3 # table_name +% .L3 # table_name % L3 # name % decimal # type % 20 # length 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 @@ -156,6 +156,12 @@ stdout of test 'sqlitelogictest-aritmeti % bigint # type % 1 # length [ 1 ] +#SELECT CAST ( NULL AS INTEGER ) - 1 - 1 + 2 * 70; --NULL +% .L3 # table_name +% L3 # name +% bigint # type +% 1 # 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 @@ -156,6 +156,12 @@ stdout of test 'sqlitelogictest-aritmeti % hugeint # type % 1 # length [ 1 ] +#SELECT CAST ( NULL AS INTEGER ) - 1 - 1 + 2 * 70; --NULL +% .L3 # table_name +% L3 # name +% hugeint # type +% 1 # length +[ NULL ] # 16:20:37 > # 16:20:37 > "Done." diff --git a/sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-add.Bug-6630.stable.out b/sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-add.Bug-6630.stable.out --- a/sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-add.Bug-6630.stable.out +++ b/sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-add.Bug-6630.stable.out @@ -73,7 +73,7 @@ stdout of test 'sqlitelogictest-cast-nul [ NULL ] #SELECT ALL CAST ( col1 / - - ( + CAST ( NULL AS INTEGER ) ) AS BIGINT ) col0, # CAST ( 39 + + + CAST ( NULL AS INTEGER ) + + - 10 + col1 / - col0 AS BIGINT ) AS col1 FROM tab2; -% sys.L4, .L10 # table_name +% .L4, .L10 # table_name % col0, col1 # name % bigint, bigint # type % 1, 1 # length _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list