Changeset: 169662c46d24 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=169662c46d24
Modified Files:
        sql/backends/monet5/sql.mx
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_storage.h
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: newstorage
Log Message:

adapting bat_table.c (bug: ts are still negative)


diffs (truncated from 540 to 300 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -3758,6 +3758,7 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        sql_table *t;
        sql_column *c;
        BAT *tids;
+       //BAT *insb, *delb;
        size_t nr, inr = 0;
        oid sb = 0;
 
@@ -3801,8 +3802,10 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
        BATsetcount(tids, (BUN) nr);
        tids->H->revsorted = 0;
        tids->T->revsorted = 0;
+
+       //insb = store_funcs.bind_ts_insert(tr, t, RD_INS);
        
-       if (store_funcs.count_del(tr, t)) {
+       /*if (store_funcs.count_del(tr, t)) {
                BAT *d = store_funcs.bind_del(tr, t, RD_INS);
                BAT *diff = BATkdiff(tids, BATmirror(d));
 
@@ -3810,7 +3813,9 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
                tids = BATmirror(BATmark(diff, sb));
                BBPunfix(diff->batCacheid);
                BBPunfix(d->batCacheid);
-       }
+       }*/
+
+
        BBPkeepref( *res = tids->batCacheid );
 
        return MAL_SUCCEED;
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
@@ -78,11 +78,63 @@ bind_del(sql_trans *tr, sql_table *t, in
        return delta_bind_del(t->data, access);
 }
 
-/* ToDo : bind ts bats */
-/**static BAT *
+static BAT *
+bind_ts_ins(sql_timestamps *ts, int access) {
+
+       BAT *b;
+
+#ifdef NDEBUG
+        (void) access; /* satisfy compiler */
+#endif
+
+        assert(access == RDONLY || access == RD_INS);
+        assert(access!=RD_UPD);
+        b = temp_descriptor(ts->insbid);
+        assert(b);
+
+        return b;
+}
+
+static BAT *
 bind_ts_insert(sql_trans *tr, sql_table *t, int access) {
 
-}*/
+       if (!t->timestamps) {
+               sql_table *ot = tr_find_table(tr->parent,t);
+               t->timestamps = timestamp_tsbats(ot->timestamps, tr->stime);
+       }
+       t->s->base.rtime = t->base.rtime = tr->stime;
+
+       return bind_ts_ins(t->timestamps, access);
+}
+
+static BAT *
+bind_ts_del(sql_timestamps *ts, int access) {
+
+       BAT *b;
+
+#ifdef NDEBUG
+        (void) access; /* satisfy compiler */
+#endif
+
+        assert(access == RDONLY || access == RD_INS);
+        assert(access!=RD_UPD);
+        b = temp_descriptor(ts->delbid);
+        assert(b);
+
+        return b;
+}
+
+static BAT *
+bind_ts_delete(sql_trans *tr, sql_table *t, int access) {
+
+       if (!t->timestamps) {
+               sql_table *ot = tr_find_table(tr->parent,t);
+               t->timestamps = timestamp_tsbats(ot->timestamps, tr->stime);
+       }
+       t->s->base.rtime = t->base.rtime = tr->stime;
+
+       return bind_ts_del(t->timestamps, access);
+}
 
 static BAT *
 delta_bind_ubat(sql_delta *bat, int access, int type)
@@ -924,7 +976,7 @@ timestamps_delete_bat(sql_trans *tr, sql
                BUN p, q = 0;
 
                BATloop(i, p, q) {
-                       BUN slot = *(Tloc(i,p));
+                       BUN slot = *(BUN*)Tloc(i,p);
                        BUNinplace(delb, slot, delb->H, (ptr)&nts, TRUE);
                }
        }
