Changeset: c1ecc43f1925 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c1ecc43f1925
Modified Files:
sql/storage/store.c
Branch: Nov2019
Log Message:
fixed bug in handling schema_changes, ie now we always reset schema's fully on
schema_changes.
diffs (126 lines):
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3205,8 +3205,6 @@ static void
tr->schema_updates = 0;
tr->dropped = NULL;
tr->status = 0;
- if (otr != gtrans)
- tr->schema_updates = otr->schema_updates;
tr->schema_number = store_schema_number();
tr->parent = otr;
@@ -3959,7 +3957,7 @@ rollforward_trans(sql_trans *tr, int mod
if (mode == R_APPLY && tr->parent && tr->wtime > tr->parent->wtime) {
tr->parent->wtime = tr->wtime;
- tr->parent->schema_updates = tr->schema_updates;
+ tr->parent->schema_updates += tr->schema_updates;
}
if (tr->moved_tables) {
@@ -4121,8 +4119,9 @@ reset_changeset(sql_trans *tr, changeset
static int
reset_idx(sql_trans *tr, sql_idx *fi, sql_idx *pfi)
{
+ (void)tr;
/* did we access the idx or is the global changed after we started */
- if (fi->base.rtime || fi->base.wtime || tr->stime < pfi->base.wtime) {
+ if (fi->base.rtime || fi->base.wtime || fi->base.stime <
pfi->base.wtime) {
if (isTable(fi->t))
store_funcs.destroy_idx(NULL, fi);
}
@@ -4133,7 +4132,7 @@ static int
reset_column(sql_trans *tr, sql_column *fc, sql_column *pfc)
{
/* did we access the column or is the global changed after we started */
- if (fc->base.rtime || fc->base.wtime || tr->stime < pfc->base.wtime) {
+ if (fc->base.rtime || fc->base.wtime || fc->base.stime <
pfc->base.wtime) {
if (isTable(fc->t))
store_funcs.destroy_col(NULL, fc);
@@ -4177,7 +4176,7 @@ reset_seq(sql_trans *tr, sql_sequence *f
static int
reset_part(sql_trans *tr, sql_part *ft, sql_part *pft)
{
- if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) {
+ if (ft->base.rtime || ft->base.wtime || ft->base.stime <
pft->base.wtime) {
if (pft->t) {
sql_table *mt = pft->t;
@@ -4215,7 +4214,7 @@ reset_table(sql_trans *tr, sql_table *ft
return LOG_OK;
/* did we access the table or did the global change */
- if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) {
+ if (ft->base.rtime || ft->base.wtime || ft->base.stime <
pft->base.wtime) {
int ok = LOG_OK;
if (isTable(ft) && !isTempTable(ft))
@@ -4290,26 +4289,22 @@ reset_schema(sql_trans *tr, sql_schema *
return ok;
}
- /* did we access the schema or is the global changed after we started */
- if (fs->base.rtime || fs->base.wtime || tr->stime < pfs->base.wtime) {
-
- /* apply possible renaming -> transaction rollbacks or when it
starts, inherit from the previous transaction */
- if ((tr->status == 1 && isRenamed(fs)) || isRenamed(pfs)) {
- list_hash_delete(tr->schemas.set, fs, NULL);
- fs->base.name = sa_strdup(tr->parent->sa,
pfs->base.name);
- if (!list_hash_add(tr->schemas.set, fs, NULL))
- ok = LOG_ERR;
- }
-
- if (ok == LOG_OK)
- ok = reset_changeset(tr, &fs->types, &pfs->types,
&fs->base, (resetf) NULL, (dupfunc) &type_dup);
- if (ok == LOG_OK)
- ok = reset_changeset(tr, &fs->funcs, &pfs->funcs,
&fs->base, (resetf) NULL, (dupfunc) &func_dup);
- if (ok == LOG_OK)
- ok = reset_changeset(tr, &fs->seqs, &pfs->seqs,
&fs->base, (resetf) &reset_seq, (dupfunc) &seq_dup);
- if (ok == LOG_OK)
- ok = reset_changeset(tr, &fs->tables, &pfs->tables,
&fs->base, (resetf) &reset_table, (dupfunc) &table_dup);
- }
+ /* apply possible renaming -> transaction rollbacks or when it starts,
inherit from the previous transaction */
+ if ((tr->status == 1 && isRenamed(fs)) || isRenamed(pfs)) {
+ list_hash_delete(tr->schemas.set, fs, NULL);
+ fs->base.name = sa_strdup(tr->parent->sa, pfs->base.name);
+ if (!list_hash_add(tr->schemas.set, fs, NULL))
+ ok = LOG_ERR;
+ }
+
+ if (ok == LOG_OK)
+ ok = reset_changeset(tr, &fs->types, &pfs->types, &fs->base,
(resetf) NULL, (dupfunc) &type_dup);
+ if (ok == LOG_OK)
+ ok = reset_changeset(tr, &fs->funcs, &pfs->funcs, &fs->base,
(resetf) NULL, (dupfunc) &func_dup);
+ if (ok == LOG_OK)
+ ok = reset_changeset(tr, &fs->seqs, &pfs->seqs, &fs->base,
(resetf) &reset_seq, (dupfunc) &seq_dup);
+ if (ok == LOG_OK)
+ ok = reset_changeset(tr, &fs->tables, &pfs->tables, &fs->base,
(resetf) &reset_table, (dupfunc) &table_dup);
return ok;
}
@@ -4464,7 +4459,6 @@ sql_trans_commit(sql_trans *tr)
prev_oid = store_oid;
if (ok == LOG_OK)
ok = logger_funcs.log_tend();
- tr->schema_number = store_schema_number();
}
if (ok == LOG_OK) {
/* It is save to rollforward the changes now. In case
@@ -5304,6 +5298,7 @@ sql_trans_add_table(sql_trans *tr, sql_t
cs_add(&mt->members, p, TR_NEW);
mt->s->base.wtime = mt->base.wtime = pt->s->base.wtime = pt->base.wtime
= p->base.wtime = tr->wtime = tr->wstime;
table_funcs.table_insert(tr, sysobj, &mt->base.id, p->base.name,
&p->base.id);
+ tr->schema_updates ++;
return mt;
}
@@ -5611,6 +5606,7 @@ sql_trans_del_table(sql_trans *tr, sql_t
if (drop_action == DROP_CASCADE)
sql_trans_drop_table(tr, mt->s, pt->base.id, drop_action);
+ tr->schema_updates ++;
return mt;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list