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

Reply via email to