Changeset: 36a2ac3a4ad8 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36a2ac3a4ad8 Modified Files: sql/server/rel_optimizer.c sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out Branch: Apr2019 Log Message:
fix for fix in changeset c6c91400555f also more cleanup diffs (171 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 @@ -6260,7 +6260,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) @@ -6570,25 +6570,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: @@ -6598,16 +6595,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: @@ -6616,9 +6613,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: @@ -6626,17 +6623,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: @@ -6646,9 +6643,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; case op_apply: assert(0); @@ -6663,7 +6660,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; @@ -6675,7 +6672,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; } @@ -6751,11 +6748,6 @@ rel_add_projects(mvc *sql, sql_rel *rel) sql_rel * rel_dce(mvc *sql, sql_rel *rel) { - list *refs = sa_list(sql->sa); - //node *n; - - if (refs == NULL) - return NULL; if (sql->sqs) { node *n; @@ -6770,10 +6762,9 @@ rel_dce(mvc *sql, sql_rel *rel) } } - rel_dce_refs(sql, rel, refs); rel = rel_add_projects(sql, rel); rel_used(rel); - rel_dce_sub(sql, rel, refs); + rel_dce_sub(sql, rel); return rel; } @@ -9789,7 +9780,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-2015/Tests/crash.Bug-3736.stable.out b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out --- a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out +++ b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out @@ -106,7 +106,7 @@ project ( | | | | | ) [ "b2a"."open_auction_id" NOT NULL = "o"."open_auction_id" NOT NULL ] | | | | ) [ "L63"."L63", "L56"."L56" ] [ "L63"."L63" HASHCOL , "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT NULL, "L12"."L12" NOT NULL, "b2"."id" NOT NULL HASHCOL , "b2"."increase" NOT NULL, "L56"."L56" HASHCOL , sys.max no nil ("b2a"."id" NOT NULL HASHCOL ) NOT NULL as "L23"."L23" ] | | | ) [ "b2"."id" NOT NULL HASHCOL = "L23"."L23" NOT NULL ] -| | ) [ "L63"."L63" HASHCOL , "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT NULL, "L12"."L12" NOT NULL, "b2"."id" NOT NULL HASHCOL , "b2"."increase" NOT NULL, "L56"."L56" HASHCOL , "L23"."L23" NOT NULL, sys.sql_mul("L12"."L12" NOT NULL, double "2") as "L70"."L70", "b2"."increase" NOT NULL as "L71"."L71" ] +| | ) [ "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT NULL, "L12"."L12" NOT NULL, "b2"."increase" NOT NULL, sys.sql_mul("L12"."L12" NOT NULL, double "2") as "L70"."L70", "b2"."increase" NOT NULL as "L71"."L71" ] | ) [ "L70"."L70" <= "L71"."L71" NOT NULL ] ) [ "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT NULL ] #Select b.* FROM open_auctions o, bidder b WHERE (select b3.INCREASE from bidder b3 where b3.id = (select min (b3a.id) from bidder b3a where b3a.open_auction_id = o.open_auction_id)) * 2 <= (Select b2.INCREASE from bidder b2 where b2.id = (SELECT MAX (b2a.id) from bidder b2a where b2a.open_auction_id = o.open_auction_id)) AND o.open_auction_id = b.open_auction_id order by date, time; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list