Changeset: e5de827de0bc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e5de827de0bc
Branch: default
Log Message:

merge with transaction_layer_revamp


diffs (truncated from 1626 to 300 lines):

diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -1121,6 +1121,13 @@ alter_table(Client cntxt, mvc *sql, char
        if (!(nt = mvc_bind_table(sql, s, t->base.name)))
                throw(SQL,"sql.alter_table", SQLSTATE(42S02) "ALTER TABLE: no 
such table '%s'", t->base.name);
 
+       sql_table *gt = NULL;
+       if (nt && isTempTable(nt)) {
+               gt = (sql_table*)os_find_id(s->tables, sql->session->tr, 
nt->base.id);
+               if (gt)
+                       nt = gt;
+       }
+
        /* First check if all the changes are allowed */
        if (t->idxs) {
                /* only one pkey */
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
@@ -326,7 +326,7 @@ typedef struct sql_trans {
 
        sql_catalog *cat;
        sql_schema *tmp;        /* each session has its own tmp schema */
-       changeset localtmps;
+       struct objectset* localtmps;
 
        struct sql_trans *parent;       /* multilevel transaction support */
 } sql_trans;
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -933,6 +933,7 @@ mvc_bind_table(mvc *m, sql_schema *s, co
        (void) m;
        if (!t)
                return NULL;
+
        TRC_DEBUG(SQL_TRANS, "Bind table: %s.%s\n", s->base.name, tname);
        return t;
 }
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
@@ -17,7 +17,7 @@
 #include "matomic.h"
 
 #define FATAL_MERGE_FAILURE "Out Of Memory during critical merge operation: %s"
-#define inTransaction(tr,t) (isLocalTemp(t))
+#define NOT_TO_BE_LOGGED(t) (isUnloggedTable(t) || isTempTable(t))
 
 static int log_update_col( sql_trans *tr, sql_change *c);
 static int log_update_idx( sql_trans *tr, sql_change *c);
@@ -497,74 +497,6 @@ new_segments(sql_trans *tr, size_t cnt)
        return n;
 }
 
-static int
-temp_dup_cs(column_storage *cs, ulng tid, int type)
-{
-       BAT *b = bat_new(type, 1024, SYSTRANS);
-       if (!b)
-               return LOG_ERR;
-       bat_set_access(b, BAT_READ);
-       cs->bid = temp_create(b);
-       bat_destroy(b);
-       cs->uibid = e_bat(TYPE_oid);
-       cs->uvbid = e_bat(type);
-       if (cs->uibid == BID_NIL || cs->uvbid == BID_NIL)
-               return LOG_ERR;
-       cs->ucnt = 0;
-       cs->cleared = 0;
-       cs->ts = tid;
-       cs->refcnt = 1;
-       return LOG_OK;
-}
-
-static sql_delta *
-temp_dup_delta(ulng tid, int type)
-{
-       sql_delta *bat = ZNEW(sql_delta);
-
-       if (!bat)
-               return NULL;
-       if (temp_dup_cs(&bat->cs, tid, type) != LOG_OK) {
-               _DELETE(bat);
-               return NULL;
-       }
-       return bat;
-}
-
-static sql_delta *
-temp_delta(sql_delta *d, ulng tid)
-{
-       while (d && d->cs.ts != tid)
-               d = d->next;
-       return d;
-}
-
-static storage *
-temp_dup_storage(sql_trans *tr)
-{
-       storage *bat = ZNEW(storage);
-
-       if (!bat)
-               return NULL;
-       if (temp_dup_cs(&bat->cs, tr->tid, TYPE_msk) != LOG_OK) {
-               _DELETE(bat);
-               return NULL;
-       }
-       if (!(bat->segs = new_segments(tr, 0))) {
-               _DELETE(bat);
-               return NULL;
-       }
-       return bat;
-}
-
-static storage *
-temp_storage(storage *d, ulng tid)
-{
-       while (d && d->cs.ts != tid)
-               d = d->next;
-       return d;
-}
-
 static sql_delta *
 timestamp_delta( sql_trans *tr, sql_delta *d)
 {
@@ -573,93 +505,15 @@ timestamp_delta( sql_trans *tr, sql_delt
        return d;
 }
 
-static sql_table *
-find_tmp_table(sql_trans *tr, sql_table *t)
-{
-       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;
-       if (!lt) {
-               lt = globaltmp_instantiate(tr, t);
-               /* TODO prepend to not mark as new */
-               if (lt)
-                       cs_add(&tr->localtmps, lt, true);
-       }
-       return lt;
-}
-
-static sql_column *
-find_tmp_column(sql_trans *tr, sql_column *c)
-{
-       assert(isGlobal(c->t));
-       sql_table *lt = find_tmp_table(tr, c->t);
-       if (lt)
-               return find_sql_column(lt, c->base.name);
-       return NULL;
-}
-
-static sql_idx *
-find_tmp_idx(sql_trans *tr, sql_idx *i)
-{
-       assert(isGlobal(i->t));
-       sql_table *lt = find_tmp_table(tr, i->t);
-       if (lt)
-               return find_sql_idx(lt, i->base.name);
-       return NULL;
-}
-
-static sql_delta *
-temp_col_timestamp_delta( sql_trans *tr, sql_column *c)
-{
-       if (isGlobal(c->t) && (c = find_tmp_column(tr, c)) == NULL)
-               return NULL;
-       assert (!isGlobal(c->t));
-       assert(isTempTable(c->t));
-       sql_delta *d = temp_delta(ATOMIC_PTR_GET(&c->data), tr->tid);
-       if (!d) {
-               if (!(d = temp_dup_delta(tr->tid, c->type.type->localtype)))
-                       return NULL;
-               do {
-                       d->next = ATOMIC_PTR_GET(&c->data);
-               } while(!ATOMIC_PTR_CAS(&c->data, (void**)&d->next, d)); /* set 
c->data = d, when c->data == d->next else d->next = c->data */
-       }
-       return d;
-}
-
 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));
 }
 
 static sql_delta *
