Changeset: e726045821ef for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e726045821ef Modified Files: sql/storage/bat/bat_storage.c sql/storage/store.c Branch: nospare Log Message:
make sure we use the ibat on new tables diffs (175 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 @@ -213,7 +213,7 @@ bind_col(sql_trans *tr, sql_column *c, i } if (access == RD_UPD_ID || access == RD_UPD_VAL) return bind_ucol(tr, c, access); - return delta_bind_bat( c->data, access, isTempTable(c->t)); + return delta_bind_bat( c->data, access, isTempTable(c->t) || inTransaction(tr, c->t)); } static BAT * @@ -228,7 +228,7 @@ bind_idx(sql_trans *tr, sql_idx * i, int } if (access == RD_UPD_ID || access == RD_UPD_VAL) return bind_uidx(tr, i, access); - return delta_bind_bat( i->data, access, isTempTable(i->t)); + return delta_bind_bat( i->data, access, isTempTable(i->t) || inTransaction(tr, i->t)); } static int diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -161,7 +161,7 @@ column_destroy(sql_column *c) } static void -table_destroy(sqlstore *store, sql_table *t) +table_destroy(sqlstore *store, sql_table *t, ulng commit_ts) { sql_table *older = (sql_table*)t->base.older; sql_table *newer = (sql_table*)t->base.newer; @@ -170,30 +170,42 @@ table_destroy(sqlstore *store, sql_table if (--(t->base.refcnt) > 0) return; - if (older) - table_destroy(store, older); + if (older && commit_ts) { + table_destroy(store, older, commit_ts); + older = NULL; + } t->base.older = NULL; - if (newer) + if (newer && commit_ts) newer->base.older = NULL; + else if (newer && older) + newer->base.older = &older->base; node *tn = list_find(t->s->tables.set, t, NULL); if (tn) list_remove_node(t->s->tables.set, tn); - if (isTable(t) && (!newer || newer->data != t->data)) + if (isTable(t) && + (!newer || newer->data != t->data) && + (!older || older->data != t->data) ) store->storage_api.destroy_del(store, t); - if (t->members && (!newer || newer->members != t->members)) { + if (t->members && + (!newer || (newer->members != t->members)) && + (!older || (older->members != t->members))) { list_destroy(t->members); t->members = NULL; } - if (!newer || newer->keys.set != t->keys.set) + if ((!newer || newer->keys.set != t->keys.set) && + (!older || older->keys.set != t->keys.set)) cs_destroy(&t->keys); - if (!newer || newer->idxs.set != t->idxs.set) + if ((!newer || newer->idxs.set != t->idxs.set) && + (!older || older->idxs.set != t->idxs.set)) cs_destroy(&t->idxs); - if (!newer || newer->triggers.set != t->triggers.set) + if ((!newer || newer->triggers.set != t->triggers.set) && + (!older || older->triggers.set != t->triggers.set)) cs_destroy(&t->triggers); - if (!newer || newer->columns.set != t->columns.set) + if ((!newer || newer->columns.set != t->columns.set) && + (!older || older->columns.set != t->columns.set)) cs_destroy(&t->columns); } @@ -203,10 +215,10 @@ tc_gc_table(sqlstore *store, sql_change sql_table *t = (sql_table*)change->obj; (void)store; - if (t->base.deleted) { - if (t->base.ts < oldest || (t->base.ts == commit_ts && commit_ts == oldest)) { + if (t->base.deleted || !commit_ts) { + if (t->base.ts < oldest || (t->base.ts == commit_ts && commit_ts == oldest) || !commit_ts) { int ok = LOG_OK; - table_destroy(store, t); + table_destroy(store, t, commit_ts); if (ok == LOG_OK) return 1; /* handled */ else @@ -223,7 +235,7 @@ tc_log_table(sql_trans *tr, sql_change * sql_table *t = (sql_table*)change->obj; sqlstore *store = tr->store; - if (isTable(t)) { + if (isTable(t) && !isTempTable(t)) { if (t->base.deleted) { ok = store->storage_api.log_destroy_del(tr, change, commit_ts, oldest); } else { /* new table ? */ @@ -279,7 +291,7 @@ tc_gc_schema(sqlstore *store, sql_change sql_schema *s = (sql_schema*)change->obj; (void)store; - if (s->base.deleted) { + if (s->base.deleted || !commit_ts) { if (s->base.ts < oldest || (s->base.ts == commit_ts && commit_ts == oldest)) { int ok = LOG_OK; schema_destroy(store, s); @@ -2042,6 +2054,7 @@ store_init(sql_allocator *pa, int debug, store->singleuser = singleuser; store->debug = debug; store->transaction = TRANSACTION_ID_BASE; + (void)store_timestamp(store); /* increment once */ MT_lock_init(&store->lock, "sqlstore_lock"); MT_lock_set(&store->lock); @@ -3277,6 +3290,21 @@ sql_trans_copy_column( sql_trans *tr, sq static void sql_trans_rollback(sql_trans *tr) { + sqlstore *store = tr->store; + ulng commit_ts = 0; /* invalid ts, ie rollback */ + ulng oldest = commit_ts; + + if (tr->changes) { + for(node *n=tr->changes->h; n; n = n->next) { + sql_change *c = n->data; + + if (c->cleanup && c->cleanup(store, c, commit_ts, oldest)) + list_remove_node(tr->changes, n); + } + list_destroy(tr->changes); + tr->changes = NULL; + } + /* for (node *n = tr->cat->schemas.set->h; n; ) { node *nxt = n->next; sql_schema *s = n->data; @@ -3295,6 +3323,7 @@ sql_trans_rollback(sql_trans *tr) list_destroy(tr->moved_tables); tr->moved_tables = NULL; } + */ } @@ -4761,8 +4790,7 @@ sql_trans_drop_table(sql_trans *tr, sql_ dt->base.deleted = 1; dt->base.older = &t->base; t->base.newer = &dt->base; - if (!isTempTable(t)) - trans_add(tr, &dt->base, dt->data, &tc_gc_table, &tc_log_table); + trans_add(tr, &dt->base, dt->data, &tc_gc_table, &tc_log_table); list_update_data(s->tables.set, n, dt); //n->data = dt; //cs_del(&s->tables, n, t->base.flags); @@ -5852,8 +5880,8 @@ sql_trans_end(sql_session *s, int commit /* TODO: disabled for now */ if (s->tr->active == 0) { sql_trans_rollback_tmp(s->tr, commit); + } sql_trans_rollback(s->tr); - } } s->tr->active = 0; s->auto_commit = s->ac_on_commit; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list