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

Reply via email to