Changeset: 2ff71b2403dd for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2ff71b2403dd Modified Files: sql/storage/bat/bat_storage.c sql/storage/bat/bat_table.c Branch: default Log Message:
properly cache catalog bats diffs (148 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 @@ -620,6 +620,18 @@ append_col(sql_trans *tr, sql_column *c, delta_append_bat(bat, i); else delta_append_val(bat, i); + if (!c->t->data || !c->t->base.allocated) { + sql_table *ot = tr_find_table(tr->parent, c->t); + sql_dbat *bat = c->t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); + dup_dbat(tr, obat, bat, isNew(ot), isTempTable(c->t)); + c->t->base.allocated = 1; + } + if (c->t && c->t->data && ((sql_dbat*)c->t->data)->cached) { + sql_dbat *bat = c->t->data; + + bat_destroy(bat->cached); + bat->cached = NULL; + } } static void @@ -645,6 +657,18 @@ append_idx(sql_trans *tr, sql_idx * i, v delta_append_bat(bat, ib); else delta_append_val(bat, ib); + if (!i->t->data || !i->t->base.allocated) { + sql_table *ot = tr_find_table(tr->parent, i->t); + sql_dbat *bat = i->t->data = ZNEW(sql_dbat), *obat = timestamp_dbat(ot->data, tr->stime); + dup_dbat(tr, obat, bat, isNew(ot), isTempTable(i->t)); + i->t->base.allocated = 1; + } + if (i->t && i->t->data && ((sql_dbat*)i->t->data)->cached) { + sql_dbat *bat = i->t->data; + + bat_destroy(bat->cached); + bat->cached = NULL; + } } static void @@ -1379,6 +1403,10 @@ clear_delta(sql_trans *tr, sql_delta *ba BAT *b; BUN sz = 0; + if (bat->cached) { + bat_destroy(bat->cached); + bat->cached = NULL; + } if (bat->ibid) { b = temp_descriptor(bat->ibid); sz += BATcount(b); @@ -1523,6 +1551,11 @@ clear_dbat(sql_trans *tr, sql_dbat *bat) BUN sz = 0; (void)tr; + + if (bat->cached) { + bat_destroy(bat->cached); + bat->cached = NULL; + } if (bat->dbid) { BAT *b = temp_descriptor(bat->dbid); @@ -1565,7 +1598,7 @@ gtr_update_delta( sql_trans *tr, sql_del (void)tr; assert(store_nr_active==0); - + cur = temp_descriptor(cbat->bid); ins = temp_descriptor(cbat->ibid); /* any inserts */ @@ -1925,6 +1958,10 @@ update_table(sql_trans *tr, sql_table *f b->next = tt->data; tt->data = b; + if (b->cached) { + bat_destroy(b->cached); + b->cached = NULL; + } while (b && b->wtime >= oldest->stime) b = b->next; if (b && b->wtime < oldest->stime) { @@ -1949,6 +1986,10 @@ update_table(sql_trans *tr, sql_table *f cc->data = NULL; b->next = oc->data; oc->data = b; + if (b->cached) { + bat_destroy(b->cached); + b->cached = NULL; + } while (b && b->wtime >= oldest->stime) b = b->next; if (b && b->wtime < oldest->stime) { @@ -1998,6 +2039,10 @@ update_table(sql_trans *tr, sql_table *f ci->data = NULL; b->next = oi->data; oi->data = b; + if (b->cached) { + bat_destroy(b->cached); + b->cached = NULL; + } while (b && b->wtime >= oldest->stime) b = b->next; if (b && b->wtime < oldest->stime) { 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 @@ -53,10 +53,10 @@ delta_cands(sql_trans *tr, sql_table *t) t->data = timestamp_dbat(ot->data, tr->stime); } d = t->data; - if (d->cached && !tr->parent) + if (d->cached /*&& !tr->parent*/) return temp_descriptor(d->cached->batCacheid); tids = _delta_cands(tr, t); - if (!d->cached && !tr->parent) /* only cache during catalog loading */ + if (!d->cached /*&& !tr->parent*/) /* only cache during catalog loading */ d->cached = temp_descriptor(tids->batCacheid); return tids; } @@ -72,6 +72,7 @@ delta_full_bat_( sql_trans *tr, sql_colu BAT *r, *b, *ui, *uv, *i = temp_descriptor(bat->ibid); int needcopy = 1; +(void)tr; r = i; if (temp) return r; @@ -101,7 +102,7 @@ delta_full_bat_( sql_trans *tr, sql_colu bat_destroy(ui); bat_destroy(uv); (void)c; - if (!bat->cached && !tr->parent) + if (!bat->cached /*&& !tr->parent*/) bat->cached = temp_descriptor(b->batCacheid); return b; } @@ -109,7 +110,7 @@ delta_full_bat_( sql_trans *tr, sql_colu static BAT * delta_full_bat( sql_trans *tr, sql_column *c, sql_delta *bat, int temp) { - if (bat->cached && !tr->parent) + if (bat->cached /*&& !tr->parent*/) return temp_descriptor(bat->cached->batCacheid); return delta_full_bat_( tr, c, bat, temp); } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list