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