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

Reply via email to