Changeset: 0ac105cce932 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0ac105cce932 Modified Files: sql/backends/monet5/sql_scenario.c sql/storage/sql_storage.h sql/storage/store.c Branch: nospare Log Message:
handling temp's diffs (139 lines): diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -244,6 +244,8 @@ SQLprepareClient(Client c, int login) goto bailout; } } else { + assert(0); +#if 0 be = c->sqlcontext; m = be->mvc; /* Only reset if there is no active transaction which @@ -256,6 +258,7 @@ SQLprepareClient(Client c, int login) goto bailout; } backend_reset(be); +#endif } if (m->session->tr) reset_functions(m->session->tr); diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h --- a/sql/storage/sql_storage.h +++ b/sql/storage/sql_storage.h @@ -448,6 +448,7 @@ extern void sql_trans_drop_obj_priv(sql_ typedef struct sqlstore { int catalog_version; /* software version of the catalog */ sql_catalog *cat; /* the catalog of persistent tables (what to do with tmp tables ?) */ + sql_schema *tmp; /* keep pointer to default (empty) tmp schema */ MT_Lock lock; /* lock protecting concurrent writes (not reads, ie use rcu) */ list *active; /* list of running transactions */ ATOMIC_TYPE nr_active; /* count number of transactions */ diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -2161,6 +2161,7 @@ store_load(sqlstore *store, sql_allocato p = s; /* now the same tables for temporaries */ s = bootstrap_create_schema(tr, "tmp", ROLE_SYSADMIN, USER_MONETDB); + store->tmp = s; } else { s = NULL; } @@ -3476,26 +3477,6 @@ sql_trans_rollback(sql_trans *tr) 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; - - if (s != tr->tmp) - cs_del(&tr->cat->schemas, n, s->base.flags); - else { - n->data = NULL; - list_remove_node(tr->cat->schemas.set, n); - } - n = nxt; - } - list_destroy(tr->cat->schemas.dset); - tr->cat->schemas.dset=NULL; - if (tr->moved_tables) { - list_destroy(tr->moved_tables); - tr->moved_tables = NULL; - } - */ } sql_trans * @@ -3532,7 +3513,8 @@ sql_trans_create_(sqlstore *store, sql_t tr->cat = store->cat; if (!tr->cat) store->cat = tr->cat = SA_ZNEW(tr->sa, sql_catalog); - tr->tmp = find_sql_schema(tr, "tmp"); + //tr->tmp = find_sql_schema(tr, "tmp"); + tr->tmp = store->tmp; tr->parent = parent; TRC_DEBUG(SQL_STORE, "New transaction: %p\n", tr); return tr; @@ -5092,16 +5074,19 @@ sql_trans_drop_table(sql_trans *tr, sql_ if (sys_drop_table(tr, t, drop_action)) return -1; - sql_table *dt = SA_ZNEW(tr->sa, sql_table); - *dt = *t; - dt->base.ts = tr->tid; - dt->base.deleted = 1; - dt->base.older = &t->base; - t->base.newer = &dt->base; - trans_add(tr, &dt->base, dt->data, &tc_gc_table, &tc_log_table); - list_update_data(s->tables.set, n, dt); + if (isTempTable(t)) { + cs_del(&s->tables, n, t->base.flags); + } else { + sql_table *dt = SA_ZNEW(tr->sa, sql_table); + *dt = *t; + dt->base.ts = tr->tid; + dt->base.deleted = 1; + dt->base.older = &t->base; + t->base.newer = &dt->base; + 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); + } /* todo use changes list instead of dropped and moved_tables */ if (drop_action == DROP_CASCADE_START && tr->dropped) { @@ -6134,16 +6119,6 @@ sql_session_reset(sql_session *s, int ac if (!s->tr || !def_schema_name) return 0; - /* - if (s->tr->tmp && s->tr->tmp->tables.set) { - for (node *n = s->tr->tmp->tables.set->h; n; n = n->next) { - sql_table *t = n->data; - - if (isGlobal(t) && isKindOfTable(t)) - sql_trans_clear_table(s->tr, t); - } - } - */ assert(s->tr && s->tr->active == 0); s->schema_name = def_schema_name; @@ -6182,11 +6157,10 @@ sql_trans_end(sql_session *s, int commit TRC_DEBUG(SQL_STORE, "End of transaction: %ld\n", s->tr->tid); if (commit) { ok = sql_trans_commit(s->tr); + if (s->tr->tmp) + s->tr->tmp->tables.nelm = NULL; } else { - /* 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; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list