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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list