Changeset: 5a755804ddca for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5a755804ddca Added Files: sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.sql sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.err sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.stable.out sql/test/BugTracker-2017/Tests/dce_bug-6177.sql sql/test/BugTracker-2017/Tests/dce_bug-6177.stable.err sql/test/BugTracker-2017/Tests/dce_bug-6177.stable.out sql/test/mergetables/Tests/addtable.sql sql/test/mergetables/Tests/addtable.stable.err sql/test/mergetables/Tests/addtable.stable.out Modified Files: gdk/gdk_bbp.c sql/backends/monet5/sql.c sql/backends/monet5/sql_scenario.c 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 sql/server/sql_atom.c sql/test/BugTracker-2017/Tests/All sql/test/BugTracker-2017/Tests/rel2bin_project-assert.Bug-6080.stable.err sql/test/BugTracker-2017/Tests/rel2bin_project-assert.Bug-6080.stable.out sql/test/mergetables/Tests/All Branch: default Log Message:
merged with Dec2016 diffs (truncated from 1136 to 300 lines): diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c --- a/gdk/gdk_bbp.c +++ b/gdk/gdk_bbp.c @@ -439,11 +439,15 @@ fixsorted(void) b->tnosorted = 0; b->tsorted = 1; } else { - if (b == NULL) { + if (!loaded) { b = BATdescriptor(bid); bi = bat_iterator(b); + if (b == NULL) + b = BBP_desc(bid); + else + loaded = 1; } - if (b == NULL || + if (!loaded || ATOMcmp(b->ttype, BUNtail(bi, b->tnosorted - 1), BUNtail(bi, b->tnosorted)) <= 0) { diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -282,7 +282,6 @@ create_table_or_view(mvc *sql, char *sna sql_table *nt = NULL; node *n; - (void)tname; if (STORE_READONLY) return sql_error(sql, 06, "25006!schema statements cannot be executed on a readonly database."); diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -251,10 +251,12 @@ SQLinit(void) throw(SQL, "SQLinit", "Starting log manager failed"); } GDKregister(sqllogthread); - if (MT_create_thread(&idlethread, (void (*)(void *)) mvc_idlemanager, NULL, MT_THR_JOINABLE) != 0) { - throw(SQL, "SQLinit", "Starting idle manager failed"); + if (!(SQLdebug&1024)) { + if (MT_create_thread(&idlethread, (void (*)(void *)) mvc_idlemanager, NULL, MT_THR_JOINABLE) != 0) { + throw(SQL, "SQLinit", "Starting idle manager failed"); + } + GDKregister(idlethread); } - GDKregister(idlethread); return MAL_SUCCEED; } 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 @@ -1336,6 +1336,7 @@ rel_read(mvc *sql, char *r, int *pos, li exps = read_exps(sql, lrel, rrel, NULL, 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; @@ -5637,8 +5639,14 @@ exps_mark_used(sql_allocator *sa, sql_re int len = list_length(rel->exps), i; sql_exp **exps = SA_NEW_ARRAY(sa, sql_exp*, len); - for (n=rel->exps->h, i = 0; n; n = n->next, i++) - exps[i] = n->data; + for (n=rel->exps->h, i = 0; n; n = n->next, i++) { + sql_exp *e = exps[i] = n->data; + + nr += e->used; + } + + if (!nr && is_project(rel->op)) /* project atleast one column */ + exps[0]->used = 1; for (i = len-1; i >= 0; i--) { sql_exp *e = exps[i]; @@ -7319,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 */ @@ -7335,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; @@ -7708,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) @@ -8405,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; } @@ -1109,6 +1110,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 @@ -772,17 +772,27 @@ rel_values( mvc *sql, symbol *tableref) sql_exp *vals = m->data; list *vals_list = vals->f; list *nexps = sa_list(sql->sa); + sql_subtype *tpe = exp_subtype(vals_list->h->data); + + if (tpe) + vals->tpe = *tpe; /* first get super type */ - vals->tpe = *exp_subtype(vals_list->h->data); - for (n = vals_list->h; n; n = n->next) { sql_exp *e = n->data; - sql_subtype super; - - supertype(&super, &vals->tpe, exp_subtype(e)); - vals->tpe = super; + sql_subtype super, *ttpe; + + ttpe = exp_subtype(e); + if (tpe && ttpe) { + supertype(&super, tpe, ttpe); + vals->tpe = super; + tpe = &vals->tpe; + } else { + tpe = ttpe; + } } + if (!tpe) + continue; for (n = vals_list->h; n; n = n->next) { sql_exp *e = n->data; @@ -5298,6 +5308,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; } diff --git a/sql/test/BugTracker-2017/Tests/All b/sql/test/BugTracker-2017/Tests/All --- a/sql/test/BugTracker-2017/Tests/All +++ b/sql/test/BugTracker-2017/Tests/All @@ -18,6 +18,8 @@ group-by-on-constant.Bug-6082 rel2bin_project-assert.Bug-6080 str2decimal.Bug-6202 integer_addition_overflow.Bug-6205 +dce_bug-6177 +crash_on_NULL_ptr.Bug-6130 sqlsmith01 sqlsmith02 sqlsmith03 diff --git a/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.sql b/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.sql new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2017/Tests/crash_on_NULL_ptr.Bug-6130.sql @@ -0,0 +1,284 @@ +/* Temporary tables to ease the loading process */ +CREATE TABLE "LOADONLY_comments" ( + id BIGINT NOT NULL PRIMARY KEY, + creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL, + locationIP VARCHAR(40) NOT NULL, + browserUsed VARCHAR(40) NOT NULL, + content VARCHAR(2000) NOT NULL, + length INT NOT NULL, + creator BIGINT NOT NULL, + place_id BIGINT NOT NULL, + replyOfPost BIGINT, + replyOfComment BIGINT +); + +CREATE TABLE "LOADONLY_comment_tags" ( + comment_id BIGINT NOT NULL, + tag_id BIGINT NOT NULL, + PRIMARY KEY(comment_id, tag_id) +); + +CREATE TABLE "LOADONLY_posts" ( + id BIGINT NOT NULL PRIMARY KEY, + imageFile VARCHAR(40), + creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL, + locationIP VARCHAR(40) NOT NULL, + browserUsed VARCHAR(40) NOT NULL, + "language" VARCHAR(40), + content VARCHAR(2000), + length INT NOT NULL, + creator BIGINT NOT NULL, + forum_id BIGINT NOT NULL, + place_id BIGINT NOT NULL +); + +CREATE TABLE "LOADONLY_post_tags" ( + post_id BIGINT NOT NULL, + tag_id BIGINT NOT NULL, + PRIMARY KEY(post_id, tag_id) +); + + +/* Relations */ +CREATE TABLE forums( + id BIGINT NOT NULL PRIMARY KEY, + title VARCHAR(80) NOT NULL, + creationDate TIMESTAMP(3) WITH TIME ZONE NOT NULL, + moderator BIGINT /*though it seems that all generated tuples have always a moderator */ +); + +CREATE TABLE forum_persons( + forum_id BIGINT NOT NULL, + person_id BIGINT NOT NULL, + joinDate TIMESTAMP(3) WITH TIME ZONE NOT NULL, + PRIMARY KEY(forum_id, person_id) +); + +CREATE TABLE forum_tags( + forum_id BIGINT NOT NULL, _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list