Changeset: 5f8e2e0f6c80 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5f8e2e0f6c80
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_scenario.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
Branch: Oct2020
Log Message:

merged with Jun2020


diffs (264 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1597,7 +1597,7 @@ str
 mvc_append_column(sql_trans *t, sql_column *c, BAT *ins)
 {
        int res = store_funcs.append_col(t, c, ins, TYPE_bat);
-       if (res != 0)
+       if (res != LOG_OK)
                throw(SQL, "sql.append", SQLSTATE(42000) "Cannot append 
values");
        return MAL_SUCCEED;
 }
@@ -1653,7 +1653,7 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        const char *tname = *getArgReference_str(stk, pci, 3);
        const char *cname = *getArgReference_str(stk, pci, 4);
        ptr ins = getArgReference(stk, pci, 5);
-       int tpe = getArgType(mb, pci, 5);
+       int tpe = getArgType(mb, pci, 5), err = 0;
        sql_schema *s;
        sql_table *t;
        sql_column *c;
@@ -1688,12 +1688,15 @@ mvc_append_wrap(Client cntxt, MalBlkPtr 
        if( b && BATcount(b) > 4096 && !b->batTransient)
                BATmsync(b);
        if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
-               store_funcs.append_col(m->session->tr, c, ins, tpe);
+               if (store_funcs.append_col(m->session->tr, c, ins, tpe) != 
LOG_OK)
+                       err = 1;
        } else if (cname[0] == '%') {
                sql_idx *i = mvc_bind_idx(m, s, cname + 1);
-               if (i)
-                       store_funcs.append_idx(m->session->tr, i, ins, tpe);
-       }
+               if (i && store_funcs.append_idx(m->session->tr, i, ins, tpe) != 
LOG_OK)
+                       err = 1;
+       }
+       if (err)
+               throw(SQL, "sql.append", SQLSTATE(42S02) "append failed");
        if (b) {
                BBPunfix(b->batCacheid);
        }
@@ -1713,7 +1716,7 @@ mvc_update_wrap(Client cntxt, MalBlkPtr 
        bat Tids = *getArgReference_bat(stk, pci, 5);
        bat Upd = *getArgReference_bat(stk, pci, 6);
        BAT *tids, *upd;
-       int tpe = getArgType(mb, pci, 6);
+       int tpe = getArgType(mb, pci, 6), err = 0;
        sql_schema *s;
        sql_table *t;
        sql_column *c;
@@ -1755,14 +1758,17 @@ mvc_update_wrap(Client cntxt, MalBlkPtr 
        if( tids && BATcount(tids) > 4096 && !tids->batTransient)
                BATmsync(tids);
        if (cname[0] != '%' && (c = mvc_bind_column(m, t, cname)) != NULL) {
-               store_funcs.update_col(m->session->tr, c, tids, upd, TYPE_bat);
+               if (store_funcs.update_col(m->session->tr, c, tids, upd, 
TYPE_bat) != LOG_OK)
+                       err = 1;
        } else if (cname[0] == '%') {
                sql_idx *i = mvc_bind_idx(m, s, cname + 1);
-               if (i)
-                       store_funcs.update_idx(m->session->tr, i, tids, upd, 
TYPE_bat);
+               if (i && store_funcs.update_idx(m->session->tr, i, tids, upd, 
TYPE_bat) != LOG_OK)
+                       err = 1;
        }
        BBPunfix(tids->batCacheid);
        BBPunfix(upd->batCacheid);
+       if (err)
+               throw(SQL, "sql.update", SQLSTATE(42S02) "update failed");
        return MAL_SUCCEED;
 }
 
@@ -1789,6 +1795,8 @@ mvc_clear_table_wrap(Client cntxt, MalBl
        if (t == NULL)
                throw(SQL, "sql.clear_table", SQLSTATE(42S02) "Table missing 
%s.%s", sname,tname);
        *res = mvc_clear_table(m, t);
+       if (*res == BUN_NONE)
+               throw(SQL, "sql.clear_table", SQLSTATE(42S02) "clear failed");
        return MAL_SUCCEED;
 }
 
@@ -1836,7 +1844,8 @@ mvc_delete_wrap(Client cntxt, MalBlkPtr 
        }
        if( b && BATcount(b) > 4096 && !b->batTransient)
                BATmsync(b);
-       store_funcs.delete_tab(m->session->tr, t, b, tpe);
+       if (store_funcs.delete_tab(m->session->tr, t, b, tpe) != LOG_OK)
+               throw(SQL, "sql.delete", SQLSTATE(3F000) "delete failed");
        if (b)
                BBPunfix(b->batCacheid);
        return MAL_SUCCEED;
@@ -4061,7 +4070,7 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
        bat bid;
        BAT *b, *del;
        node *o;
-       int i, bids[2049];
+       int i, bids[2049], err = 0;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                return msg;
@@ -4126,17 +4135,21 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt
        }
        BBPunfix(del->batCacheid);
 
-       mvc_clear_table(m, t);
+       if (mvc_clear_table(m, t) == BUN_NONE)
+               throw(SQL, name, SQLSTATE(42000) "vacumm: clear failed");
        for (o = t->columns.set->h, i = 0; o; o = o->next, i++) {
                sql_column *c = o->data;
                BAT *ins = BATdescriptor(bids[i]);      /* use the insert bat */
 
                if( ins){
-                       store_funcs.append_col(tr, c, ins, TYPE_bat);
+                       if (store_funcs.append_col(tr, c, ins, TYPE_bat) != 
LOG_OK)
+                               err = 1;
                        BBPunfix(ins->batCacheid);
                }
                BBPrelease(bids[i]);
        }
+       if (err)
+               throw(SQL, name, SQLSTATE(42000) "vacuum: reappend failed");
        /* TODO indices */
        return MAL_SUCCEED;
 }
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -792,6 +792,8 @@ SQLreader(Client c)
                        go = msg == MAL_SUCCEED;
                        commit_done = true;
                }
