Changeset: df241d8bff29 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=df241d8bff29
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_transaction.c
        sql/backends/monet5/sql_user.c
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/server/sql_privileges.c
        sql/storage/bat/bat_storage.c
        sql/storage/store.c
        sql/test/BugTracker-2018/Tests/All
        sql/test/merge-partitions/Tests/All
        sql/test/remote/Tests/invalid_creds.SQL.py
Branch: default
Log Message:

Merge with Apr2019 branch.


diffs (truncated from 939 to 300 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
@@ -254,7 +254,7 @@ SQLabort(Client cntxt, MalBlkPtr mb, Mal
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
 
-       if (sql->session->active) {
+       if (sql->session->tr->active) {
                msg = mvc_rollback(sql, 0, NULL, false);
        }
        return msg;
@@ -2021,7 +2021,7 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        sql_table *t;
        sql_column *c;
        BAT *tids;
-       size_t nr, inr = 0;
+       size_t nr, inr = 0, dcnt;
        oid sb = 0;
 
        *res = bat_nil;
@@ -2064,13 +2064,17 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        if (tids == NULL)
                throw(SQL, "sql.tid", SQLSTATE(HY001) MAL_MALLOC_FAIL);
 
-       if (store_funcs.count_del(tr, t)) {
+       if ((dcnt=store_funcs.count_del(tr, t)) > 0) {
                BAT *d = store_funcs.bind_del(tr, t, RD_INS);
                BAT *diff;
-               if (d == NULL)
+               if (d == NULL) {
+                       BBPunfix(tids->batCacheid);
                        throw(SQL,"sql.tid", SQLSTATE(45002) "Can not bind 
delete column");
+               }
 
                diff = BATdiff(tids, d, NULL, NULL, false, false, BUN_NONE);
+               (void)dcnt;
+               assert(pci->argc == 6 || BATcount(diff) == (nr-dcnt));
                BBPunfix(d->batCacheid);
                BBPunfix(tids->batCacheid);
                if (diff == NULL)
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -817,6 +817,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                return msg;
        if ((msg = checkSQLContext(c)) != NULL)
                return msg;
+       SQLtrans(m);
        if (!m->sa)
                m->sa = sa_create();
        if (!m->sa)
@@ -852,6 +853,10 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                        resetMalBlk(c->curprg->def, oldstop);
                        freeVariables(c, c->curprg->def, NULL, oldvtop);
                }
+               if (!msg)
+                       msg = mvc_commit(m, 0, NULL, false);
+               else
+                       msg = mvc_rollback(m, 0, NULL, false);
        }
        return msg;
 }
@@ -886,6 +891,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
+       SQLtrans(m);
        if (!m->sa)
                m->sa = sa_create();
        if (!m->sa)
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
@@ -326,11 +326,11 @@ SQLresetClient(Client c)
                mvc *m = be->mvc;
 
                assert(m->session);
-               if (m->session->auto_commit && m->session->active) {
+               if (m->session->auto_commit && m->session->tr->active) {
                        if (mvc_status(m) >= 0)
                                msg = mvc_commit(m, 0, NULL, false);
                }
-               if (m->session->active)
+               if (m->session->tr->active)
                        other = mvc_rollback(m, 0, NULL, false);
 
                res_tables_destroy(m->results);
@@ -542,7 +542,9 @@ SQLinit(Client c)
                if (!m->sa) {
                        msg = createException(MAL, "createdb", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                } else if (maybeupgrade) {
+                       SQLtrans(m);
                        SQLupgrades(c,m);
+                       msg = mvc_commit(m, 0, NULL, false);
                }
                maybeupgrade = 0;
        }
@@ -621,7 +623,7 @@ SQLautocommit(mvc *m)
 {
        str msg = MAL_SUCCEED;
 
-       if (m->session->auto_commit && m->session->active) {
+       if (m->session->auto_commit && m->session->tr->active) {
                if (mvc_status(m) < 0) {
                        msg = mvc_rollback(m, 0, NULL, false);
                } else {
@@ -635,7 +637,7 @@ str
 SQLtrans(mvc *m)
 {
        m->caching = m->cache;
-       if (!m->session->active) {
+       if (!m->session->tr->active) {
                sql_session *s;
 
                if (mvc_trans(m) < 0)
@@ -1073,7 +1075,7 @@ SQLparser(Client c)
                        commit = (!m->session->auto_commit && v);
                        m->session->auto_commit = (v) != 0;
                        m->session->ac_on_commit = m->session->auto_commit;
-                       if (m->session->active) {
+                       if (m->session->tr->active) {
                                if (commit) {
                                        msg = mvc_commit(m, 0, NULL, true);
                                } else {
diff --git a/sql/backends/monet5/sql_transaction.c 
b/sql/backends/monet5/sql_transaction.c
--- a/sql/backends/monet5/sql_transaction.c
+++ b/sql/backends/monet5/sql_transaction.c
@@ -106,7 +106,7 @@ SQLtransaction_begin(Client cntxt, MalBl
 
        if (sql->session->auto_commit == 0)
                throw(SQL, "sql.trans", SQLSTATE(25001) "START TRANSACTION: 
cannot start a transaction within a transaction");
-       if (sql->session->active)
+       if (sql->session->tr->active)
                msg = mvc_rollback(sql, 0, NULL, false);
        sql->session->auto_commit = 0;
        sql->session->ac_on_commit = 1;
@@ -135,7 +135,7 @@ SQLtransaction2(Client cntxt, MalBlkPtr 
                return msg;
        if (sql->session->auto_commit == 0)
                throw(SQL, "sql.trans", SQLSTATE(25001) "START TRANSACTION: 
cannot start a transaction within a transaction");
-       if (sql->session->active)
+       if (sql->session->tr->active)
                msg = mvc_rollback(sql, 0, NULL, false);
        sql->session->auto_commit = 0;
        sql->session->ac_on_commit = 1;
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -552,7 +552,7 @@ monet5_user_set_def_schema(mvc *m, oid u
        }
 
        if (!schema || !mvc_set_schema(m, schema)) {
-               if (m->session->active) {
+               if (m->session->tr->active) {
                        if((other = mvc_rollback(m, 0, NULL, false)) != 
MAL_SUCCEED)
                                freeException(other);
                }
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -140,6 +140,7 @@ base_init(sql_allocator *sa, sql_base * 
        assert(sa);
        b->wtime = 0;
        b->rtime = 0;
+       b->stime = 0;
        b->flags = flags;
        b->name = NULL;
        b->refcnt = 1;
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -194,6 +194,7 @@ typedef int sqlid;
 typedef struct sql_base {
        int wtime;
        int rtime;
+       int stime;
        int allocated;
        int flags;
        int refcnt;
@@ -245,6 +246,7 @@ typedef struct sql_trans {
        int wtime;              /* timestamp of latest write performed in 
transaction*/
        int schema_number;      /* schema timestamp */
        int schema_updates;     /* set on schema changes */
+       int active;             /* active transaction */
        int status;             /* status of the last query */
        list *dropped;          /* protection against recursive cascade action*/
        list *moved_tables;
@@ -669,7 +671,6 @@ typedef struct sql_session {
                                   commit, rollback, etc. */
        char auto_commit;
        int level;              /* TRANSACTION isolation level */
-       int active;             /* active transaction */
        int status;             /* status, ok/error */
        backend_stack stk;
 } sql_session;
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -285,7 +285,7 @@ int
 mvc_trans(mvc *m)
 {
        int schema_changed = 0, err = m->session->status;
-       assert(!m->session->active);    /* can only start a new transaction */
+       assert(!m->session->tr->active);        /* can only start a new 
transaction */
 
        store_lock();
        if (GDKverbose >= 1)
@@ -372,7 +372,7 @@ mvc_commit(mvc *m, int chain, const char
        char operation[BUFSIZ];
 
        assert(tr);
-       assert(m->session->active);     /* only commit an active transaction */
+       assert(m->session->tr->active); /* only commit an active transaction */
 
        if (mvc_debug)
                fprintf(stderr, "#mvc_commit %s\n", (name) ? name : "");
@@ -521,7 +521,7 @@ mvc_rollback(mvc *m, int chain, const ch
                fprintf(stderr, "#mvc_rollback %s\n", (name) ? name : "");
 
        assert(tr);
-       assert(m->session->active);     /* only abort an active transaction */
+       assert(m->session->tr->active); /* only abort an active transaction */
        (void) disabling_auto_commit;
 
        store_lock();
@@ -589,7 +589,7 @@ mvc_release(mvc *m, const char *name)
        str msg = MAL_SUCCEED;
 
        assert(tr);
-       assert(m->session->active);     /* only release active transactions */
+       assert(m->session->tr->active); /* only release active transactions */
 
        if (mvc_debug)
                fprintf(stderr, "#mvc_release %s\n", (name) ? name : "");
@@ -715,7 +715,7 @@ mvc_reset(mvc *m, bstream *rs, stream *w
                fprintf(stderr, "#mvc_reset\n");
        tr = m->session->tr;
        if (tr && tr->parent) {
-               assert(m->session->active == 0);
+               assert(m->session->tr->active == 0);
                store_lock();
                while (tr->parent->parent != NULL) 
                        tr = sql_trans_destroy(tr);
@@ -784,7 +784,7 @@ mvc_destroy(mvc *m)
        tr = m->session->tr;
        if (tr) {
                store_lock();
-               if (m->session->active)
+               if (m->session->tr->active)
                        sql_trans_end(m->session);
                while (tr->parent)
                        tr = sql_trans_destroy(tr);
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -736,7 +736,7 @@ mvc_set_schema(mvc *m, char *schema)
                        _DELETE(m->session->schema_name);
                m->session->schema_name = new_schema_name;
                m->type = Q_TRANS;
-               if (m->session->active)
+               if (m->session->tr->active)
                        m->session->schema = s;
                ret = 1;
        } else if(new_schema_name) {
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
@@ -15,22 +15,11 @@
 
 #define SNAPSHOT_MINSIZE ((BUN) 1024*128)
 
-static sql_trans *
-oldest_active_transaction(void)
-{
-       sql_session *s = active_sessions->h->data;
-       return s->tr;
-}
-
 sql_delta *
 timestamp_delta( sql_delta *d, int ts)
 {
        while (d->next && d->wtime > ts) 
                d = d->next;
-       if (/* DISABLES CODE */ (0) && d && d->cached) {
-               bat_destroy(d->cached);
-               d->cached = NULL;
-       }
        return d;
 }
 
@@ -39,10 +28,6 @@ timestamp_dbat( sql_dbat *d, int ts)
 {
        while (d->next && d->wtime > ts) 
                d = d->next;
-       if (/* DISABLES CODE */ (0) && d && d->cached) {
-               bat_destroy(d->cached);
-               d->cached = NULL;
-       }
        return d;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to