Changeset: 85d93a52b2fa for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=85d93a52b2fa
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
Branch: Dec2016
Log Message:

set 'set operators' to processed, solving the sqlsmith crashes


diffs (123 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1331,6 +1331,7 @@ rel_read(mvc *sql, char *r, int *pos, li
                exps = read_exps(sql, lrel, rrel, r, pos, '[', 0);
                rel = rel_setop(sql->sa, lrel, rrel, j);
                rel->exps = exps;
+               set_processed(rel);
                return rel;
        case 'd':
                /* 'ddl' not supported */
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
@@ -1899,6 +1899,7 @@ rel_push_topn_down(int *changes, mvc *sq
                        ur = rel_topn(sql->sa, ur, sum_limit_offset(sql, 
rel->exps));
                        u = rel_setop(sql->sa, ul, ur, op_union);
                        u->exps = exps_alias(sql->sa, r->exps); 
+                       set_processed(u);
                        /* possibly add order by column */
                        if (add_r)
                                u->exps = list_merge(u->exps, 
exps_copy(sql->sa, r->r), NULL);
@@ -3580,6 +3581,7 @@ rel_push_aggr_down(int *changes, mvc *sq
 
                u = rel_setop(sql->sa, ul, ur, op_union);
                u->exps = rel_projections(sql, rel, NULL, 1, 1);
+               set_processed(u);
 
                if (rel->r) {
                        list *ogbe = rel->r;
@@ -7325,6 +7327,7 @@ rel_split_outerjoin(int *changes, mvc *s
                        /* add null's for right */
                        add_nulls( sql, nr, r);
                        nl = rel_setop(sql->sa, nl, nr, op_union);
+                       set_processed(nl);
                }
                if (rel->op == op_right || rel->op == op_full) {
                        /* split in 2 anti joins */
@@ -7341,6 +7344,7 @@ rel_split_outerjoin(int *changes, mvc *s
                                rel_projections(sql, r, NULL, 1, 1),
                                (fdup)NULL);
                        nl = rel_setop(sql->sa, nl, nr, op_union);
+                       set_processed(nl);
                }
 
                rel->l = NULL;
@@ -7714,6 +7718,7 @@ rel_merge_table_rewrite(int *changes, mv
                                                sql_rel *r = n->next->data;
                                                nrel = rel_setop(sql->sa, l, r, 
op_union);
                                                nrel->exps = 
rel_projections(sql, rel, NULL, 1, 1);
+                                               set_processed(nrel);
                                                append(ntables, nrel);
                                        }
                                        if (n)
@@ -8411,6 +8416,7 @@ rel_apply_rewrite(int *changes, mvc *sql
                nr = rel_apply(sql, rel_dup(rel->l), rel_dup(r->r), rel->exps, 
rel->flag);
                l = rel_setop(sql->sa, nl, nr, op_union);
                l->exps = list_merge(p, r->exps, (fdup)NULL);
+               set_processed(l);
                rel_destroy(rel);
                (*changes)++;
                return l;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -294,6 +294,7 @@ rel_inplace_setop(sql_rel *rel, sql_rel 
        if (l && r)
                rel->nrcols = l->nrcols + r->nrcols;
        rel->exps = exps;
+       set_processed(rel);
        return rel;
 }
 
@@ -1105,6 +1106,7 @@ rel_or(mvc *sql, sql_rel *l, sql_rel *r,
        set_processed(r);
        rel = rel_setop(sql->sa, l, r, op_union);
        rel->exps = rel_projections(sql, rel, NULL, 1, 1);
+       set_processed(rel);
        rel = rel_distinct(rel);
        if (exps_card(l->exps) <= CARD_AGGR &&
            exps_card(r->exps) <= CARD_AGGR)
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -5304,6 +5304,7 @@ rel_unionjoinquery(mvc *sql, sql_rel *re
        set_processed(rv);
        rel = rel_setop(sql->sa, lv, rv, op_union);
        rel->exps = rel_projections(sql, rel, NULL, 0, 1);
+       set_processed(rel);
        if (!all)
                rel = rel_distinct(rel);
        return rel;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -211,6 +211,7 @@ rel_insert_join_idx(mvc *sql, sql_idx *i
                rel_destroy(ins);
                rt = inserts->r = rel_setop(sql->sa, _nlls, nnlls, op_union );
                rt->exps = rel_projections(sql, nnlls, NULL, 1, 1);
+               set_processed(rt);
        } else {
                inserts->r = nnlls;
        }
@@ -721,6 +722,7 @@ rel_update_join_idx(mvc *sql, sql_idx *i
                rel_destroy(ups);
                rt = updates->r = rel_setop(sql->sa, _nlls, nnlls, op_union );
                rt->exps = rel_projections(sql, nnlls, NULL, 1, 1);
+               set_processed(rt);
        } else {
                updates->r = nnlls;
        }
@@ -1351,8 +1353,10 @@ copyfrom(mvc *sql, dlist *qname, dlist *
 
                        if (!rel)
                                rel = nrel;
-                       else
+                       else {
                                rel = rel_setop(sql->sa, rel, nrel, op_union);
+                               set_processed(rel);
+                       }
                        if (!rel)
                                return rel;
                }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to