-temp_idx_timestamp_delta( sql_trans *tr, sql_idx *i)
-{
-       assert(isTempTable(i->t));
-       sql_delta *d = temp_delta(ATOMIC_PTR_GET(&i->data), tr->tid);
-       if (!d) {
-               int type = oid_index(i->type)?TYPE_oid:TYPE_lng;
-
-               if (!(d = temp_dup_delta(tr->tid, type)))
-                       return NULL;
-               do {
-                       d->next = ATOMIC_PTR_GET(&i->data);
-               } while(!ATOMIC_PTR_CAS(&i->data, (void**)&d->next, d)); /* set 
i->data = d, when i->data == d->next else d->next = i->data */
-       }
-       return d;
-}
-
-static sql_delta *
 idx_timestamp_delta( sql_trans *tr, sql_idx *i)
 {
-       if (isTempTable(i->t))
-               return temp_idx_timestamp_delta(tr, i);
        return timestamp_delta( tr, ATOMIC_PTR_GET(&i->data));
 }
 
@@ -674,28 +528,8 @@ timestamp_storage( sql_trans *tr, storag
 }
 
 static storage *
-temp_tab_timestamp_storage( sql_trans *tr, sql_table *t)
-{
-       if (isGlobal(t) && (t = find_tmp_table(tr, t)) == NULL)
-               return NULL;
-       assert(!isGlobal(t));
-       assert(isTempTable(t));
-       storage *d = temp_storage(ATOMIC_PTR_GET(&t->data), tr->tid);
-       if (!d) {
-               if (!(d = temp_dup_storage(tr)))
-                       return NULL;
-               do {
-                       d->next = ATOMIC_PTR_GET(&t->data);
-               } while(!ATOMIC_PTR_CAS(&t->data, (void**)&d->next, d)); /* set 
t->data = d, when t->data == d->next else d->next = t->data */
-       }
-       return d;
-}
-
-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));
 }
 
@@ -790,7 +624,7 @@ count_col(sql_trans *tr, sql_column *c, 
                return ds?ds->cs.ucnt:0;
        if (access == 1)
                return count_inserts(d->segs->h, tr);
-       if (access == QUICK || isTempTable(c->t))
+       if (access == QUICK)
                return d->segs->t?d->segs->t->end:0;
        if (access == CNT_ACTIVE) {
                size_t cnt = segs_end(d->segs, tr, c->t);
@@ -818,7 +652,7 @@ count_idx(sql_trans *tr, sql_idx *i, int
                return ds?ds->cs.ucnt:0;
        if (access == 1)
                return count_inserts(d->segs->h, tr);
-       if (access == QUICK || isTempTable(i->t))
+       if (access == QUICK)
                return d->segs->t?d->segs->t->end:0;
        return segs_end(d->segs, tr, i->t);
 }
@@ -967,7 +801,7 @@ older_delta( sql_delta *d, sql_trans *tr
 }
 
 static BAT *
-bind_ubat(sql_trans *tr, sql_delta *d, bool temp, int access, int type, size_t 
cnt)
+bind_ubat(sql_trans *tr, sql_delta *d, int access, int type, size_t cnt)
 {
        assert(tr->active);
        sql_delta *o = NULL;
@@ -981,24 +815,22 @@ bind_ubat(sql_trans *tr, sql_delta *d, b
                        return NULL;
                }
        }
-       if (!temp) {
-               while ((o = older_delta(d, tr)) != NULL) {
-                       BAT *oui = NULL, *ouv = NULL;
-                       if (!oui)
-                               oui = cs_bind_ubat(&o->cs, RD_UPD_ID, type, 
cnt);
-                       if (access == RD_UPD_VAL)
-                               ouv = cs_bind_ubat(&o->cs, RD_UPD_VAL, type, 
cnt);
-                       if (!ui || !oui || (access == RD_UPD_VAL && (!uv || 
!ouv))) {
-                               bat_destroy(ui);
-                               bat_destroy(uv);
-                               bat_destroy(oui);
-                               bat_destroy(ouv);
-                               return NULL;
-                       }
-                       if ((ui = merge_updates(ui, &uv, oui, ouv)) == NULL)
-                               return NULL;
-                       d = o;
+       while ((o = older_delta(d, tr)) != NULL) {
+               BAT *oui = NULL, *ouv = NULL;
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to