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