Changeset: 7445cc92fa41 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7445cc92fa41
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nospare
Log Message:
fixing savepoint - release - rollback issue
diffs (124 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
@@ -2779,26 +2779,11 @@ tc_gc_col( sql_store Store, sql_change *
sql_column *c = (sql_column*)change->obj;
(void)store;
- (void)commit_ts;
- (void)oldest;
-#if 0
- if (/*c->t->base->deleted ||*/ !commit_ts) {
- sql_delta *d = change->data, *o = c->data;
-
- if (o != d) {
- while(o && o->next != d)
- o = o->next;
- }
- if (o == c->data)
- c->data = d->next;
- else
- o->next = d->next;
- d->next = NULL;
- destroy_delta(d);
- }
-#endif
+ /* savepoint commit (did it merge ?) */
if (c->data != change->data || isTempTable(c->t)) /* data is freed by
commit */
return 1;
+ if (commit_ts && commit_ts >= TRANSACTION_ID_BASE) /* cannot cleanup
older stuff on savepoint commits */
+ return 0;
sql_delta *d = (sql_delta*)change->data;
if (d->next) {
if (d->ts > oldest)
@@ -2817,26 +2802,11 @@ tc_gc_idx( sql_store Store, sql_change *
sql_idx *i = (sql_idx*)change->obj;
(void)store;
- (void)commit_ts;
- (void)oldest;
-#if 0
- if (/*i->t->base->deleted ||*/ !commit_ts) {
- sql_delta *d = change->data, *o = i->data;
-
- if (o != d) {
- while(o && o->next != d)
- o = o->next;
- }
- if (o == i->data)
- i->data = d->next;
- else
- o->next = d->next;
- d->next = NULL;
- destroy_delta(d);
- }
-#endif
+ /* savepoint commit (did it merge ?) */
if (i->data != change->data || isTempTable(i->t)) /* data is freed by
commit */
return 1;
+ if (commit_ts && commit_ts >= TRANSACTION_ID_BASE) /* cannot cleanup
older stuff on savepoint commits */
+ return 0;
sql_delta *d = (sql_delta*)change->data;
if (d->next) {
if (d->ts > oldest)
@@ -2855,26 +2825,11 @@ tc_gc_del( sql_store Store, sql_change *
sql_table *t = (sql_table*)change->obj;
(void)store;
- (void)commit_ts;
- (void)oldest;
-#if 0
- if (/*t->base->deleted ||*/ !commit_ts) {
- sql_dbat *d = change->data, *o = t->data;
-
- if (o != d) {
- while(o && o->next != d)
- o = o->next;
- }
- if (o == t->data)
- t->data = d->next;
- else
- o->next = d->next;
- d->next = NULL;
- destroy_dbat(d);
- }
-#endif
+ /* savepoint commit (did it merge ?) */
if (t->data != change->data || isTempTable(t)) /* data is freed by
commit */
return 1;
+ if (commit_ts && commit_ts >= TRANSACTION_ID_BASE) /* cannot cleanup
older stuff on savepoint commits */
+ return 0;
sql_dbat *d = (sql_dbat*)change->data;
if (d->next) {
if (d->ts > oldest)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3320,10 +3320,11 @@ sql_trans_copy_column( sql_trans *tr, sq
if (store->storage_api.create_col(tr, col) != LOG_OK)
return NULL;
if (!isDeclaredTable(t)) {
- store->table_api.table_insert(tr, syscolumn, &col->base.id,
col->base.name, col->type.type->sqlname,
+ if (store->table_api.table_insert(tr, syscolumn, &col->base.id,
col->base.name, col->type.type->sqlname,
&col->type.digits, &col->type.scale, &t->base.id,
(col->def) ?
col->def : ATOMnilptr(TYPE_str), &col->null, &col->colnr,
-
(col->storage_type) ? col->storage_type : ATOMnilptr(TYPE_str));
+
(col->storage_type) ? col->storage_type : ATOMnilptr(TYPE_str)) != LOG_OK)
+ return NULL;
if (c->type.type->s) /* column depends on type */
sql_trans_create_dependency(tr, c->type.type->base.id,
col->base.id, TYPE_DEPENDENCY);
}
@@ -3604,11 +3605,9 @@ sql_trans_commit(sql_trans *tr)
node *next = n->next;
sql_change *c = n->data;
- if (!c->cleanup) {
+ if (!c->cleanup || c->cleanup(store, c, commit_ts,
oldest)) {
_DELETE(c);
- } else if (c->cleanup && c->cleanup(store, c,
commit_ts, oldest)) {
- _DELETE(c);
- } else if (tr->parent) {
+ } else if (tr->parent) { /* need to keep everything */
tr->parent->changes = sa_list_append(tr->sa,
tr->parent->changes, c);
} else {
store->changes = sa_list_append(tr->sa,
store->changes, c);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list