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