Changeset: ca6a22295c47 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ca6a22295c47
Modified Files:
        sql/include/sql_catalog.h
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/storage/store.c
Branch: newstorage
Log Message:

buggy christmas


diffs (172 lines):

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
@@ -203,6 +203,7 @@ typedef struct sql_trans {
        int rtime;
        int wtime;
        int btime;              /* begin transaction timestamp */
+       BUN firstclaimed;       /* 1st BAT slot to insert */
        int schema_number;      /* schema timestamp */
        int schema_updates;     /* set on schema changes */
        int status;             /* status of the last query */
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
@@ -463,7 +463,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
 }
 
 static void
-insert_val2col(sql_delta *col, void *i) {
+insert_val2col(sql_trans *tr ,sql_delta *col, void *i) {
 
        BAT *c = temp_descriptor(col->bid);
 
@@ -475,7 +475,7 @@ insert_val2col(sql_delta *col, void *i) 
 
        assert(c->T->heap.storage != STORE_PRIV);
 
-       BUNinplace(c, (BATcount(c) -1), c->H, i, TRUE);
+       BUNinplace(c, tr->firstclaimed, c->H, i, TRUE);
 
        col->cnt++;
        bat_destroy(c);
@@ -558,6 +558,8 @@ timestamps_insert(sql_trans *tr, sql_tab
        wrd i;
        int nts=0;
 
+       BUN first = tr->firstclaimed;
+
        assert(!insb || insb->htype == TYPE_void);
        assert(!delb || delb->htype == TYPE_void);
 
@@ -570,8 +572,9 @@ timestamps_insert(sql_trans *tr, sql_tab
 
        /* insert negative timestamps until commit */
        for(i=cnt; i>0; i--) {
-               BUNinplace(insb, (BATcount(insb) - (BUN)i), insb->H, (ptr)&nts, 
TRUE);
-               BUNinplace(delb, (BATcount(delb) - (BUN)i), delb->H, &int_nil, 
TRUE);
+               BUNinplace(insb, first, insb->H, (ptr)&nts, TRUE);
+               BUNinplace(delb, first, delb->H, &int_nil, TRUE);
+               first++;
        }
 
        bat_destroy(insb);
@@ -581,10 +584,11 @@ timestamps_insert(sql_trans *tr, sql_tab
 }
 
 static void
-insert_bat2col(sql_delta *col, BAT *i) {
+insert_bat2col(sql_trans *tr, sql_delta *col, BAT *i) {
 
        BAT *c = temp_descriptor(col->bid);
        BUN isz = 0;
+       BUN first = -1;
 
        assert(!c || c->htype == TYPE_void);
        assert(c->T->heap.storage != STORE_PRIV);
@@ -594,6 +598,7 @@ insert_bat2col(sql_delta *col, BAT *i) {
                 col->cached = NULL;
         }
 
+       first = tr->firstclaimed;
        isz = BATcount(i);
 
        if(isz==0)
@@ -602,8 +607,9 @@ insert_bat2col(sql_delta *col, BAT *i) {
                BUN p, q = 0;
 
                BATloop(i, p, q) {
-                       BUNinplace(c, (BATcount(c) - isz), c->H, 
(ptr)Tloc(i,p), TRUE);
-                       isz--;
+                       BUNinplace(c, first /*(BATcount(c) - isz)*/, c->H, 
(ptr)Tloc(i,p), TRUE);
+                       first++;
+                       //isz--;
                 }
        }
        bat_destroy(c);
@@ -626,6 +632,8 @@ claim_tab(sql_trans *tr, sql_table *t, w
 
        store_lock();
 
+       //tr->firstclaimed = -1;
+
        if (!t->data || !t->base.allocated) {
                 sql_table *ot = tr_find_table(tr->parent, t);
                 sql_timestamps *ts = t->data = ZNEW(sql_timestamps), *ots = 
timestamp_tsbats(ot->data, tr->stime);
@@ -724,14 +732,16 @@ claim_tab(sql_trans *tr, sql_table *t, w
         }
        BATsetcount(delb, (BATcount(delb) + (BUN)cnt));
 
+       tr->firstclaimed = BATcount(insb) - (BUN)cnt;
+
        bat_destroy(insb);
        bat_destroy(delb);
 
        ts->wtime /*= t->base.wtime = t->s->base.wtime */= tr->wtime = 
tr->wstime;
 
+       store_unlock();
+
        timestamps_insert(tr, t, ts, cnt);
-
-       store_unlock();
 }
 
 static void 
@@ -760,9 +770,9 @@ append_col(sql_trans *tr, sql_column *c,
        /* therefor mark appends as reads */
        //c->t->s->base.rtime = c->t->base.rtime = tr->stime;
        if (tpe == TYPE_bat)
-               insert_bat2col(bat, i);
+               insert_bat2col(tr, bat, i);
        else
-               insert_val2col(bat,i);
+               insert_val2col(tr, bat, i);
 }
 
 static void
@@ -789,9 +799,9 @@ append_idx(sql_trans *tr, sql_idx * i, v
        bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime = 
tr->wtime = tr->wstime;
 
        if (tpe == TYPE_bat)
-               insert_bat2col(bat, ib);
+               insert_bat2col(tr, bat, ib);
        else
-               insert_val2col(bat,ib);
+               insert_val2col(tr, bat,ib);
 }
 
 static void
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
@@ -117,8 +117,9 @@ delta_full_bat_(sql_trans *tr, sql_colum
        }
        b = BATmirror(res);*/
 
-       if (!bat->cached && !c->base.wtime && !c->base.allocated && !s)
-               bat->cached = temp_descriptor(b->batCacheid);
+       //if (!bat->cached && !c->base.wtime && !c->base.allocated && !s)
+               //bat->cached = temp_descriptor(b->batCacheid);
+       (void)c;
 
        return b;
 
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -940,6 +940,7 @@ create_trans(sql_allocator *sa, backend_
        t->btime = btimestamp();
        t->schema_updates = 0;
        t->status = 0;
+       t->firstclaimed = -1;
 
        t->parent = NULL;
        t->stk = stk;
@@ -2273,6 +2274,7 @@ trans_init(sql_trans *t, backend_stack s
        t->wtime = t->rtime = 0;
        t->stime = ot->wtime;
        t->wstime = timestamp();
+       t->firstclaimed = -1;
 
        t->btime = btimestamp();
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to