Changeset: 46ebe7af2dcb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=46ebe7af2dcb
Modified Files:
monetdb5/modules/mal/remote.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_UPDATE_crash.Bug-4010.stable.err
Branch: no-wrd
Log Message:
Merge with default branch.
diffs (202 lines):
diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c
--- a/monetdb5/modules/mal/remote.c
+++ b/monetdb5/modules/mal/remote.c
@@ -70,7 +70,7 @@
#ifdef HAVE_MAPI
static connection conns = NULL;
-static unsigned char localtype = 0;
+static unsigned char localtype = 0177;
static inline str RMTquery(MapiHdl *ret, str func, Mapi conn, str query);
static inline str RMTinternalcopyfrom(BAT **ret, char *hdr, stream *in);
@@ -495,7 +495,7 @@ str RMTget(Client cntxt, MalBlkPtr mb, M
}
GDKfree(rt);
- if (isaBatType(rtype) && (localtype == 0 || localtype != c->type ))
+ if (isaBatType(rtype) && (localtype == 0177 || localtype != c->type ))
{
int t, s;
ptr r;
@@ -528,7 +528,7 @@ str RMTget(Client cntxt, MalBlkPtr mb, M
if (ATOMvarsized(t)) {
while (mapi_fetch_row(mhdl)) {
- var = mapi_fetch_field(mhdl, 0);
+ var = mapi_fetch_field(mhdl, 1);
if( var == NULL)
BUNappend(b, str_nil, FALSE);
else
@@ -536,7 +536,7 @@ str RMTget(Client cntxt, MalBlkPtr mb, M
}
} else
while (mapi_fetch_row(mhdl)) {
- var = mapi_fetch_field(mhdl, 0);
+ var = mapi_fetch_field(mhdl, 1);
if (var == NULL)
var = "nil";
s = 0;
@@ -679,12 +679,12 @@ str RMTput(Client cntxt, MalBlkPtr mb, M
msg = createException(MAL, "remote.put", "unsupported type:
%s", tpe);
GDKfree(tpe);
return msg;
- } else if (isaBatType(type) && *(int*) value != 0) {
+ } else if (isaBatType(type) && *(bat*) value != 0) {
BATiter bi;
/* naive approach using bat.new() and bat.insert() calls */
char *tail;
char qbuf[BUFSIZ];
- int bid;
+ bat bid;
BAT *b = NULL;
BUN p, q;
str tailv;
@@ -692,7 +692,7 @@ str RMTput(Client cntxt, MalBlkPtr mb, M
tail = getTypeIdentifier(getColumnType(type));
- bid = *(int *)value;
+ bid = *(bat *)value;
if (bid != 0) {
if ((b = BATdescriptor(bid)) == NULL){
MT_lock_unset(&c->lock);
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
@@ -1686,7 +1686,7 @@ gtr_update_delta( sql_trans *tr, sql_del
}
bat_destroy(ins);
- if (cbat->ucnt) {
+ if (cbat->ucnt && cbat->uibid) {
BAT *ui = temp_descriptor(cbat->uibid);
BAT *uv = temp_descriptor(cbat->uvbid);
/* any updates */
@@ -1945,7 +1945,7 @@ tr_update_delta( sql_trans *tr, sql_delt
}
bat_destroy(ins);
- if (cbat->ucnt || cleared) {
+ if ((cbat->ucnt || cleared) && cbat->uibid) {
BAT *ui = temp_descriptor(cbat->uibid);
BAT *uv = temp_descriptor(cbat->uvbid);
@@ -2144,6 +2144,11 @@ update_table(sql_trans *tr, sql_table *f
} else if (tt->data && ft->base.allocated) {
tr_update_dbat(tr, tt->data, ft->data, ft->cleared);
} else if (store_nr_active == 1 && !ft->base.allocated) {
+ if (!tt->data && tt->po) {
+ sql_table *ot = tr_find_table(tr->parent, tt);
+ tt->data = timestamp_dbat(ot->data, tr->stime);
+ }
+ assert(tt->data);
tr_merge_dbat(tr, tt->data);
ft->data = NULL;
} else if (ft->data) {
@@ -2179,6 +2184,11 @@ update_table(sql_trans *tr, sql_table *f
} else if (oc->data && cc->base.allocated) {
tr_update_delta(tr, oc->data, cc->data,
cc->unique == 1);
} else if (store_nr_active == 1 && !cc->base.allocated)
{
+ if (!oc->data) {
+ sql_column *o =
tr_find_column(tr->parent, oc);
+ oc->data = timestamp_delta(o->data,
tr->stime);
+ }
+ assert(oc->data);
tr_merge_delta(tr, oc->data, oc->unique == 1);
cc->data = NULL;
} else if (cc->data) {
@@ -2239,6 +2249,11 @@ update_table(sql_trans *tr, sql_table *f
} else if (oi->data && ci->base.allocated) {
tr_update_delta(tr, oi->data, ci->data,
0);
} else if (store_nr_active == 1 &&
!ci->base.allocated) {
+ if (!oi->data) {
+ sql_idx *o =
tr_find_idx(tr->parent, oi);
+ oi->data =
timestamp_delta(o->data, tr->stime);
+ }
+ assert(oi->data);
tr_merge_delta(tr, oi->data, 0);
ci->data = NULL;
} else if (ci->data) {
@@ -2294,7 +2309,7 @@ tr_log_delta( sql_trans *tr, sql_delta *
}
bat_destroy(ins);
- if (cbat->ucnt) {
+ if (cbat->ucnt && cbat->uibid) {
BAT *ui = temp_descriptor(cbat->uibid);
BAT *uv = temp_descriptor(cbat->uvbid);
/* any updates */
diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c
--- a/sql/storage/bat/bat_table.c
+++ b/sql/storage/bat/bat_table.c
@@ -142,7 +142,37 @@ full_destroy(sql_column *c, BAT *b)
bat_destroy(b);
}
-static oid column_find_row(sql_trans *tr, sql_column *c, const void *value,
...);
+static oid
+column_find_oid(sql_trans *tr, sql_column *c, const int *vid)
+{
+ BAT *b = NULL, *s = NULL;
+ oid rid = oid_nil;
+
+ b = full_column(tr, c);
+ if (!b)
+ return oid_nil;
+
+ if (store_funcs.count_del(tr, c->t))
+ s = store_funcs.bind_del(tr, c->t, RD_INS);
+
+ if (BAThash(b, 0) == GDK_SUCCEED) {
+ BATiter cni = bat_iterator(b);
+ BUN p;
+
+ HASHloop(cni, cni.b->T->hash, p, vid) {
+ oid pos = p;
+
+ if (!s || BUNfnd(s, &pos) == BUN_NONE) {
+ rid = p;
+ break;
+ }
+ }
+ }
+ if (s)
+ bat_destroy(s);
+ return rid;
+}
+
static oid
column_find_row(sql_trans *tr, sql_column *c, const void *value, ...)
{
@@ -151,14 +181,17 @@ column_find_row(sql_trans *tr, sql_colum
oid rid = oid_nil;
sql_column *n = NULL;
+ va_start(va, value);
+ if ((n = va_arg(va, sql_column *)) == NULL && c->type.type->localtype
==TYPE_int)
+ return column_find_oid(tr, c, value);
+
s = delta_cands(tr, c->t);
if (!s)
return oid_nil;
- va_start(va, value);
b = full_column(tr, c);
if (!b)
return oid_nil;
- if ((n = va_arg(va, sql_column *)) == NULL) {
+ if (!n) {
if (BAThash(b, 0) == GDK_SUCCEED) {
BATiter cni = bat_iterator(b);
BUN p;
diff --git
a/sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_UPDATE_crash.Bug-4010.stable.err
b/sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_UPDATE_crash.Bug-4010.stable.err
---
a/sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_UPDATE_crash.Bug-4010.stable.err
+++
b/sql/test/BugTracker-2016/Tests/RELEASE_SAVEPOINT_after_UPDATE_crash.Bug-4010.stable.err
@@ -30,6 +30,7 @@ stderr of test 'RELEASE_SAVEPOINT_after_
MAPI = (monetdb) /var/tmp/mtest-27142/.s.monetdb.39308
QUERY = DROP TABLE t;
+ERROR = !DROP TABLE: no such table 't'
# 16:19:12 >
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list