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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list