Changeset: 412bf96d642c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/412bf96d642c
Modified Files:
        sql/include/sql_catalog.h
        sql/storage/bat/bat_storage.c
        sql/storage/sql_catalog.c
        sql/storage/store.c
Branch: tempscs2os
Log Message:

initial switch from cs to os:
compiles, starts & runs


diffs (truncated from 494 to 300 lines):

diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -324,7 +324,7 @@ typedef struct sql_trans {
 
        sql_catalog *cat;
        sql_schema *tmp;        /* each session has its own tmp schema */
-       changeset localtmps;
+       struct objectset* _localtmps;
        sql_allocator *sa;      /* transaction allocator */
 
        struct sql_trans *parent;       /* multilevel transaction support */
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
@@ -575,16 +575,10 @@ find_tmp_table(sql_trans *tr, sql_table 
 {
        assert(isGlobal(t));
        assert(tr->tmp == t->s);
-       node *n = cs_find_id(&tr->localtmps, t->base.id);
-       sql_table *lt = NULL;
-
-       if (n)
-               lt = (sql_table*)n->data;
+       sql_table *lt = (sql_table*) os_find_id(tr->_localtmps, tr, t->base.id);
+
        if (!lt) {
                lt = globaltmp_instantiate(tr, t);
-               /* TODO prepend to not mark as new */
-               if (lt)
-                       cs_add(&tr->localtmps, lt, true);
        }
        return lt;
 }
@@ -630,8 +624,6 @@ temp_col_timestamp_delta( sql_trans *tr,
 static sql_delta *
 col_timestamp_delta( sql_trans *tr, sql_column *c)
 {
-       if (isTempTable(c->t))
-               return temp_col_timestamp_delta(tr, c);
        return timestamp_delta( tr, ATOMIC_PTR_GET(&c->data));
 }
 
@@ -691,8 +683,6 @@ temp_tab_timestamp_storage( sql_trans *t
 static storage *
 tab_timestamp_storage( sql_trans *tr, sql_table *t)
 {
-       if (isTempTable(t))
-               return temp_tab_timestamp_storage(tr, t);
        return timestamp_storage( tr, ATOMIC_PTR_GET(&t->data));
 }
 
@@ -2066,6 +2056,8 @@ bind_col_data(sql_trans *tr, sql_column 
        if (isTempTable(c->t) && !(obat = temp_col_timestamp_delta(tr, c)))
                return NULL;
 
+       if (isTempTable(c->t)) { assert(obat->cs.ts == tr->tid); return obat; }
+
        if (obat->cs.ts == tr->tid || ((obat->cs.ts < TRANSACTION_ID_BASE || 
tr_version_of_parent(tr, obat->cs.ts)) && !update_conflict)) /* on append there 
are no conflicts */
                return obat;
        if ((!tr->parent || !tr_version_of_parent(tr, obat->cs.ts)) && 
obat->cs.ts >= TRANSACTION_ID_BASE && !isTempTable(c->t)) {
@@ -2728,8 +2720,6 @@ bind_del_data(sql_trans *tr, sql_table *
                if (!(obat = temp_tab_timestamp_storage(tr, t)))
                        return NULL;
 
-               assert(obat->cs.ts == tr->tid);
-
                if (clear && clear_storage(tr, t, obat)  != LOG_OK)
                        return NULL;
 
@@ -3507,11 +3497,12 @@ create_del(sql_trans *tr, sql_table *t)
        }
 
        if (!isNew(t) && !isTempTable(t)) {
+               // TODO: figure out the purpose
                bat->cs.ts = tr->ts;
                return load_storage(tr, t, bat, t->base.id);
-       } else if (bat->cs.bid && !isTempTable(t)) {
+       } else if (bat->cs.bid) {
                return ok;
-       } else if (!bat->cs.bid) {
+       } else {
                assert(!bat->segs);
                if (!(bat->segs = new_segments(tr, 0)))
                        ok = LOG_ERR;
@@ -3616,34 +3607,32 @@ commit_create_del( sql_trans *tr, sql_ch
 
        if (!commit_ts) /* rollback handled by ? */
                return ok;
-       if(!isTempTable(t)) {
-               storage *dbat = ATOMIC_PTR_GET(&t->data);
-               ok = segments2cs(tr, dbat->segs, &dbat->cs);
-               assert(ok == LOG_OK);
-               if (ok != LOG_OK)
-                       return ok;
-               merge_segments(dbat, tr, change, commit_ts, commit_ts/* create 
is we are alone */ /*oldest*/);
-               assert(dbat->cs.ts == tr->tid);
-               dbat->cs.ts = commit_ts;
-               if (ok == LOG_OK) {
-                       for(node *n = ol_first_node(t->columns); n && ok == 
LOG_OK; n = n->next) {
-                               sql_column *c = n->data;
-                               sql_delta *delta = ATOMIC_PTR_GET(&c->data);
-
-                               ok = commit_create_delta(tr, c->t, &c->base, 
delta, commit_ts, oldest);
+       storage *dbat = ATOMIC_PTR_GET(&t->data);
+       ok = segments2cs(tr, dbat->segs, &dbat->cs);
+       assert(ok == LOG_OK);
+       if (ok != LOG_OK)
+               return ok;
+       merge_segments(dbat, tr, change, commit_ts, commit_ts/* create is we 
are alone */ /*oldest*/);
+       assert(dbat->cs.ts == tr->tid);
+       dbat->cs.ts = commit_ts;
+       if (ok == LOG_OK) {
+               for(node *n = ol_first_node(t->columns); n && ok == LOG_OK; n = 
n->next) {
+                       sql_column *c = n->data;
+                       sql_delta *delta = ATOMIC_PTR_GET(&c->data);
+
+                       ok = commit_create_delta(tr, c->t, &c->base, delta, 
commit_ts, oldest);
+               }
+               if (t->idxs) {
+                       for(node *n = ol_first_node(t->idxs); n && ok == 
LOG_OK; n = n->next) {
+                               sql_idx *i = n->data;
+                               sql_delta *delta = ATOMIC_PTR_GET(&i->data);
+
+                               if (delta)
+                                       ok = commit_create_delta(tr, i->t, 
&i->base, delta, commit_ts, oldest);
                        }
-                       if (t->idxs) {
-                               for(node *n = ol_first_node(t->idxs); n && ok 
== LOG_OK; n = n->next) {
-                                       sql_idx *i = n->data;
-                                       sql_delta *delta = 
ATOMIC_PTR_GET(&i->data);
-
-                                       if (delta)
-                                               ok = commit_create_delta(tr, 
i->t, &i->base, delta, commit_ts, oldest);
-                               }
-                       }
-                       if (!tr->parent)
-                               t->base.new = 0;
                }
+               if (!tr->parent)
+                       t->base.new = 0;
        }
        if (!tr->parent)
                t->base.new = 0;
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -18,37 +18,6 @@ base_key( sql_base *b )
        return hash_key(b->name);
 }
 
-static void *
-_list_find_name(list *l, const char *name)
-{
-       node *n;
-
-       if (l) {
-               if (l->ht) {
-                       int key = hash_key(name);
-                       sql_hash_e *he = l->ht->buckets[key&(l->ht->size-1)];
-
-                       for (; he; he = he->chain) {
-                               sql_base *b = he->value;
-
-                               if (b->name && strcmp(b->name, name) == 0) {
-                                       return b;
-                               }
-                       }
-                       return NULL;
-               }
-               for (n = l->h; n; n = n->next) {
-                       sql_base *b = n->data;
-
-                       /* check if names match */
-                       if (name[0] == b->name[0] && strcmp(name, b->name) == 
0) {
-                               return b;
-                       }
-               }
-       }
-       return NULL;
-}
-
 void
 trans_add(sql_trans *tr, sql_base *b, void *data, tc_cleanup_fptr cleanup, 
tc_commit_fptr commit, tc_log_fptr log)
 {
@@ -171,13 +140,11 @@ schema_find_key(sql_trans *tr, sql_schem
 {
        sql_base *b = os_find_name(s->keys, tr, name);
 
-       if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search 
tables */
-               for(node *n = tr->localtmps.set->h; n; n = n->next) {
-                       sql_table *t = n->data;
-                       sql_key *o = find_sql_key(t, name);
-                       if (o)
-                               return o;
-               }
+       if (!b && tr->tmp == s) {
+               sql_table *t = (sql_table*) os_find_name(tr->_localtmps, tr, 
name);
+               sql_key *o = find_sql_key(t, name);
+               if (o)
+                       return o;
        }
        return (sql_key*)b;
 }
@@ -210,13 +177,11 @@ schema_find_idx(sql_trans *tr, sql_schem
 {
        sql_base *b = os_find_name(s->idxs, tr, name);
 
-       if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search 
tables */
-               for(node *n = tr->localtmps.set->h; n; n = n->next) {
-                       sql_table *t = n->data;
-                       sql_idx *o = find_sql_idx(t, name);
-                       if (o)
-                               return o;
-               }
+       if (!b && tr->tmp == s) {
+       sql_table *t = (sql_table*) os_find_name(tr->_localtmps, tr, name);
+               sql_idx *o = find_sql_idx(t, name);
+               if (o)
+                       return o;
        }
        return (sql_idx*)b;
 }
@@ -226,9 +191,11 @@ schema_find_idx_id(sql_trans *tr, sql_sc
 {
        sql_base *b = os_find_id(s->idxs, tr, id);
 
-       if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search 
tables */
-               for(node *n = tr->localtmps.set->h; n; n = n->next) {
-                       sql_table *t = n->data;
+       if (!b && tr->tmp == s) {
+               struct os_iter oi;
+               os_iterator(&oi, tr->_localtmps, tr, NULL);
+               for(sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) { // TODO: 
maybe an objectset for idxs or have idxs in global idxs os
+                       sql_table *t = (sql_table *) b;
                        node *o = ol_find_id(t->idxs, id);
                        if (o)
                                return (sql_idx*)o->data;
@@ -251,8 +218,23 @@ sql_table *
 find_sql_table(sql_trans *tr, sql_schema *s, const char *tname)
 {
        sql_table *t = (sql_table*)os_find_name(s->tables, tr, tname);
-       if (!t && tr->tmp == s)
-               t = (sql_table*)_list_find_name(tr->localtmps.set, tname);
+
+       if (!t && tr->tmp == s) {
+               t = (sql_table*) os_find_name(tr->_localtmps, tr, tname);
+               return t;
+       }
+
+       if (t && isTempTable(t) && tr->tmp == s) {
+               assert(isGlobal(t));
+
+               sql_table* lt = (sql_table*) os_find_name(tr->_localtmps, tr, 
tname);
+               if (lt)
+                       return lt;
+
+               t = globaltmp_instantiate(tr, t);
+               return t;
+       }
+
        return t;
 }
 
@@ -261,9 +243,18 @@ find_sql_table_id(sql_trans *tr, sql_sch
 {
        sql_table *t = (sql_table*)os_find_id(s->tables, tr, id);
        if (!t && tr->tmp == s) {
-               node *n = cs_find_id(&tr->localtmps, id);
-               if (n)
-                       return (sql_table*)n->data;
+               t = (sql_table*) os_find_id(tr->_localtmps, tr, id);
+       }
+
+       if (t && isTempTable(t) && tr->tmp == s) {
+               assert(isGlobal(t));
+
+               sql_table* lt = (sql_table*) os_find_id(tr->_localtmps, tr, id);
+               if (lt)
+                       return lt;
+
+               t = globaltmp_instantiate(tr, t);
+               return t;
        }
        return t;
 }
@@ -388,13 +379,11 @@ schema_find_trigger(sql_trans *tr, sql_s
 {
        sql_base *b = os_find_name(s->triggers, tr, name);
 
-       if (!b && tr->tmp == s && tr->localtmps.set) { /* for localtmps search 
tables */
-               for(node *n = tr->localtmps.set->h; n; n = n->next) {
-                       sql_table *t = n->data;
-                       sql_trigger *o = find_sql_trigger(t, name);
-                       if (o)
-                               return o;
-               }
+       if (!b && tr->tmp == s) {
+               sql_table *t = (sql_table*) os_find_name(tr->_localtmps, tr, 
name);
+               sql_trigger *o = find_sql_trigger(t, name);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to