+               if (m->session->tr && m->session->tr->active)
+                       c->idle = 0;
 
                if (go && in->pos >= in->len) {
                        ssize_t rd;
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
@@ -2024,7 +2024,7 @@ static BUN
 clear_col(sql_trans *tr, sql_column *c)
 {
        if (bind_col_data(tr, c) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        c->t->s->base.wtime = c->t->base.wtime = c->base.wtime = tr->wstime;
        if (c->data)
                return clear_delta(tr, c->data);
@@ -2037,7 +2037,7 @@ clear_idx(sql_trans *tr, sql_idx *i)
        if (!isTable(i->t) || (hash_index(i->type) && list_length(i->columns) 
<= 1) || !idx_has_column(i->type))
                return 0;
        if (bind_idx_data(tr, i) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        i->t->s->base.wtime = i->t->base.wtime = i->base.wtime = tr->wstime;
        if (i->data)
                return clear_delta(tr, i->data);
@@ -2076,7 +2076,7 @@ clear_del(sql_trans *tr, sql_table *t)
 {
 
        if (bind_del_data(tr, t) == LOG_ERR)
-               return 0;
+               return BUN_NONE;
        t->s->base.wtime = t->base.wtime = tr->wstime;
        return clear_dbat(tr, t->data);
 }
@@ -2771,9 +2771,11 @@ update_table(sql_trans *tr, sql_table *f
                                        oc->data = timestamp_delta(o->data, 
oc->base.stime);
                                }
                                assert(oc->data);
-                               if (tr_merge_delta(tr, oc->data, oc->unique == 
1) != LOG_OK)
-                                       ok = LOG_ERR;
-                               cc->data = NULL;
+                               if (cc->base.wtime) {
+                                       if (tr_merge_delta(tr, oc->data, 
oc->unique == 1) != LOG_OK)
+                                               ok = LOG_ERR;
+                                       cc->data = NULL;
+                               }
                        } else if (cc->data) {
                                tr_handle_snapshot(tr, cc->data);
                                oc->data = cc->data;
@@ -2852,9 +2854,11 @@ update_table(sql_trans *tr, sql_table *f
                                                oi->data = 
timestamp_delta(o->data, oi->base.stime);
                                        }
                                        assert(oi->data);
-                                       if (tr_merge_delta(tr, oi->data, 0) != 
LOG_OK)
-                                               ok = LOG_ERR;
-                                       ci->data = NULL;
+                                       if (ci->base.wtime) {
+                                               if (tr_merge_delta(tr, 
oi->data, 0) != LOG_OK)
+                                                       ok = LOG_ERR;
+                                               ci->data = NULL;
+                                       }
                                } else if (ci->data) {
                                        tr_handle_snapshot(tr, ci->data);
                                        oi->data = ci->data;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -37,6 +37,7 @@ store_type active_store_type = store_bat
 int store_readonly = 0;
 int store_singleuser = 0;
 int store_initialized = 0;
+int store_debug = 0;
 
 store_functions store_funcs;
 table_functions table_funcs;
@@ -2076,6 +2077,7 @@ store_init(sql_allocator *pa, int debug,
 
        store_readonly = readonly;
        store_singleuser = singleuser;
+       store_debug = debug;
 
        MT_lock_set(&bs_lock);
 
@@ -6513,28 +6515,34 @@ sql_trans_clear_table(sql_trans *tr, sql
 {
        node *n = t->columns.set->h;
        sql_column *c = n->data;
-       BUN sz = 0;
+       BUN sz = 0, nsz = 0;
 
        t->cleared = 1;
        t->base.wtime = t->s->base.wtime = tr->wtime = tr->wstime;
        c->base.wtime = tr->wstime;
 
-       sz += store_funcs.clear_col(tr, c);
-       sz -= store_funcs.clear_del(tr, t);
+       if ((nsz = store_funcs.clear_col(tr, c)) == BUN_NONE)
+               return BUN_NONE;
+       sz += nsz;
+       if ((nsz = store_funcs.clear_del(tr, t)) == BUN_NONE)
+               return BUN_NONE;
+       sz -= nsz;
 
        for (n = n->next; n; n = n->next) {
                c = n->data;
                c->base.wtime = tr->wstime;
 
-               (void)store_funcs.clear_col(tr, c);
+               if (store_funcs.clear_col(tr, c) == BUN_NONE)
+                       return BUN_NONE;
        }
        if (t->idxs.set) {
                for (n = t->idxs.set->h; n; n = n->next) {
                        sql_idx *ci = n->data;
 
                        ci->base.wtime = tr->wstime;
-                       if (isTable(ci->t) && idx_has_column(ci->type))
-                               (void)store_funcs.clear_idx(tr, ci);
+                       if (isTable(ci->t) && idx_has_column(ci->type) &&
+                               store_funcs.clear_idx(tr, ci) == BUN_NONE)
+                               return BUN_NONE;
                }
        }
        return sz;
@@ -7611,7 +7619,7 @@ sql_trans_begin(sql_session *s)
        int snr = tr->schema_number;
 
        /* add wait when flush is realy needed */
-       while (ATOMIC_GET(&flusher.flush_now)) {
+       while ((store_debug&16)==16 && ATOMIC_GET(&flusher.flush_now)) {
                MT_lock_unset(&bs_lock);
                MT_sleep_ms(sleeptime);
                MT_lock_set(&bs_lock);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to