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

ready to fill timestamp bats


diffs (206 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
@@ -3811,7 +3811,8 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
                BBPunfix(diff->batCacheid);
                BBPunfix(d->batCacheid);
        }
-       BBPkeepref( *res = tids->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
@@ -36,19 +36,19 @@ timestamp_delta( sql_delta *d, int ts)
 static sql_dbat *
 timestamp_dbat( sql_dbat *d, int ts)
 {
+       printf("#in timestamp_dbat\n");
        while (d->next && d->wtime > ts) 
                d = d->next;
        return d;
 }
 
-/**static sql_timestamps *
+static sql_timestamps *
 timestamp_tsbats(sql_timestamps *ts, int timestamp) {
 
        while (ts->next && ts->wtime > timestamp)
                ts = ts->next;
        return ts;
-}*/
-
+}
 
 static BAT *
 delta_bind_del(sql_dbat *bat, int access) 
@@ -58,6 +58,7 @@ delta_bind_del(sql_dbat *bat, int access
 #ifdef NDEBUG
        (void) access; /* satisfy compiler */
 #endif
+       printf("#in delta_bind_del\n");
 
        assert(access == RDONLY || access == RD_INS);
        assert(access!=RD_UPD);
@@ -70,6 +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");
        if (!t->data) {
                sql_table *ot = tr_find_table(tr->parent, t);
                t->data = timestamp_dbat(ot->data, tr->stime);
@@ -594,19 +596,11 @@ dup_tsbats(sql_trans *tr, sql_timestamps
        ts->delname = _STRDUP(ots->delname);
        ts->wtime = ots->wtime;
 
-       if(ts->insbid) {
-               if (is_new)
-                       ots->insbid = temp_copy(ts->insbid, temp);
-               else
-                       ts->insbid = ebat_copy(ts->insbid, 0, temp);
-       }
-
-       if(ts->delbid) {
-                if (is_new)
-                        ots->delbid = temp_copy(ts->delbid, temp);
-                else
-                        ts->delbid = ebat_copy(ts->delbid, 0, temp);
-        }
+       if(ts->insbid && is_new)
+                ots->insbid = temp_copy(ts->insbid, temp);
+
+        if(ts->delbid && is_new)
+                ots->delbid = temp_copy(ts->delbid, temp);
        (void)tr;
 
        return LOG_OK;
@@ -623,13 +617,20 @@ dup_timestamps(sql_trans *tr, sql_table 
        return ok;
 }
 
-static int
+static void
 claim_tab(sql_trans *tr, sql_table *t, int cnt) {
 
-       (void)tr;
-       (void)t;
-
-       return cnt;
+       sql_timestamps *ts;
+
+       if (!t->timestamps || !t->base.allocated) {
+                sql_table *ot = tr_find_table(tr->parent, t);
+                sql_timestamps *ts = t->timestamps = ZNEW(sql_timestamps), 
*ots = timestamp_tsbats(ot->timestamps, tr->stime);
+                dup_tsbats(tr, ots, ts, isNew(ot), isTempTable(t));
+                t->base.allocated = 1;
+        }
+
+       (void)ts;
+       cnt+=1;
 }
 
 static void 
@@ -734,6 +735,7 @@ delete_tab(sql_trans *tr, sql_table * t,
 {
        BAT *b = ib;
        sql_dbat *bat;
+       sql_timestamps *ts;
        node *n;
 
        printf("#in delete_tab\n");
@@ -745,9 +747,19 @@ delete_tab(sql_trans *tr, sql_table * t,
                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;
+               //t->base.allocated = 1;
        }
                bat = t->data;
+
+       if (!t->timestamps || !t->base.allocated) {
+                sql_table *ot = tr_find_table(tr->parent, t);
+                sql_timestamps *ts = t->timestamps = ZNEW(sql_timestamps), 
*ots = timestamp_tsbats(ot->timestamps, tr->stime);
+                dup_tsbats(tr, ots, ts, isNew(ot), isTempTable(t));
+                t->base.allocated = 1;
+        }
+       ts = t->timestamps;
+       (void)ts;
+
        /* delete all cached copies */
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
@@ -845,6 +857,22 @@ count_del(sql_trans *tr, sql_table *t)
        return d->cnt;
 }
 
+static size_t
+count_timestamps(sql_trans *tr, sql_table *t) {
+
+       sql_timestamps *ts;
+
+       if(!t->timestamps) {
+               sql_table *ot = tr_find_table(tr->parent, t);
+               t->timestamps = timestamp_tsbats(ot->data, tr->stime);
+       }
+
+       ts = t->timestamps;
+       if (!ts)
+               return 0;
+       return ts->cnt;
+}
+
 static sql_column *
 find_col( sql_trans *tr, char *sname, char *tname, char *cname )
 {
@@ -1759,6 +1787,8 @@ clear_dbat(sql_trans *tr, sql_dbat *bat)
 {
        BUN sz = 0;
 
+       printf("#in clear_dbat\n");
+
        (void)tr;
        if (bat->dbid) {
                BAT *b = temp_descriptor(bat->dbid);
@@ -2492,6 +2522,7 @@ bat_storage_init( store_functions *sf)
        sf->claim_tab = (claim_tab_fptr)&claim_tab;
 
        sf->count_del = (count_del_fptr)&count_del;
+       sf->count_timestamps = (count_timestamps_fptr)&count_timestamps;
        sf->count_col = (count_col_fptr)&count_col;
        sf->count_idx = (count_idx_fptr)&count_idx;
        sf->sorted_col = (sorted_col_fptr)&sorted_col;
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
@@ -50,7 +50,7 @@ typedef struct sql_timestamps {
        char *insname;
        int insbid;
        int wtime;
-       int cnt;
+       size_t cnt;
        struct sql_timestamps *next;
 } sql_timestamps;
 
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -114,6 +114,7 @@ typedef void (*claim_tab_fptr) (sql_tran
 -- check for sortedness
  */
 typedef size_t (*count_del_fptr) (sql_trans *tr, sql_table *t);
+typedef size_t (*count_timestamps_fptr) (sql_trans *tr, sql_table *t);
 typedef size_t (*count_col_fptr) (sql_trans *tr, sql_column *c, int all /* all 
or new only */);
 typedef size_t (*count_idx_fptr) (sql_trans *tr, sql_idx *i, int all /* all or 
new only */);
 typedef int (*sorted_col_fptr) (sql_trans *tr, sql_column *c);
@@ -193,6 +194,7 @@ typedef struct store_functions {
        claim_tab_fptr claim_tab;
 
        count_del_fptr count_del;
+       count_timestamps_fptr count_timestamps;
        count_col_fptr count_col;
        count_idx_fptr count_idx;
        sorted_col_fptr sorted_col;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to