Changeset: 82f8e8d60c68 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=82f8e8d60c68
Modified Files:
        monetdb5/modules/mal/remote.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
Branch: default
Log Message:

merged with Jun2016


diffs (191 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;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to