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