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