Changeset: 19377b09172f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/19377b09172f
Modified Files:
        sql/server/rel_optimize_proj.c
Branch: balanced_union
Log Message:

Fixes memory management bugs


diffs (45 lines):

diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -3737,6 +3737,7 @@ rel_push_join_down_munion(visitor *v, sq
                if (is_munion(l->op) && !need_distinct(l) && !is_single(l) &&
                   !is_munion(r->op)){
                        /* join(munion(a,b,c), d) -> munion(join(a,d), 
join(b,d), join(c,d)) */
+                       list *js = sa_list(v->sql->sa);
                        for (node *n = ((list*)l->l)->h; n; n = n->next) {
                                sql_rel *pc = rel_dup(n->data);
                                if (!is_project(pc->op))
@@ -3752,10 +3753,10 @@ rel_push_join_down_munion(visitor *v, sq
                                pc->attr = exps_copy(v->sql, attr);
                                set_processed(pc);
                                pc = rel_project(v->sql->sa, pc, 
rel_projections(v->sql, pc, NULL, 1, 1));
-                               n->data = pc;
+                               js = append(js, pc);
                        }
                        v->changes++;
-                       return rel_inplace_setop_n_ary(v->sql, rel, l->l, 
op_munion,
+                       return rel_inplace_setop_n_ary(v->sql, rel, js, 
op_munion,
                                                               
rel_projections(v->sql, rel, NULL, 1, 1));
                } else if (is_munion(l->op) && !need_distinct(l) && 
!is_single(l) &&
                               is_munion(r->op) && !need_distinct(r) && 
!is_single(r) &&
@@ -3799,6 +3800,7 @@ rel_push_join_down_munion(visitor *v, sq
                                is_munion(r->op) && !need_distinct(r) && 
!is_single(r) &&
                               !is_semi(rel->op)) {
                        /* join(a, munion(b,c,d)) -> munion(join(a,b), 
join(a,c), join(a,d)) */
+                       list *js = sa_list(v->sql->sa);
                        for (node *n = ((list*)r->l)->h; n; n = n->next) {
                                sql_rel *pc = rel_dup(n->data);
                                if (!is_project(pc->op))
@@ -3814,10 +3816,10 @@ rel_push_join_down_munion(visitor *v, sq
                                pc->attr = exps_copy(v->sql, attr);
                                set_processed(pc);
                                pc = rel_project(v->sql->sa, pc, 
rel_projections(v->sql, pc, NULL, 1, 1));
-                               n->data = pc;
+                               js = append(js, pc);
                        }
                        v->changes++;
-                       return rel_inplace_setop_n_ary(v->sql, rel, r->l, 
op_munion,
+                       return rel_inplace_setop_n_ary(v->sql, rel, js, 
op_munion,
                                                               
rel_projections(v->sql, rel, NULL, 1, 1));
                } else if (!is_munion(l->op) &&
                                is_munion(r->op) && !need_distinct(r) && 
!is_single(r) &&
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to