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

do BUNinplace on column main bat instead of BATappend/BUNappend on delta insert 
bat. (bug: columns of sys.schemas have empty main bat)


diffs (217 lines):

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
@@ -80,6 +80,11 @@ bind_del(sql_trans *tr, sql_table *t, in
        return delta_bind_del(t->data, access);
 }
 
+/**static BAT *
+bind_ts_insert(sql_trans *tr, sql_table *t, int access) {
+
+}*/
+
 static BAT *
 delta_bind_ubat(sql_delta *bat, int access, int type)
 {
@@ -448,7 +453,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
        else
                assert(0);
 }
-
+/**
 static void
 delta_append_bat( sql_delta *bat, BAT *i ) 
 {
@@ -471,14 +476,14 @@ delta_append_bat( sql_delta *bat, BAT *i
                bat->cached = NULL;
        }
        assert(!c || BATcount(c) == bat->ibase);
-       if (!bat->ibase && !BATcount(b) && BBP_refs(id) == 1 && BBP_lrefs(id) 
== 1 && !isVIEW(i) && i->ttype /* we need info if this is comming from copy 
into, like role == PERSISTENT */){
+       if (!bat->ibase && !BATcount(b) && BBP_refs(id) == 1 && BBP_lrefs(id) 
== 1 && !isVIEW(i) && i->ttype*/ /* we need info if this is comming from copy 
into, like role == PERSISTENT *//*){
                temp_destroy(bat->ibid);
                bat->ibid = id;
                temp_dup(id);
                bat_destroy(b);
        } else {
                if (!isEbat(b)){
-                       /* try to use mmap() */
+                       *//* try to use mmap() *//*
                        if (BATcount(b)+BATcount(i) > (BUN) REMAP_PAGE_MAXSIZE) 
{ 
                                        BATmmap(b, STORE_MMAP, STORE_MMAP, 
STORE_MMAP, STORE_MMAP, 1);
                        }
@@ -495,8 +500,43 @@ delta_append_bat( sql_delta *bat, BAT *i
        }
        bat->cnt += BATcount(i);
 }
+*/
 
 static void
+insert_val2col(sql_delta *col, void *i) {
+
+       BAT *c;
+
+       if(col->bid)
+               c = temp_descriptor(col->bid);
+       else
+               return;
+
+       printf("#in INSERTVAL2COL\n");
+
+       assert(!c || c->htype == TYPE_void);
+       if (col->cached) {
+                bat_destroy(col->cached);
+                col->cached = NULL;
+        }
+
+       assert(!c || BATcount(c) == col->ibase);
+       /**if (isEbat(c)) {
+               temp_destroy(col->bid);
+               col->bid = temp_copy(c->batCacheid, FALSE);
+               bat_destroy(c);
+               c = temp_descriptor(col->bid);
+       }*/
+
+       assert(c->T->heap.storage != STORE_PRIV);
+
+       BUNinplace(c, BATcount(c), c->H, i, TRUE);
+
+       col->cnt++;
+       bat_destroy(c);
+}
+
+/**static void
 delta_append_val( sql_delta *bat, void *i ) 
 {
 
@@ -524,7 +564,7 @@ delta_append_val( sql_delta *bat, void *
        assert(BUNlast(b) > b->batInserted);
        bat->cnt ++;
        bat_destroy(b);
-}
+}*/
 
 static int 
 dup_col(sql_trans *tr, sql_column *oc, sql_column *c )
@@ -645,10 +685,10 @@ timestamps_insert(sql_trans *tr, sql_tim
 
        nts = ((long)(tr->wtime)) * (-1);
 
-       for(i=0; i<cnt; i++) {
+       for(i=cnt; i>0; i--) {
                /* insert negative timestamps until commit */
-               BUNinplace(insb, BATcount(insb), insb->H, (ptr)&(nts), TRUE);
-               BUNinplace(delb, BATcount(delb), delb->H, (ptr)&(nts), TRUE);
+               BUNinplace(insb, (BATcount(insb) - i), insb->H, (ptr)&nts, 
TRUE);
+               BUNinplace(delb, (BATcount(delb) - i), delb->H, (ptr)&lng_nil, 
TRUE);
        }
        bat_destroy(insb);
        bat_destroy(delb);
@@ -657,6 +697,47 @@ timestamps_insert(sql_trans *tr, sql_tim
 }
 
 static void
+insert_bat2col(sql_delta *col, BAT *i) {
+
+       BAT *c;
+       BUN isz = 0;
+
+       /**if (isEbat(c)) {
+               temp_destroy(col->bid);
+               col->bid = temp_copy(c->batCacheid, FALSE);
+               bat_destroy(c);
+               c = temp_descriptor(col->bid);
+       }*/
+
+       if(col->bid)
+               c = temp_descriptor(col->bid);
+       else
+               return;
+
+       assert(!c || c->htype == TYPE_void);
+       assert(c->T->heap.storage != STORE_PRIV);
+       /**if (col->cached) {
+                bat_destroy(col->cached);
+                col->cached = NULL;
+        }*/
+
+       isz = BATcount(i);
+
+       if(isz==0)
+               return;
+       else {
+               BUN p, q = 0;
+
+               BATloop(i, p, q) {
+                       BUNinplace(c, (BATcount(c) - isz), c->H, 
(ptr)Tloc(i,q), TRUE);
+                       isz--;
+                }
+       }
+       bat_destroy(c);
+       col->cnt += BATcount(i);
+}
+
+static void
 claim_tab(sql_trans *tr, sql_table *t, wrd cnt) {
 
        sql_timestamps *ts;
@@ -665,6 +746,8 @@ claim_tab(sql_trans *tr, sql_table *t, w
        node *n, *in;
        int growF=0;
 
+       printf("#in CLAIM\n");
+
        store_lock();
 
        if (!t->data || !t->base.allocated) {
@@ -710,7 +793,7 @@ claim_tab(sql_trans *tr, sql_table *t, w
 
                                if(newCap > grows)
                                        grows = newCap;
-                               if(BATextend(cmbat, grows) == NULL)
+                               if(BATextend(cmbat, grows) == NULL) /* temp 
solution. will extend block-wise */
                                        return;
                        }
                        BATsetcount(cmbat, (BATcount(cmbat) + (BUN)cnt));
@@ -814,9 +897,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)
-               delta_append_bat(bat, i);
+               insert_bat2col(bat, i);
        else
-               delta_append_val(bat, i);
+               insert_val2col(bat,i);
 }
 
 static void
@@ -840,10 +923,11 @@ append_idx(sql_trans *tr, sql_idx * i, v
                bat = i->data;
        /* appends only write */
        bat->wtime = i->base.wtime = i->t->base.wtime = i->t->s->base.wtime = 
tr->wtime = tr->wstime;
+
        if (tpe == TYPE_bat)
-               delta_append_bat(bat, ib);
+               insert_bat2col(bat, ib);
        else
-               delta_append_val(bat, ib);
+               insert_val2col(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
@@ -183,10 +183,12 @@ table_insert(sql_trans *tr, sql_table *t
        void *val = NULL;
        int cnt = 0;
 
-
        printf("#in table_insert\n");
 
        va_start(va, t);
+
+       store_funcs.claim_tab(tr, t, 1);
+
        for (val = va_arg(va, void *); n && val; n = n->next, val = va_arg(va, 
void *))
        {
                sql_column *c = n->data;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to