Changeset: 615f80b54992 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/615f80b54992
Branch: transaction_layer_revamp
Log Message:
merge tempscs2os
diffs (truncated from 1597 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
@@ -1120,6 +1120,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
@@ -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/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -931,6 +931,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
@@ -15,7 +15,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);
@@ -494,74 +494,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)) {
- _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)) {
- _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)
{
@@ -570,93 +502,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);
- 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));
}
@@ -671,28 +525,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);
- 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));
}
@@ -787,7 +621,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);
@@ -815,7 +649,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);
}
@@ -964,7 +798,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;
@@ -978,24 +812,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 -- [email protected]
To unsubscribe send an email to [email protected]