Changeset: 7ddf7e58f8df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7ddf7e58f8df
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: tempscs2os
Log Message:
new_table should dup gtt's as gtt's
diffs (132 lines):
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
@@ -3405,10 +3405,17 @@ commit_create_del( sql_trans *tr, sql_ch
{
int ok = LOG_OK;
sql_table *t = (sql_table*)change->obj;
+ storage *dbat = ATOMIC_PTR_GET(&t->data);
+
+ if (t->commit_action == CA_DELETE || t->commit_action == CA_DROP) {
+ assert(isTempTable(t));
+ if ((ok = clear_storage(tr, t, dbat)) == LOG_OK)
+ if (commit_ts) dbat->segs->h->ts = commit_ts;
+ return ok;
+ }
if (!commit_ts) /* rollback handled by ? */
return ok;
- storage *dbat = ATOMIC_PTR_GET(&t->data);
ok = segments2cs(tr, dbat->segs, &dbat->cs);
assert(ok == LOG_OK);
if (ok != LOG_OK)
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3044,7 +3044,7 @@ trigger_dup(sql_trans *tr, sql_trigger *
}
static int
-table_dup(sql_trans *tr, sql_table *ot, sql_schema *s, const char *name,
sql_table **tres)
+table_dup(sql_trans *tr, sql_table *ot, sql_schema *s, const char *name,
sql_table **tres, bool dup_global_as_global)
{
sqlstore *store = tr->store;
sql_allocator *sa = tr->sa;
@@ -3056,7 +3056,7 @@ table_dup(sql_trans *tr, sql_table *ot,
t->type = ot->type;
t->system = ot->system;
t->bootstrap = ot->bootstrap;
- t->persistence = s?ot->persistence:SQL_LOCAL_TEMP;
+ t->persistence = (s ||
dup_global_as_global)?ot->persistence:SQL_LOCAL_TEMP;
t->commit_action = ot->commit_action;
t->access = ot->access;
t->query = (ot->query) ? SA_STRDUP(sa, ot->query) : NULL;
@@ -3149,7 +3149,7 @@ globaltmp_instantiate(sql_trans *tr, sql
{
assert(isGlobal(ot)&& isTempTable(ot));
sql_table *t = NULL;
- if (table_dup(tr, ot, NULL, NULL, &t) == LOG_OK)
+ if (table_dup(tr, ot, NULL, NULL, &t, false) == LOG_OK)
return t;
return NULL;
}
@@ -3158,9 +3158,11 @@ static int
new_table(sql_trans *tr, sql_table *t, sql_table **tres)
{
int res = LOG_OK;
- t = find_sql_table(tr, t->s, t->base.name); /* could have changed by
depending changes */
+ if (!isGlobalTemp(t))
+ t = find_sql_table(tr, t->s, t->base.name); /* could have
changed by depending changes */
+
if (!isLocalTemp(t) && !isNew(t) && !os_obj_intransaction(t->s->tables,
tr, &t->base))
- res = table_dup(tr, t, t->s, NULL, tres);
+ res = table_dup(tr, t, t->s, NULL, tres, true);
else
*tres = t;
return res;
@@ -3273,7 +3275,11 @@ sql_trans_copy_key( sql_trans *tr, sql_t
int neg = -1, action = -1, nr, res = LOG_OK;
node *n;
sql_key *nk;
-
+ sql_table *dup = NULL;
+
+ if ((res = new_table(tr, t, &dup)))
+ return res;
+ t = dup;
if ((res = key_dup(tr, k, t, &nk)))
return res;
sql_fkey *fk = (sql_fkey*)nk;
@@ -3347,7 +3353,11 @@ sql_trans_copy_idx( sql_trans *tr, sql_t
sql_table *sysic = find_sql_table(tr, syss, "objects");
node *n;
int nr, res = LOG_OK, ncols = list_length(i->columns);
-
+ sql_table *dup = NULL;
+
+ if ((res = new_table(tr, t, &dup)))
+ return res;
+ t = dup;
sql_idx *ni = SA_ZNEW(tr->sa, sql_idx);
base_init(tr->sa, &ni->base, i->base.id?i->base.id:next_oid(tr->store),
true, i->base.name);
ni->columns = list_new(tr->sa, (fdestroy) &kc_destroy);
@@ -3469,7 +3479,12 @@ sql_trans_copy_column( sql_trans *tr, sq
sqlstore *store = tr->store;
sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp");
sql_table *syscolumn = find_sql_table(tr, syss, "_columns");
+ sql_table *dup = NULL;
int res = LOG_OK;
+
+ if ((res = new_table(tr, t, &dup)))
+ return res;
+ t = dup;
sql_column *col = SA_ZNEW(tr->sa, sql_column);
base_init(tr->sa, &col->base,
c->base.id?c->base.id:next_oid(tr->store), true, c->base.name);
dup_sql_type(tr, t->s, &(c->type), &(col->type));
@@ -3728,7 +3743,7 @@ schema_dup(sql_trans *tr, sql_schema *s,
for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
sql_table *t = NULL;
- if ((res = table_dup(tr, (sql_table*)b, s, NULL, &t)) || (res =
os_add(ns->tables, tr, t->base.name, &t->base))) {
+ if ((res = table_dup(tr, (sql_table*)b, s, NULL, &t, true)) ||
(res = os_add(ns->tables, tr, t->base.name, &t->base))) {
schema_destroy(tr->store, ns);
return res;
}
@@ -5543,7 +5558,7 @@ sql_trans_rename_table(sql_trans *tr, sq
return res;
}
- if ((res = table_dup(tr, t, t->s, new_name, &dup)))
+ if ((res = table_dup(tr, t, t->s, new_name, &dup, true)))
return res;
return res;
}
@@ -5567,7 +5582,7 @@ sql_trans_set_table_schema(sql_trans *tr
return res;
if ((res = os_del(os->tables, tr, t->base.name, dup_base(&t->base))))
return res;
- return table_dup(tr, t, ns, NULL, &dup);
+ return table_dup(tr, t, ns, NULL, &dup, true);
}
int
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]