Changeset: 9a784a7f358c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9a784a7f358c Modified Files: sql/storage/store.c Branch: nospare Log Message:
handle first alter's diffs (81 lines): diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -233,15 +233,21 @@ base_destroy(sqlstore *store, sql_base * else if (newer && older) newer->older = older; + if (newer) /* nothing to remove */ + return; if (l1) { node *bn = list_find(l1, b, NULL); if (bn) list_remove_node(l1, bn); + if (older) + list_append(l1, older); } if (l2) { node *bn = list_find(l2, b, NULL); if (bn) list_remove_node(l2, bn); + if (older) + list_append(l2, older); } } @@ -284,6 +290,25 @@ tc_gc_key(sqlstore *store, sql_change *c } static int +tc_gc_column(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest) +{ + sql_column *i = (sql_column*)change->obj; + + (void)store; + if (i->base.deleted || !commit_ts) { + if (i->base.ts < oldest || (i->base.ts == commit_ts && commit_ts == oldest) || !commit_ts) { + int ok = LOG_OK; + base_destroy(store, &i->base, commit_ts, i->t->columns.set, NULL); + if (ok == LOG_OK) + return 1; /* handled */ + else + return LOG_ERR; + } + } + return 0; +} + +static int tc_gc_idx(sqlstore *store, sql_change *change, ulng commit_ts, ulng oldest) { sql_idx *i = (sql_idx*)change->obj; @@ -5241,6 +5266,7 @@ sql_column * sql_trans_alter_null(sql_trans *tr, sql_column *col, int isnull) { sqlstore *store = tr->store; + if (col->null != isnull) { sql_schema *syss = find_sql_schema(tr, isGlobal(col->t)?"sys":"tmp"); sql_table *syscolumn = find_sql_table(tr, syss, "_columns"); @@ -5250,7 +5276,20 @@ sql_trans_alter_null(sql_trans *tr, sql_ if (is_oid_nil(rid)) return NULL; store->table_api.column_update_value(tr, find_sql_column(syscolumn, "null"), rid, &isnull); - col->null = isnull; + /* change */ + sql_column *cc = SA_ZNEW(tr->sa, sql_column); + *cc = *col; + cc->base.ts = tr->tid; + cc->base.older = &col->base; + col->base.newer = &cc->base; + trans_add(tr, &cc->base, cc->data, &tc_gc_column, NULL); + node *n = list_find_base_id(col->t->columns.set, col->base.id); + if (n) { + assert(n->data == col); + list_update_data(col->t->columns.set, n, cc); + } + cc->null = isnull; + col = cc; } return col; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list