Changeset: 1e57ba49685b for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1e57ba49685b Modified Files: sql/storage/bat/bat_storage.c Branch: Jun2016 Log Message:
merged diffs (150 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 @@ -1664,7 +1664,7 @@ BATcleanProps( BAT *b ) } static int -gtr_update_delta( sql_trans *tr, sql_delta *cbat) +gtr_update_delta( sql_trans *tr, sql_delta *cbat, int *changes) { int ok = LOG_OK; BAT *ins, *cur; @@ -1676,6 +1676,7 @@ gtr_update_delta( sql_trans *tr, sql_del ins = temp_descriptor(cbat->ibid); /* any inserts */ if (BUNlast(ins) > BUNfirst(ins)) { + (*changes)++; assert(cur->T->heap.storage != STORE_PRIV); BATappend(cur,ins,TRUE); cbat->cnt = cbat->ibase = BATcount(cur); @@ -1690,6 +1691,7 @@ gtr_update_delta( sql_trans *tr, sql_del BAT *uv = temp_descriptor(cbat->uvbid); /* any updates */ if (BUNlast(ui) > BUNfirst(ui)) { + (*changes)++; void_replace_bat(cur, ui, uv, TRUE); temp_destroy(cbat->uibid); temp_destroy(cbat->uvbid); @@ -1709,7 +1711,7 @@ gtr_update_delta( sql_trans *tr, sql_del } static int -gtr_update_dbat(sql_dbat *d) +gtr_update_dbat(sql_dbat *d, int *changes) { int ok = LOG_OK; BAT *idb; @@ -1722,6 +1724,7 @@ gtr_update_dbat(sql_dbat *d) if (BUNlast(idb) > idb->batInserted) { BAT *cdb = temp_descriptor(dbid); + (*changes)++; append_inserted(cdb, idb); bat_destroy(cdb); } @@ -1731,63 +1734,73 @@ gtr_update_dbat(sql_dbat *d) static int -gtr_update_table(sql_trans *tr, sql_table *t) +gtr_update_table(sql_trans *tr, sql_table *t, int *tchanges) { int ok = LOG_OK; node *n; - if (!t->base.wtime) - return ok; - gtr_update_dbat(t->data); + gtr_update_dbat(t->data, tchanges); for (n = t->columns.set->h; ok == LOG_OK && n; n = n->next) { + int changes = 0; sql_column *c = n->data; if (!c->base.wtime) continue; - ok = gtr_update_delta(tr, c->data); - c->base.wtime = 0; + ok = gtr_update_delta(tr, c->data, &changes); + if (changes) + c->base.wtime = tr->wstime; + (*tchanges) |= changes; } if (ok == LOG_OK && t->idxs.set) { for (n = t->idxs.set->h; ok == LOG_OK && n; n = n->next) { + int changes = 0; sql_idx *ci = n->data; /* some indices have no bats */ if (!ci->base.wtime) continue; - ok = gtr_update_delta(tr, ci->data); - ci->base.wtime = 0; + ok = gtr_update_delta(tr, ci->data, &changes); + if (changes) + ci->base.wtime = tr->wstime; + (*tchanges) |= changes; } } - t->base.wtime = 0; + if (*tchanges) + t->base.wtime = tr->wstime; return ok; } -typedef int (*gtr_update_table_fptr)( sql_trans *tr, sql_table *t); +typedef int (*gtr_update_table_fptr)( sql_trans *tr, sql_table *t, int *changes); static int _gtr_update( sql_trans *tr, gtr_update_table_fptr gtr_update_table_f) { - int ok = LOG_OK; + int ok = LOG_OK, tchanges = 0; node *sn; for(sn = tr->schemas.set->h; sn && ok == LOG_OK; sn = sn->next) { + int schanges = 0; sql_schema *s = sn->data; - if (!isTempSchema(s) && s->tables.set && s->base.wtime) { + if (!isTempSchema(s) && s->tables.set) { node *n; for (n = s->tables.set->h; n && ok == LOG_OK; n = n->next) { + int changes = 0; sql_table *t = n->data; if (isTable(t) && isGlobal(t)) - ok = gtr_update_table_f(tr, t); + ok = gtr_update_table_f(tr, t, &changes); + schanges |= changes; } } - if (gtr_update_table_f == gtr_update_table) - s->base.wtime = 0; + if (schanges){ + s->base.wtime = tr->wstime; + tchanges ++; + } } - if (gtr_update_table_f == gtr_update_table) - tr->wtime = 0; + if (tchanges) + tr->wtime = tr->wstime; return LOG_OK; } @@ -1825,11 +1838,12 @@ gtr_minmax_col( sql_trans *tr, sql_colum } static int -gtr_minmax_table(sql_trans *tr, sql_table *t) +gtr_minmax_table(sql_trans *tr, sql_table *t, int *changes) { int ok = LOG_OK; node *n; + (void)changes; if (t->access > TABLE_WRITABLE) { for (n = t->columns.set->h; ok == LOG_OK && n; n = n->next) { sql_column *c = n->data; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list