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