@@ -1523,6 +1575,9 @@ create_timestamps(sql_trans *tr, sql_tab
                        return load_timestamps(ts, insbid, delbid);
                ok = LOG_ERR;
        } else if (ts->insbid && ts->delbid && !isTempTable(t)) {
+               //log_bid insbid = logger_find_bat(bat_logger, ts->insname);
+                //log_bid delbid = logger_find_bat(bat_logger, ts->delname);
+                //return load_timestamps(ts, insbid, delbid);
                return ok;
        } else {
                        if (!ts->insbid) {
@@ -2416,43 +2471,37 @@ tr_update_dbat(sql_trans *tr, sql_dbat *
 }
 
 int
-tr_update_tsbats(sql_trans *tr, sql_timestamps *tts, sql_timestamps *fts) {
-
-       int ok = LOG_OK;
-       BAT *insb, *delb = NULL;
-       BUN p, q;
-       int curIns, curDel;
-
-       if (!fts)
-               return ok;
-
-       insb = temp_descriptor(fts->insbid);
-       delb = temp_descriptor(fts->delbid);
-
-
-       fts->insbid = 0;
-        fts->delbid = 0;
+tr_update_tsbats(sql_trans *tr, sql_timestamps *fts, sql_timestamps *tts) {
+
+        int ok = LOG_OK;
+        BAT *insb = NULL, *delb = NULL;
+        BUN p, q;
+
+        insb = temp_descriptor(tts->insbid);
+        delb = temp_descriptor(tts->delbid);
+
+        /* convert timestamps to positive */
+        BATloop(insb, p, q) {
+                int curIns = *(int*)Tloc(insb,p) * (-1);
+                if (curIns == tr->wtime)
+                        //BUNinplace(insb, p, insb->H, (ptr)&curIns, TRUE);
+                        *(int*)Tloc(insb,p) = curIns;
+                //curDel = ((int)(*Tloc(delb,p))) * (-1);
+                //if (curDel == tr->wtime)
+                //      BUNinplace(delb, p, delb->H, (ptr)&curDel, TRUE);
+        }
+
         tts->cnt = fts->cnt;
 
-       /* convert timestamps to positive */
-       BATloop(insb, p, q) {
-               curIns = *Tloc(insb,p) * (-1);
-               if (curIns == tr->wtime)
-                       BUNinplace(insb, p, insb->H, (ptr)&curIns, TRUE);
-               curDel = *Tloc(delb,p) * (-1);
-               if (curDel == tr->wtime)
-                       BUNinplace(delb, p, delb->H, (ptr)&curDel, TRUE);
-       }
-
-       bat_destroy(insb);
-       bat_destroy(delb);
+        bat_destroy(insb);
+        bat_destroy(delb);
 
         if (tts->next) {
                 ok = destroy_tsbats(tr, tts->next);
                 tts->next = NULL;
         }
 
-       return ok;
+        return ok;
 }
 
 static int
@@ -2807,6 +2856,8 @@ bat_storage_init( store_functions *sf)
        sf->bind_col = (bind_col_fptr)&bind_col;
        sf->bind_idx = (bind_idx_fptr)&bind_idx;
        sf->bind_del = (bind_del_fptr)&bind_del;
+       sf->bind_ts_insert = (bind_ts_insert_fptr)&bind_ts_insert;
+       sf->bind_ts_delete = (bind_ts_delete_fptr)&bind_ts_delete;
 
        sf->append_col = (append_col_fptr)&append_col;
        sf->append_idx = (append_idx_fptr)&append_idx;
diff --git a/sql/storage/bat/bat_storage.h b/sql/storage/bat/bat_storage.h
--- a/sql/storage/bat/bat_storage.h
+++ b/sql/storage/bat/bat_storage.h
@@ -59,7 +59,7 @@ extern int bat_storage_init( store_funct
 
 extern int tr_update_delta( sql_trans *tr, sql_delta *obat, sql_delta *cbat );
 extern int tr_update_dbat(sql_trans *tr, sql_dbat *tdb, sql_dbat *fdb, int 
cleared);
-extern int tr_update_tsbats(sql_trans *tr, sql_timestamps *tts, sql_timestamps 
*fts);
+extern int tr_update_tsbats(sql_trans *tr, sql_timestamps *fts, sql_timestamps 
*tts);
 extern int tr_log_delta( sql_trans *tr, sql_delta *cbat, int cleared);
 extern int tr_log_dbat(sql_trans *tr, sql_dbat *fdb, int cleared);
 extern int tr_log_tsbats(sql_trans *tr, sql_timestamps *ts, int cleared);
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
@@ -23,7 +23,7 @@
 #include "bat_storage.h"
 
 static BAT *
-delta_full_bat_( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s)
+delta_full_bat_(sql_trans *tr, sql_column *c, sql_delta *bat, int temp, BAT 
*ins, BAT *del,  BAT *s)
 {
        /* return full normalized column bat
 
@@ -37,65 +37,82 @@ delta_full_bat_( sql_column *c, sql_delt
                b := b.kunion(u);
                b := b.kdiff(reverse(d));
        */
-       BAT *r, *b, *u, *i = temp_descriptor(bat->bid);
-       r = i; 
+       //BAT *r, *b, *u, *i = temp_descriptor(bat->ibid);
+       BUN p, q;
+       BAT *res, *u, *b = temp_descriptor(bat->bid);
+       //r = i;
+       res=b;
        if (temp) {
                if (s) {
-                       r = BATsemijoin(i,s);
-                       bat_destroy(i);
+                       res = BATsemijoin(b,s);
+                       bat_destroy(b);
                }
-               return r;
+               return res;
        }
-       b = temp_descriptor(bat->bid);
+       //b = temp_descriptor(bat->bid);
        u = temp_descriptor(bat->ubid);
        if (s) {
                BAT *t;
 
                t = BATsemijoin(b,s); bat_destroy(b); b = t;
-               t = BATsemijoin(i,s); bat_destroy(i); i = t;
+               //t = BATsemijoin(i,s); bat_destroy(i); i = t;
                t = BATsemijoin(u,s); bat_destroy(u); u = t;
        }
-       if (!b) {
+       /*if (!b) {
                b = i;
        } else {
                if (BATcount(i)) {
                        r = BATkunion(b,i); bat_destroy(b); b = r;
                }
                bat_destroy(i); 
-       }
+       }*/
        if (BATcount(u)) {
-               r = BATkdiff(b,u); bat_destroy(b); b = r;
+               res = BATkdiff(b,u); bat_destroy(b); b = res;
                assert(b->ttype == u->ttype);
-               r = BATkunion(b,u); bat_destroy(b); b = r;
+               res = BATkunion(b,u); bat_destroy(b); b = res;
        }
        bat_destroy(u); 
-       if (d && BATcount(d)) {
+       /*if (d && BATcount(d)) {
                r = BATkdiff(b,BATmirror(d)); bat_destroy(b); b = r;
+       }*/
+       //res = BATmirror(ins);
+       BATloopDEL(res, p, q) {
+
+               int ibun = *(int*)Tloc(ins,p);
+               printf("#in insert ts bat %d\n",ibun);
+
+               if (ibun<0 && ibun!=(tr->wtime)*(-1)) //&& ((const 
int)*Tloc(del,p) == int_nil))
+                       p = BUNdelete(res, p, TRUE);//BUNappend(r, (ptr)Tloc(r, 
p), TRUE);
        }
+
+       b=res;
+       bat_destroy(res);
+
        (void)c;
+       (void)del;
        //if (!bat->cached && !c->base.wtime && !c->base.allocated && !s) 
                //bat->cached = temp_descriptor(b->batCacheid);
        return b;
 }
 
 static BAT *
-delta_full_bat( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s)
+delta_full_bat(sql_trans *tr, sql_column *c, sql_delta *bat, int temp, BAT 
*ins, BAT *del, BAT *s)
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to