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

implemented claim_tab, tr_update_tsbats. almost done with timestamps_insert


diffs (158 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
@@ -58,7 +58,7 @@ delta_bind_del(sql_dbat *bat, int access
 #ifdef NDEBUG
        (void) access; /* satisfy compiler */
 #endif
-       printf("#in delta_bind_del\n");
+       //printf("#in delta_bind_del\n");
 
        assert(access == RDONLY || access == RD_INS);
        assert(access!=RD_UPD);
@@ -71,7 +71,7 @@ delta_bind_del(sql_dbat *bat, int access
 static BAT *
 bind_del(sql_trans *tr, sql_table *t, int access)
 {
-       printf("#in bind_del\n");
+       //printf("#in bind_del\n");
        if (!t->data) {
                sql_table *ot = tr_find_table(tr->parent, t);
                t->data = timestamp_dbat(ot->data, tr->stime);
@@ -618,9 +618,41 @@ dup_timestamps(sql_trans *tr, sql_table 
 }
 
 static void
+timestamps_insert(sql_trans *tr, sql_timestamps *ts, wrd cnt) {
+
+       BAT *b = temp_descriptor(ts->insbid);
+       int i;
+
+       /*if (isEbat(b)) {
+                temp_destroy(ts->insbid);
+                ts->insbid = temp_copy(b->batCacheid, FALSE);
+                bat_destroy(b);
+                b = temp_descriptor(ts->insbid);
+        }**/
+
+       assert(b->T->heap.storage != STORE_PRIV);
+
+       for(i=0; i<cnt; i++)
+               BUNappend(b, (ptr)&(tr->wtime), TRUE); /* should append 
negative values */
+
+       bat_destroy(b);
+       ts->cnt += cnt;
+}
+
+static void
 claim_tab(sql_trans *tr, sql_table *t, wrd cnt) {
 
        sql_timestamps *ts;
+       sql_dbat *bat;
+
+       if (!t->data || !t->base.allocated) {
+                sql_table *ot = tr_find_table(tr->parent, t);
+                sql_dbat *bat = t->data = ZNEW(sql_dbat), *obat = 
timestamp_dbat(ot->data, tr->stime);
+                dup_dbat(tr, obat, bat, isNew(ot), isTempTable(t));
+                //t->base.allocated = 1;
+        }
+       bat = t->data;
+       (void)bat;
 
        if (!t->timestamps || !t->base.allocated) {
                 sql_table *ot = tr_find_table(tr->parent, t);
@@ -628,9 +660,11 @@ claim_tab(sql_trans *tr, sql_table *t, w
                 dup_tsbats(tr, ots, ts, isNew(ot), isTempTable(t));
                 t->base.allocated = 1;
         }
-
-       (void)ts;
-       cnt+=1;
+       ts = t->timestamps;
+
+       ts->wtime = tr->wtime = tr->wstime;
+
+       timestamps_insert(tr, ts, cnt);
 }
 
 static void 
@@ -2159,6 +2193,60 @@ tr_update_dbat(sql_trans *tr, sql_dbat *
        return ok;
 }
 
+int
+tr_update_tsbats(sql_trans *tr, sql_timestamps *tts, sql_timestamps *fts, int 
cleared) {
+
+       int ok = LOG_OK;
+       BAT *delb = NULL;
+       BAT *insb = NULL;
+
+       if (!fts)
+               return ok;
+
+       assert(store_nr_active==1);
+
+       insb = temp_descriptor(fts->insbid);
+       if (BUNlast(insb) > insb->batInserted || cleared) {
+               BAT *tsb = temp_descriptor(tts->insbid);
+
+                if (BATcount(insb) > SNAPSHOT_MINSIZE) {
+                       temp_destroy(tts->insbid);
+                       tts->insbid = fts->insbid;
+               } else {
+                       append_inserted(tsb, insb);
+                       temp_destroy(fts->insbid);
+               }
+               fts->insbid = 0;
+               tts->cnt = fts->cnt;
+               bat_destroy(tsb);
+       }
+       bat_destroy(insb);
+
+       delb = temp_descriptor(fts->delbid);
+       if (BUNlast(delb) > delb->batInserted || cleared) {
+                BAT *tsb = temp_descriptor(tts->delbid);
+
+                if (BATcount(delb) > SNAPSHOT_MINSIZE) {
+                        temp_destroy(tts->delbid);
+                        tts->delbid = fts->delbid;
+                } else {
+                        append_inserted(tsb, delb);
+                        temp_destroy(fts->delbid);
+                }
+                fts->delbid = 0;
+                tts->cnt = fts->cnt;
+                bat_destroy(tsb);
+        }
+        bat_destroy(delb);
+
+        if (tts->next) {
+                ok = destroy_tsbats(tr, tts->next);
+                tts->next = NULL;
+        }
+
+       return ok;
+}
+
 static int
 update_table(sql_trans *tr, sql_table *ft, sql_table *tt)
 {
@@ -2204,6 +2292,7 @@ update_table(sql_trans *tr, sql_table *f
                } else {
                        assert(tt->base.allocated);
                        tr_update_dbat(tr, tt->data, ft->data, ft->cleared);
+                       tr_update_tsbats(tr, tt->timestamps, ft->timestamps, 
ft->cleared);
                }
        }
        for (n = ft->columns.set->h, m = tt->columns.set->h; ok == LOG_OK && n 
&& m; n = n->next, m = m->next) {
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,6 +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, int cleared);
 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);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to