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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list