Changeset: 6b937379c58e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6b937379c58e
Modified Files:
sql/backends/monet5/for.c
Branch: pushcands
Log Message:
Merged with default
diffs (truncated from 432 to 300 lines):
diff --git a/sql/backends/monet5/dict.c b/sql/backends/monet5/dict.c
--- a/sql/backends/monet5/dict.c
+++ b/sql/backends/monet5/dict.c
@@ -237,7 +237,7 @@ DICTcompress_col(Client cntxt, MalBlkPtr
if (!c)
throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s'
unknown", sname, tname, cname);
if (c->storage_type)
- throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s'
allready compressed", sname, tname, cname);
+ throw(SQL, "dict.compress", SQLSTATE(3F000) "column '%s.%s.%s'
already compressed", sname, tname, cname);
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o, *u;
@@ -1083,7 +1083,7 @@ DICTprepare4append_vals(void **noffsets,
}
if (!f) {
if (BATcount(dict) >= (64*1024)-1) {
- assert(0);
+ assert(0);
GDKfree(n);
return -2;
} else {
diff --git a/sql/backends/monet5/for.c b/sql/backends/monet5/for.c
--- a/sql/backends/monet5/for.c
+++ b/sql/backends/monet5/for.c
@@ -42,7 +42,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
tt != TYPE_hge &&
#endif
tt != TYPE_lng && tt != TYPE_int)
- throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress:
invalid type");
+ throw(SQL, "for.decompress", SQLSTATE(3F000) "for decompress:
invalid offset type");
BAT *o = BATdescriptor(O), *b = NULL;
if (!o) {
@@ -76,7 +76,7 @@ FORdecompress(Client cntxt, MalBlkPtr mb
}
} else {
bat_destroy(o);
- throw(SQL, "for.decompress", SQLSTATE(3F000) "unknown offset
type");
+ throw(SQL, "for.decompress", SQLSTATE(3F000) "offset type %s
not yet implemented", ATOMname(tt));
}
bat_destroy(o);
BATsetcount(b, cnt);
@@ -109,14 +109,7 @@ FORcompress_intern(char **comp_min_val,
}
BUN cnt = BATcount(b);
-#ifdef HAVE_HGE
- if (b->ttype == TYPE_hge) {
- GDKfree(mn);
- GDKfree(mx);
- throw(SQL, "for.compress", SQLSTATE(3F000) "for compress:
implement type hge");
- } else
-#endif
- if (b->ttype == TYPE_lng) {
+ if (tt == TYPE_lng) {
lng min_val = *(lng*)mn;
lng max_val = *(lng*)mx;
GDKfree(mn);
@@ -141,14 +134,10 @@ FORcompress_intern(char **comp_min_val,
ov[i] = (sht)(iv[i] - min_val);
}
snprintf(buf, 64, "FOR-" LLFMT, min_val);
- } else if (b->ttype == TYPE_int) {
- GDKfree(mn);
- GDKfree(mx);
- throw(SQL, "for.compress", SQLSTATE(3F000) "for compress:
implement type int");
} else {
GDKfree(mn);
GDKfree(mx);
- throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type
not yet implemented");
+ throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: type
%s not yet implemented", ATOMname(tt));
}
if (!(*comp_min_val = GDKstrdup(buf))) {
bat_destroy(o);
@@ -199,7 +188,7 @@ FORcompress_col(Client cntxt, MalBlkPtr
if (c->null)
throw(SQL, "for.compress", SQLSTATE(3F000) "for compress: for
'for' compression column's cannot have NULL's");
if (c->storage_type)
- throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s'
allready compressed", sname, tname, cname);
+ throw(SQL, "for.compress", SQLSTATE(3F000) "column '%s.%s.%s'
already compressed", sname, tname, cname);
sqlstore *store = tr->store;
BAT *b = store->storage_api.bind_col(tr, c, RDONLY), *o = NULL;
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
@@ -1720,7 +1720,7 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
if (!r)
return 0;
- if (rel_is_ref(r) && refs_find_rel(refs, r)) /* allready handled */
+ if (rel_is_ref(r) && refs_find_rel(refs, r)) /* already handled */
return 0;
switch (r->op) {
case op_basetable: {
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1080,7 +1080,7 @@ static BAT *
dict_append_bat(column_storage *cs, BAT *i)
{
BAT *newoffsets = NULL;
- BAT *u = temp_descriptor(cs->ebid);
+ BAT *u = temp_descriptor(cs->ebid), *b = NULL, *n = NULL;
if (!u)
return NULL;
@@ -1091,16 +1091,19 @@ dict_append_bat(column_storage *cs, BAT
/* returns new offset bat (ie to be appended), possibly with
larger type ! */
if (BATcount(u) >= max_cnt) {
if (max_cnt == 64*1024) { /* decompress */
- BAT *b = temp_descriptor(cs->bid);
+ if (!(b = temp_descriptor(cs->bid))) {
+ bat_destroy(u);
+ return NULL;
+ }
if (cs->ucnt) {
BAT *ui = NULL, *uv = NULL;
BAT *nb = COLcopy(b, b->ttype, true,
TRANSIENT);
+ bat_destroy(b);
if (!nb || cs_real_update_bats(cs, &ui,
&uv) != LOG_OK) {
- bat_destroy(b);
+ bat_destroy(nb);
bat_destroy(u);
return NULL;
}
- bat_destroy(b);
b = nb;
if (BATupdate(b, ui, uv, true) !=
GDK_SUCCEED) {
bat_destroy(ui);
@@ -1111,12 +1114,11 @@ dict_append_bat(column_storage *cs, BAT
bat_destroy(ui);
bat_destroy(uv);
}
- BAT *n = b?DICTdecompress_(b , u):NULL;
+ n = DICTdecompress_(b, u);
bat_destroy(b);
assert(newoffsets == NULL);
if (!n) {
bat_destroy(u);
- bat_destroy(n);
return NULL;
}
if (cs->bid)
@@ -1135,18 +1137,22 @@ dict_append_bat(column_storage *cs, BAT
cs->st = ST_DEFAULT;
cs->cleared = true;
} else {
- BAT *b = temp_descriptor(cs->bid);
- BAT *n = b?DICTenlarge(b, BATcount(b),
BATcount(b) + BATcount(i)):NULL;
+ if (!(b = temp_descriptor(cs->bid))) {
+ bat_destroy(newoffsets);
+ bat_destroy(u);
+ return NULL;
+ }
+ n = DICTenlarge(b, BATcount(b), BATcount(b) +
BATcount(i));
bat_destroy(b);
if (!n) {
bat_destroy(newoffsets);
bat_destroy(u);
- bat_destroy(n);
return NULL;
}
if (cs->bid)
temp_destroy(cs->bid);
cs->bid = temp_create(n);
+ bat_destroy(n);
cs->cleared = true;
i = newoffsets;
}
@@ -1196,10 +1202,13 @@ cs_update_bat( sql_trans *tr, column_sto
/* possibly a new array is returned */
updates = dict_append_bat(cs, updates);
if (oupdates != updates)
- bat_destroy(oupdates);
+ bat_destroy(oupdates);
oupdates = updates;
- if (!updates)
+ if (!updates) {
+ if (otids != tids)
+ bat_destroy(otids);
return LOG_ERR;
+ }
}
/* When we go to smaller grained update structures we should check for
concurrent updates on this column ! */
@@ -1489,25 +1498,27 @@ static void *
dict_append_val(column_storage *cs, void *i, BUN cnt)
{
void *newoffsets = NULL;
- BAT *u = temp_descriptor(cs->ebid);
+ BAT *u = temp_descriptor(cs->ebid), *b = NULL, *n = NULL;
if (!u)
return NULL;
BUN max_cnt = (BATcount(u) < 256)?256:64*1024;
if (DICTprepare4append_vals(&newoffsets, i, cnt, u) < 0) {
- assert(0);
+ assert(0);
} else {
/* returns new offset bat (ie to be appended), possibly with
larger type ! */
if (BATcount(u) >= max_cnt) {
if (max_cnt == 64*1024) { /* decompress */
- BAT *b = temp_descriptor(cs->bid);
- BAT *n = b?DICTdecompress_(b , u):NULL;
+ if (!(b = temp_descriptor(cs->bid))) {
+ bat_destroy(u);
+ return NULL;
+ }
+ n = DICTdecompress_(b, u);
/* TODO also decrompress updates if any */
bat_destroy(b);
assert(newoffsets == NULL);
if (!n) {
bat_destroy(u);
- bat_destroy(n);
return NULL;
}
/* TODO change storage type */
@@ -1521,18 +1532,22 @@ dict_append_val(column_storage *cs, void
cs->st = ST_DEFAULT;
cs->cleared = true;
} else {
- BAT *b = temp_descriptor(cs->bid);
- BAT *n = b?DICTenlarge(b, BATcount(b),
BATcount(b) + cnt):NULL;
+ if (!(b = temp_descriptor(cs->bid))) {
+ GDKfree(newoffsets);
+ bat_destroy(u);
+ return NULL;
+ }
+ n = DICTenlarge(b, BATcount(b), BATcount(b) +
cnt);
bat_destroy(b);
if (!n) {
GDKfree(newoffsets);
bat_destroy(u);
- bat_destroy(n);
return NULL;
}
if (cs->bid)
temp_destroy(cs->bid);
cs->bid = temp_create(n);
+ bat_destroy(n);
cs->cleared = true;
i = newoffsets;
}
@@ -1730,6 +1745,7 @@ update_col_execute(sql_trans *tr, sql_de
static int
update_col(sql_trans *tr, sql_column *c, void *tids, void *upd, int tpe)
{
+ int res = LOG_OK;
bool update_conflict = false;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
@@ -1746,9 +1762,10 @@ update_col(sql_trans *tr, sql_column *c,
if ((!inTransaction(tr, c->t) && (odelta != delta || isTempTable(c->t))
&& isGlobal(c->t)) || (!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col,
isTempTable(c->t)?NULL:&log_update_col);
- int res = update_col_execute(tr, delta, c->t, isNew(c), tids, upd, tpe
== TYPE_bat);
+ if ((res = update_col_execute(tr, delta, c->t, isNew(c), tids, upd, tpe
== TYPE_bat)) != LOG_OK)
+ return res;
if (delta->cs.st == ST_DEFAULT && c->storage_type)
- sql_trans_alter_storage(tr, c, NULL);
+ res = sql_trans_alter_storage(tr, c, NULL);
return res;
}
@@ -1823,11 +1840,14 @@ delta_append_bat(sql_trans *tr, sql_delt
lock_column(tr->store, id);
if (bat->cs.st == ST_DICT) {
- oi = i = dict_append_bat(&bat->cs, i);
- if (!oi) {
+ BAT *ni = dict_append_bat(&bat->cs, i);
+ if (oi != i) /* oi and i will be replaced, so destroy possible
unmask reference */
+ bat_destroy(oi);
+ if (!ni) {
unlock_column(tr->store, id);
return LOG_ERR;
}
+ oi = i = ni;
}
b = temp_descriptor(bat->cs.bid);
@@ -1954,6 +1974,7 @@ append_col_execute(sql_trans *tr, sql_de
static int
append_col(sql_trans *tr, sql_column *c, BUN offset, BAT *offsets, void *i,
BUN cnt, int tpe)
{
+ int res = LOG_OK;
sql_delta *delta, *odelta = ATOMIC_PTR_GET(&c->data);
if ((delta = bind_col_data(tr, c, NULL)) == NULL)
@@ -1965,9 +1986,10 @@ append_col(sql_trans *tr, sql_column *c,
if ((!inTransaction(tr, c->t) && (odelta != delta ||
!segments_in_transaction(tr, c->t) || isTempTable(c->t)) && isGlobal(c->t)) ||
(!isNew(c->t) && isLocalTemp(c->t)))
trans_add(tr, &c->base, delta, &tc_gc_col, &commit_update_col,
isTempTable(c->t)?NULL:&log_update_col);
- int res = append_col_execute(tr, delta, c->base.id, offset, offsets, i,
cnt, tpe == TYPE_bat);
+ if ((res = append_col_execute(tr, delta, c->base.id, offset, offsets,
i, cnt, tpe == TYPE_bat)) != LOG_OK)
+ return res;
if (delta->cs.st == ST_DEFAULT && c->storage_type)
- sql_trans_alter_storage(tr, c, NULL);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list