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