Changeset: 00e570ae62a4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=00e570ae62a4
Added Files:
        sql/test/BugTracker-2015/Tests/case_type.Bug-3821.sql
        sql/test/BugTracker-2015/Tests/case_type.Bug-3821.stable.err
        sql/test/BugTracker-2015/Tests/case_type.Bug-3821.stable.out
        sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.sql
        
sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.stable.err
        
sql/test/BugTracker-2015/Tests/crash_in_reduce_groupby.Bug-3818.stable.out
        sql/test/BugTracker-2015/Tests/crash_timestamp_convert.Bug-3816.sql
        
sql/test/BugTracker-2015/Tests/crash_timestamp_convert.Bug-3816.stable.err
        
sql/test/BugTracker-2015/Tests/crash_timestamp_convert.Bug-3816.stable.out
        sql/test/BugTracker-2015/Tests/duplicate-constraint.Bug-3820.sql
        sql/test/BugTracker-2015/Tests/duplicate-constraint.Bug-3820.stable.err
        sql/test/BugTracker-2015/Tests/duplicate-constraint.Bug-3820.stable.out
        
sql/test/BugTracker-2015/Tests/fractional_precision_limitation.Bug-3808.sql
        
sql/test/BugTracker-2015/Tests/fractional_precision_limitation.Bug-3808.stable.err
        
sql/test/BugTracker-2015/Tests/fractional_precision_limitation.Bug-3808.stable.out
        sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.sql
        sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.err
        sql/test/BugTracker-2015/Tests/timestamp_convert.Bug-3815.stable.out
Modified Files:
        clients/mapiclient/tomograph.c
        gdk/gdk_bat.c
        gdk/gdk_join.c
        sql/server/rel_optimizer.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/storage/store.c
        sql/test/BugTracker-2015/Tests/All
        sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
        sql/test/BugTracker-2015/Tests/large_join.Bug-3809.sql
        sql/test/BugTracker-2015/Tests/large_join.Bug-3809.stable.out
Branch: default
Log Message:

Merge with Jul2015 branch.


diffs (truncated from 1935 to 300 lines):

