Changeset: 10ff376cd9e8 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=10ff376cd9e8
Modified Files:
sql/storage/bat/bat_storage.c
Branch: Jun2016
Log Message:
backout changeset 59110:14dab2234b18, we need an extra flag marking
what has been writen (wtime is already used for the reset of the other
existing transactions).
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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list