Changeset: 169662c46d24 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=169662c46d24 Modified Files: sql/backends/monet5/sql.mx sql/storage/bat/bat_storage.c sql/storage/bat/bat_storage.h sql/storage/bat/bat_table.c sql/storage/sql_storage.h sql/storage/store.c Branch: newstorage Log Message:
adapting bat_table.c (bug: ts are still negative) diffs (truncated from 540 to 300 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 @@ -3758,6 +3758,7 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt sql_table *t; sql_column *c; BAT *tids; + //BAT *insb, *delb; size_t nr, inr = 0; oid sb = 0; @@ -3801,8 +3802,10 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt BATsetcount(tids, (BUN) nr); tids->H->revsorted = 0; tids->T->revsorted = 0; + + //insb = store_funcs.bind_ts_insert(tr, t, RD_INS); - if (store_funcs.count_del(tr, t)) { + /*if (store_funcs.count_del(tr, t)) { BAT *d = store_funcs.bind_del(tr, t, RD_INS); BAT *diff = BATkdiff(tids, BATmirror(d)); @@ -3810,7 +3813,9 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt tids = BATmirror(BATmark(diff, sb)); BBPunfix(diff->batCacheid); BBPunfix(d->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 @@ -78,11 +78,63 @@ bind_del(sql_trans *tr, sql_table *t, in return delta_bind_del(t->data, access); } -/* ToDo : bind ts bats */ -/**static BAT * +static BAT * +bind_ts_ins(sql_timestamps *ts, int access) { + + BAT *b; + +#ifdef NDEBUG + (void) access; /* satisfy compiler */ +#endif + + assert(access == RDONLY || access == RD_INS); + assert(access!=RD_UPD); + b = temp_descriptor(ts->insbid); + assert(b); + + return b; +} + +static BAT * bind_ts_insert(sql_trans *tr, sql_table *t, int access) { -}*/ + if (!t->timestamps) { + sql_table *ot = tr_find_table(tr->parent,t); + t->timestamps = timestamp_tsbats(ot->timestamps, tr->stime); + } + t->s->base.rtime = t->base.rtime = tr->stime; + + return bind_ts_ins(t->timestamps, access); +} + +static BAT * +bind_ts_del(sql_timestamps *ts, int access) { + + BAT *b; + +#ifdef NDEBUG + (void) access; /* satisfy compiler */ +#endif + + assert(access == RDONLY || access == RD_INS); + assert(access!=RD_UPD); + b = temp_descriptor(ts->delbid); + assert(b); + + return b; +} + +static BAT * +bind_ts_delete(sql_trans *tr, sql_table *t, int access) { + + if (!t->timestamps) { + sql_table *ot = tr_find_table(tr->parent,t); + t->timestamps = timestamp_tsbats(ot->timestamps, tr->stime); + } + t->s->base.rtime = t->base.rtime = tr->stime; + + return bind_ts_del(t->timestamps, access); +} static BAT * delta_bind_ubat(sql_delta *bat, int access, int type) @@ -924,7 +976,7 @@ timestamps_delete_bat(sql_trans *tr, sql BUN p, q = 0; BATloop(i, p, q) { - BUN slot = *(Tloc(i,p)); + BUN slot = *(BUN*)Tloc(i,p); BUNinplace(delb, slot, delb->H, (ptr)&nts, TRUE); } } @@ -1523,6 +1575,9 @@ create_timestamps(sql_trans *tr, sql_tab return load_timestamps(ts, insbid, delbid); ok = LOG_ERR; } else if (ts->insbid && ts->delbid && !isTempTable(t)) { + //log_bid insbid = logger_find_bat(bat_logger, ts->insname); + //log_bid delbid = logger_find_bat(bat_logger, ts->delname); + //return load_timestamps(ts, insbid, delbid); return ok; } else { if (!ts->insbid) { @@ -2416,43 +2471,37 @@ tr_update_dbat(sql_trans *tr, sql_dbat * } int -tr_update_tsbats(sql_trans *tr, sql_timestamps *tts, sql_timestamps *fts) { - - int ok = LOG_OK; - BAT *insb, *delb = NULL; - BUN p, q; - int curIns, curDel; - - if (!fts) - return ok; - - insb = temp_descriptor(fts->insbid); - delb = temp_descriptor(fts->delbid); - - - fts->insbid = 0; - fts->delbid = 0; +tr_update_tsbats(sql_trans *tr, sql_timestamps *fts, sql_timestamps *tts) { + + int ok = LOG_OK; + BAT *insb = NULL, *delb = NULL; + BUN p, q; + + insb = temp_descriptor(tts->insbid); + delb = temp_descriptor(tts->delbid); + + /* convert timestamps to positive */ + BATloop(insb, p, q) { + int curIns = *(int*)Tloc(insb,p) * (-1); + if (curIns == tr->wtime) + //BUNinplace(insb, p, insb->H, (ptr)&curIns, TRUE); + *(int*)Tloc(insb,p) = curIns; + //curDel = ((int)(*Tloc(delb,p))) * (-1); + //if (curDel == tr->wtime) + // BUNinplace(delb, p, delb->H, (ptr)&curDel, TRUE); + } + tts->cnt = fts->cnt; - /* convert timestamps to positive */ - BATloop(insb, p, q) { - curIns = *Tloc(insb,p) * (-1); - if (curIns == tr->wtime) - BUNinplace(insb, p, insb->H, (ptr)&curIns, TRUE); - curDel = *Tloc(delb,p) * (-1); - if (curDel == tr->wtime) - BUNinplace(delb, p, delb->H, (ptr)&curDel, TRUE); - } - - bat_destroy(insb); - bat_destroy(delb); + bat_destroy(insb); + bat_destroy(delb); if (tts->next) { ok = destroy_tsbats(tr, tts->next); tts->next = NULL; } - return ok; + return ok; } static int @@ -2807,6 +2856,8 @@ bat_storage_init( store_functions *sf) sf->bind_col = (bind_col_fptr)&bind_col; sf->bind_idx = (bind_idx_fptr)&bind_idx; sf->bind_del = (bind_del_fptr)&bind_del; + sf->bind_ts_insert = (bind_ts_insert_fptr)&bind_ts_insert; + sf->bind_ts_delete = (bind_ts_delete_fptr)&bind_ts_delete; sf->append_col = (append_col_fptr)&append_col; sf->append_idx = (append_idx_fptr)&append_idx; 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,7 +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); +extern int tr_update_tsbats(sql_trans *tr, sql_timestamps *fts, sql_timestamps *tts); 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); 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 @@ -23,7 +23,7 @@ #include "bat_storage.h" static BAT * -delta_full_bat_( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s) +delta_full_bat_(sql_trans *tr, sql_column *c, sql_delta *bat, int temp, BAT *ins, BAT *del, BAT *s) { /* return full normalized column bat @@ -37,65 +37,82 @@ delta_full_bat_( sql_column *c, sql_delt b := b.kunion(u); b := b.kdiff(reverse(d)); */ - BAT *r, *b, *u, *i = temp_descriptor(bat->bid); - r = i; + //BAT *r, *b, *u, *i = temp_descriptor(bat->ibid); + BUN p, q; + BAT *res, *u, *b = temp_descriptor(bat->bid); + //r = i; + res=b; if (temp) { if (s) { - r = BATsemijoin(i,s); - bat_destroy(i); + res = BATsemijoin(b,s); + bat_destroy(b); } - return r; + return res; } - b = temp_descriptor(bat->bid); + //b = temp_descriptor(bat->bid); u = temp_descriptor(bat->ubid); if (s) { BAT *t; t = BATsemijoin(b,s); bat_destroy(b); b = t; - t = BATsemijoin(i,s); bat_destroy(i); i = t; + //t = BATsemijoin(i,s); bat_destroy(i); i = t; t = BATsemijoin(u,s); bat_destroy(u); u = t; } - if (!b) { + /*if (!b) { b = i; } else { if (BATcount(i)) { r = BATkunion(b,i); bat_destroy(b); b = r; } bat_destroy(i); - } + }*/ if (BATcount(u)) { - r = BATkdiff(b,u); bat_destroy(b); b = r; + res = BATkdiff(b,u); bat_destroy(b); b = res; assert(b->ttype == u->ttype); - r = BATkunion(b,u); bat_destroy(b); b = r; + res = BATkunion(b,u); bat_destroy(b); b = res; } bat_destroy(u); - if (d && BATcount(d)) { + /*if (d && BATcount(d)) { r = BATkdiff(b,BATmirror(d)); bat_destroy(b); b = r; + }*/ + //res = BATmirror(ins); + BATloopDEL(res, p, q) { + + int ibun = *(int*)Tloc(ins,p); + printf("#in insert ts bat %d\n",ibun); + + if (ibun<0 && ibun!=(tr->wtime)*(-1)) //&& ((const int)*Tloc(del,p) == int_nil)) + p = BUNdelete(res, p, TRUE);//BUNappend(r, (ptr)Tloc(r, p), TRUE); } + + b=res; + bat_destroy(res); + (void)c; + (void)del; //if (!bat->cached && !c->base.wtime && !c->base.allocated && !s) //bat->cached = temp_descriptor(b->batCacheid); return b; } static BAT * -delta_full_bat( sql_column *c, sql_delta *bat, int temp, BAT *d, BAT *s) +delta_full_bat(sql_trans *tr, sql_column *c, sql_delta *bat, int temp, BAT *ins, BAT *del, BAT *s) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list