diff --git a/clients/mapiclient/tomograph.c b/clients/mapiclient/tomograph.c
--- a/clients/mapiclient/tomograph.c
+++ b/clients/mapiclient/tomograph.c
@@ -1172,7 +1172,7 @@ updatecolormap(int idx)
        if (fnd == 0 && i < NUM_COLORS) {
                /* not found, but still free slot: add new one */
                fnd = i;
-               colors[fnd].mod = mod?strdup(mod): 0;
+               colors[fnd].mod = strdup(mod);
                colors[fnd].fcn = strdup(fcn);
                if( debug) 
                        fprintf(stderr,"-- Added function #%d: %s.%s\n", fnd, 
mod, fcn);
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1126,7 +1126,9 @@ BUNins(BAT *b, const void *h, const void
                if (BUNinplace(bm, p, t, h, force) != GDK_SUCCEED)
                        return GDK_FAIL;
        } else {
+#ifndef STATIC_CODE_ANALYSIS
                size_t hsize = 0, tsize = 0;
+#endif
 
                p = BUNlast(b); /* insert at end */
                if (p == BUN_MAX || b->batCount == BUN_MAX) {
@@ -1140,10 +1142,12 @@ BUNins(BAT *b, const void *h, const void
 
                ALIGNins(b, "BUNins", force, GDK_FAIL);
                b->batDirty = 1;
+#ifndef STATIC_CODE_ANALYSIS
                if (b->H->hash && b->H->vheap)
                        hsize = b->H->vheap->size;
                if (b->T->hash && b->T->vheap)
                        tsize = b->T->vheap->size;
+#endif
 
                setcolprops(b, b->H, h);
                setcolprops(b, b->T, t);
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -470,13 +470,12 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
        if (must_match) {
                GDKerror("%s(%s,%s) does not hit always => can't use 
fetchjoin.\n",
                         func, BATgetId(l), BATgetId(r));
-               BBPreclaim(r1);
-               BBPreclaim(r2);
-               return GDK_FAIL;
+               goto bailout;
        }
        if (lcand) {
                cnt = (BUN) (lcandend - lcand);
-               BATextend(r1, cnt);
+               if (BATextend(r1, cnt) != GDK_SUCCEED)
+                       goto bailout;
                memcpy(Tloc(r1, BUNfirst(r1)), lcand, (lcandend - lcand) * 
sizeof(oid));
                BATsetcount(r1, cnt);
                r1->tkey = 1;
@@ -493,7 +492,8 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
                r1->T->width = 0;
                r1->T->shift = 0;
                r1->tdense = 0;
-               BATextend(r1, cnt);
+               if (BATextend(r1, cnt) != GDK_SUCCEED)
+                       goto bailout;
                BATsetcount(r1, cnt);
                BATseqbase(BATmirror(r1), lstart + l->hseqbase);
        }
@@ -505,7 +505,8 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
                r2->T->width = 0;
                r2->T->shift = 0;
                r2->tdense = 0;
-               BATextend(r2, cnt);
+               if (BATextend(r2, cnt) != GDK_SUCCEED)
+                       goto bailout;
                BATsetcount(r2, cnt);
                BATseqbase(BATmirror(r2), oid_nil);
                BATseqbase(r2, 0);
@@ -521,6 +522,11 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
                          r2 && r2->tsorted ? "-sorted" : "",
                          r2 && r2->trevsorted ? "-revsorted" : "");
        return GDK_SUCCEED;
+
+  bailout:
+       BBPreclaim(r1);
+       BBPreclaim(r2);
+       return GDK_FAIL;
 }
 
 static gdk_return
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
@@ -993,7 +993,7 @@ reorder_join(mvc *sql, sql_rel *rel)
 }
 
 static list *
-push_up_join_exps( sql_rel *rel) 
+push_up_join_exps( mvc *sql, sql_rel *rel) 
 {
        if (rel_is_ref(rel))
                return NULL;
@@ -1009,8 +1009,8 @@ push_up_join_exps( sql_rel *rel)
                        rel->exps = NULL;
                        return l;
                }
-               l = push_up_join_exps(rl);
-               r = push_up_join_exps(rr);
+               l = push_up_join_exps(sql, rl);
+               r = push_up_join_exps(sql, rr);
                if (l && r) {
                        l = list_merge(l, r, (fdup)NULL);
                        r = NULL;
@@ -1036,11 +1036,11 @@ rel_join_order(int *changes, mvc *sql, s
        int e_changes = 0;
 
        if (is_join(rel->op) && rel->exps && !rel_is_ref(rel)) {
+               rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes); 
                if (rel->op == op_join)
-                       rel->exps = push_up_join_exps(rel);
+                       rel->exps = push_up_join_exps(sql, rel);
                rel = reorder_join(sql, rel);
        }
-       rel = rewrite(sql, rel, &rel_remove_empty_select, &e_changes); 
        (void)*changes;
        (void)e_changes;
        return rel;
@@ -4437,7 +4437,7 @@ rel_reduce_groupby_exps(int *changes, mv
                                for (n = rel->exps->h; n; n = n->next) {
                                        sql_exp *e = n->data, *ne = NULL;
 
-                                       if (is_column(e->type)) {
+                                       if (e->type == e_column) {
                                                if (e->l) 
                                                        ne = 
exps_bind_column2(dgbe, e->l, e->r);
                                                else
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -459,6 +459,9 @@ table_foreign_key(mvc *sql, char *name, 
        if (!ft) {
                sql_error(sql, 02, "42S02!CONSTRAINT FOREIGN KEY: no such table 
'%s'\n", rtname);
                return SQL_ERR;
+       } else if (list_find_name(t->keys.set, name)) {
+               sql_error(sql, 02, "42000!CONSTRAINT FOREIGN KEY: key '%s' 
already exists", name);
+               return SQL_ERR;
        } else {
                sql_key *rk = NULL;
                sql_fkey *fk;
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
@@ -4271,11 +4271,12 @@ rel_case(mvc *sql, sql_rel **rel, int to
        list *conds = new_exp_list(sql->sa);
        list *results = new_exp_list(sql->sa);
        dnode *dn = when_search_list->h;
-       sql_subtype *restype = NULL, rtype;
+       sql_subtype *restype = NULL, rtype, bt;
        sql_exp *res = NULL, *else_exp = NULL;
        node *n, *m;
        exp_kind ek = {type_value, card_column, FALSE};
 
+       sql_find_subtype(&bt, "boolean", 0, 0);
        if (dn) {
                sql_exp *cond = NULL, *result = NULL;
 
@@ -4397,6 +4398,9 @@ rel_case(mvc *sql, sql_rel **rel, int to
                if (!(result = rel_check_type(sql, restype, result, 
type_equal))) 
                        return NULL;
 
+               if (!(cond = rel_check_type(sql, &bt, cond, type_equal))) 
+                       return NULL;
+
                /* remove any null's in the condition */
                if (has_nil(cond)) {
                        sql_exp *condnil = rel_unop_(sql, cond, NULL, "isnull", 
card_value);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1876,10 +1876,8 @@ key_dup_(sql_trans *tr, int flag, sql_ke
                        }
        }
        list_append(t->s->keys, nk);
-       if (!copy && flag == TR_NEW && tr->parent == gtrans) {
+       if (!copy && flag == TR_NEW && tr->parent == gtrans) 
                k->base.flag = TR_OLD;
-               nk->base.flag = TR_OLD;
-       }
        return nk;
 }
 
@@ -1950,10 +1948,8 @@ idx_dup(sql_trans *tr, int flag, sql_idx
                if (isTable(ni->t)) 
                        store_funcs.dup_idx(tr, i, ni);
 
-       if (isNew(i) && flag == TR_NEW && tr->parent == gtrans) {
+       if (isNew(i) && flag == TR_NEW && tr->parent == gtrans) 
                i->base.flag = TR_OLD;
-               ni->base.flag = TR_OLD;
-       }
 
        for (n = i->columns->h; n; n = n->next) {
                sql_kc *okc = n->data;
@@ -2040,10 +2036,8 @@ trigger_dup(sql_trans *tr, int flag, sql
                list_append(nt->columns, kc_dup(tr, flag, okc, t));
        }
        list_append(t->s->triggers, nt);
-       if (flag == TR_NEW && tr->parent == gtrans) {
+       if (flag == TR_NEW && tr->parent == gtrans) 
                i->base.flag = TR_OLD;
-               nt->base.flag = TR_OLD;
-       }
        return nt;
 }
 
@@ -2072,10 +2066,8 @@ column_dup(sql_trans *tr, int flag, sql_
            (oc->base.allocated && tr->parent != gtrans))
                if (isTable(c->t)) 
                        store_funcs.dup_col(tr, oc, c);
-       if (isNew(oc) && flag == TR_NEW && tr->parent == gtrans) {
+       if (isNew(oc) && flag == TR_NEW && tr->parent == gtrans) 
                oc->base.flag = TR_OLD;
-               c->base.flag = TR_OLD;
-       }
        return c;
 }
 
@@ -2294,10 +2286,8 @@ table_dup(sql_trans *tr, int flag, sql_t
                if (tr->parent == gtrans)
                        ot->triggers.nelm = NULL;
        }
-       if (isNew(ot) && flag == TR_NEW && tr->parent == gtrans) {
+       if (isNew(ot) && flag == TR_NEW && tr->parent == gtrans) 
                ot->base.flag = TR_OLD;
-               t->base.flag = TR_OLD;
-       }
        return t;
 }
 
@@ -2447,10 +2437,8 @@ schema_dup(sql_trans *tr, int flag, sql_
                if (tr->parent == gtrans)
                        os->seqs.nelm = NULL;
        }
-       if (flag == TR_NEW && tr->parent == gtrans) {
+       if (flag == TR_NEW && tr->parent == gtrans) 
                os->base.flag = TR_OLD;
-               s->base.flag = TR_OLD;
-       }
        return s;
 }
 
@@ -2603,6 +2591,7 @@ rollforward_changeset_updates(sql_trans 
                                                        ok = LOG_ERR;
                                                fb->flag = TR_OLD;
                                        }
+                                       tb->flag = TR_OLD;
                                } else if (!rollforward_creates(tr, fb, mode)) {
                                        ok = LOG_ERR;
                                }
@@ -2734,7 +2723,7 @@ rollforward_create_column(sql_trans *tr,
 
                if ((p && mode == R_SNAPSHOT && 
store_funcs.snapshot_create_col(tr, c) != LOG_OK) ||
                    (p && mode == R_LOG && store_funcs.log_create_col(tr, c) != 
LOG_OK) ||
-                   (mode == R_APPLY &&  store_funcs.create_col(tr, c) != 
LOG_OK))
+                   (mode == R_APPLY && store_funcs.create_col(tr, c) != 
LOG_OK))
                return NULL;
        }
        return c;
diff --git a/sql/test/BugTracker-2015/Tests/All 
b/sql/test/BugTracker-2015/Tests/All
--- a/sql/test/BugTracker-2015/Tests/All
+++ b/sql/test/BugTracker-2015/Tests/All
@@ -63,6 +63,12 @@ savepoint.Bug-3738-1
 savepoint.Bug-3738-2
 string_split.Bug-3564
 schemadiff.Bug-3778
+fractional_precision_limitation.Bug-3808
 not-like-without-wildcard.Bug-3811
 copy_into.Bug-3813
 select-tilde-arg.Bug-3814
+timestamp_convert.Bug-3815
+crash_timestamp_convert.Bug-3816
+crash_in_reduce_groupby.Bug-3818
+duplicate-constraint.Bug-3820
+case_type.Bug-3821
diff --git a/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.sql 
b/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.sql
@@ -0,0 +1,1 @@
+    select case when 1 then 2 else 3 end;
diff --git a/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.stable.err 
b/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2015/Tests/case_type.Bug-3821.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'case_type.Bug-3821` in directory 'sql/test/BugTracker-2015` 
itself:
+
+
+# 10:18:34 >  
+# 10:18:34 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=33329" "--set" 
"mapi_usock=/var/tmp/mtest-6004/.s.monetdb.33329" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/scratch/niels/build/rc/Linux-x86_64/var/MonetDB/mTests_sql_test_BugTracker-2015"
 "--set" "mal_listing=0" "--set" "embedded_r=yes"
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to