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