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

Reply via email to