Changeset: 13bc30886798 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=13bc30886798
Added Files:
        sql/test/rename/Tests/rename12.stable.err
        sql/test/rename/Tests/rename12.stable.out
Modified Files:
        sql/server/sql_mvc.c
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: linear-hashing
Log Message:

Fixed rename12 test by passing the right transaction at update_table. Also 
added missing functions for SQL objects propagation between transactions


diffs (truncated from 565 to 300 lines):

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
@@ -1109,7 +1109,7 @@ mvc_bind_trigger(mvc *m, sql_schema *s, 
 }
 
 sql_type *
-mvc_create_type(mvc *sql, sql_schema * s, const char *name, int digits, int 
scale, int radix, const char *impl)
+mvc_create_type(mvc *sql, sql_schema *s, const char *name, int digits, int 
scale, int radix, const char *impl)
 {
        sql_type *t = NULL;
 
@@ -1441,7 +1441,7 @@ mvc_create_column(mvc *m, sql_table *t, 
                fprintf(stderr, "#mvc_create_column %s %s %s\n", t->base.name, 
name, tpe->type->sqlname);
        if (t->persistence == SQL_DECLARED_TABLE && (!t->s || 
strcmp(t->s->base.name, dt_schema))) 
                /* declared tables should not end up in the catalog */
-               return create_sql_column(m->sa, t, name, tpe);
+               return create_sql_column(m->session->tr, t, name, tpe);
        else
                return sql_trans_create_column(m->session->tr, t, name, tpe);
 }
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
@@ -2822,7 +2822,7 @@ update_table(sql_trans *tr, sql_table *f
                        }
                }
 
-               dup_sql_type(tr, ft->s, &(cc->type), &(oc->type));
+               dup_sql_type(tr->parent, ft->s, &(cc->type), &(oc->type));
                oc->colnr = cc->colnr;
                oc->null = cc->null;
                oc->unique = cc->unique;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -470,7 +470,7 @@ extern int sql_trans_check_dependency(sq
 extern list* sql_trans_owner_schema_dependencies(sql_trans *tr, sqlid id);
 
 extern sql_table *create_sql_table(sql_allocator *sa, const char *name, sht 
type, bit system, int persistence, int commit_action, bit properties);
-extern sql_column *create_sql_column(sql_allocator *sa, sql_table *t, const 
char *name, sql_subtype *tpe);
+extern sql_column *create_sql_column(sql_trans *tr, sql_table *t, const char 
*name, sql_subtype *tpe);
 extern sql_ukey *create_sql_ukey(sql_allocator *sa, sql_table *t, const char 
*nme, key_type kt);
 extern sql_fkey *create_sql_fkey(sql_allocator *sa, sql_table *t, const char 
*nme, key_type kt, sql_key *rkey, int on_delete, int on_update );
 extern sql_key *create_sql_kc(sql_allocator *sa, sql_key *k, sql_column *c);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1578,7 +1578,9 @@ create_sql_table(sql_allocator *sa, cons
 void
 dup_sql_type(sql_trans *tr, sql_schema *os, sql_subtype *oc, sql_subtype *nc)
 {
-       *nc = *oc;
+       nc->digits = oc->digits;
+       nc->scale = oc->scale;
+       nc->type = oc->type;
        if (nc->type->s) { /* user type */
                sql_type *lt = NULL;
 
@@ -3448,6 +3450,8 @@ type_dup(sql_trans *tr, int flags, sql_t
        t->bits = ot->bits;
        t->localtype = ot->localtype;
        t->s = s;
+       if (isNew(ot) && newFlagSet(flags) && tr->parent == gtrans)
+               removeNewFlag(ot);
        return t;
 }
 
@@ -3494,11 +3498,13 @@ func_dup(sql_trans *tr, int flags, sql_f
        }
        f->s = s;
        f->sa = sa;
+       if (isNew(of) && newFlagSet(flags) && tr->parent == gtrans)
+               removeNewFlag(of);
        return f;
 }
 
 static sql_sequence *
-seq_dup(sql_trans *tr, int flags, sql_sequence *oseq, sql_schema * s)
+seq_dup(sql_trans *tr, int flags, sql_sequence *oseq, sql_schema *s)
 {
        sql_allocator *sa = (newFlagSet(flags))?tr->parent->sa:tr->sa;
        sql_sequence *seq = SA_ZNEW(sa, sql_sequence);
@@ -3512,6 +3518,8 @@ seq_dup(sql_trans *tr, int flags, sql_se
        seq->cacheinc = oseq->cacheinc;
        seq->cycle = oseq->cycle;
        seq->s = s;
+       if (isNew(oseq) && newFlagSet(flags) && tr->parent == gtrans)
+               removeNewFlag(oseq);
        return seq;
 }
 
@@ -3658,6 +3666,30 @@ trans_init(sql_trans *tr, backend_stack 
                                        assert(0);
                                }
                        }
+                       if (ps->seqs.set && s->seqs.set)
+                       for (k = ps->seqs.set->h, l = s->seqs.set->h; k && l; k 
= k->next, l = l->next ) { 
+                               sql_sequence *pt = k->data; /* parent 
transactions sequence */
+                               sql_sequence *t = l->data; 
+
+                               t->base.rtime = t->base.wtime = 0;
+                               t->base.stime = pt->base.wtime;
+                       }
+                       if (ps->funcs.set && s->funcs.set)
+                       for (k = ps->funcs.set->h, l = s->funcs.set->h; k && l; 
k = k->next, l = l->next ) { 
+                               sql_func *pt = k->data; /* parent transactions 
func */
+                               sql_func *t = l->data; 
+
+                               t->base.rtime = t->base.wtime = 0;
+                               t->base.stime = pt->base.wtime;
+                       }
+                       if (ps->types.set && s->types.set)
+                       for (k = ps->types.set->h, l = s->types.set->h; k && l; 
k = k->next, l = l->next ) { 
+                               sql_type *pt = k->data; /* parent transactions 
type */
+                               sql_type *t = l->data; 
+
+                               t->base.rtime = t->base.wtime = 0;
+                               t->base.stime = pt->base.wtime;
+                       }
                } else {
                        /* for now assert */
                        assert(0);
@@ -4082,7 +4114,7 @@ rollforward_drop_key(sql_trans *tr, sql_
 }
 
 static int
-rollforward_drop_trigger(sql_trans *tr, sql_trigger * i, int mode)
+rollforward_drop_trigger(sql_trans *tr, sql_trigger *i, int mode)
 {
        (void)tr;
        if (mode == R_APPLY)
@@ -4091,7 +4123,7 @@ rollforward_drop_trigger(sql_trans *tr, 
 }
 
 static int
-rollforward_drop_seq(sql_trans *tr, sql_sequence * seq, int mode)
+rollforward_drop_seq(sql_trans *tr, sql_sequence *seq, int mode)
 {
        (void)tr;
        (void)seq;
@@ -4101,6 +4133,24 @@ rollforward_drop_seq(sql_trans *tr, sql_
 }
 
 static int
+rollforward_drop_type(sql_trans *tr, sql_type *t, int mode)
+{
+       (void)tr;
+       (void)t;
+       (void)mode;
+       return LOG_OK;
+}
+
+static int
+rollforward_drop_func(sql_trans *tr, sql_func *f, int mode)
+{
+       (void)tr;
+       (void)f;
+       (void)mode;
+       return LOG_OK;
+}
+
+static int
 rollforward_drop_table(sql_trans *tr, sql_table *t, int mode)
 {
        int ok = LOG_OK;
@@ -4131,17 +4181,27 @@ rollforward_drop_schema(sql_trans *tr, s
 {
        int ok = LOG_OK;
 
-       ok = rollforward_changeset_deletes(tr, &s->seqs, (rfdfunc) 
&rollforward_drop_seq, mode);
+       ok = rollforward_changeset_deletes(tr, &s->types, (rfdfunc) 
&rollforward_drop_type, mode);
+       if (ok == LOG_OK)
+               ok = rollforward_changeset_deletes(tr, &s->tables, (rfdfunc) 
&rollforward_drop_table, mode);
        if (ok == LOG_OK)
-               return rollforward_changeset_deletes(tr, &s->tables, (rfdfunc) 
&rollforward_drop_table, mode);
+               ok = rollforward_changeset_deletes(tr, &s->funcs, (rfdfunc) 
&rollforward_drop_func, mode);
+       if (ok == LOG_OK)
+               ok = rollforward_changeset_deletes(tr, &s->seqs, (rfdfunc) 
&rollforward_drop_seq, mode);
        return ok;
 }
 
 static sql_schema *
 rollforward_create_schema(sql_trans *tr, sql_schema *s, int mode)
 {
+       if (rollforward_changeset_creates(tr, &s->types, (rfcfunc) 
&rollforward_create_type, mode) != LOG_OK)
+               return NULL;
        if (rollforward_changeset_creates(tr, &s->tables, (rfcfunc) 
&rollforward_create_table, mode) != LOG_OK)
                return NULL;
+       if (rollforward_changeset_creates(tr, &s->funcs, (rfcfunc) 
&rollforward_create_func, mode) != LOG_OK)
+               return NULL;
+       if (rollforward_changeset_creates(tr, &s->seqs, (rfcfunc) 
&rollforward_create_seq, mode) != LOG_OK)
+               return NULL;
        return s;
 }
 
@@ -4306,13 +4366,13 @@ rollforward_update_schema(sql_trans *tr,
        }
 
        if (ok == LOG_OK)
-               ok = rollforward_changeset_updates(tr, &fs->types, &ts->types, 
&ts->base, (rfufunc) NULL, (rfcfunc) &rollforward_create_type, (rfdfunc) NULL, 
(dupfunc) &type_dup, mode);
+               ok = rollforward_changeset_updates(tr, &fs->types, &ts->types, 
&ts->base, (rfufunc) NULL, (rfcfunc) &rollforward_create_type, (rfdfunc) 
&rollforward_drop_type, (dupfunc) &type_dup, mode);
 
        if (ok == LOG_OK)
                ok = rollforward_changeset_updates(tr, &fs->tables, 
&ts->tables, &ts->base, (rfufunc) &rollforward_update_table, (rfcfunc) 
&rollforward_create_table, (rfdfunc) &rollforward_drop_table, (dupfunc) 
&conditional_table_dup, mode);
 
        if (ok == LOG_OK) /* last as it may require complex (table) types */
-               ok = rollforward_changeset_updates(tr, &fs->funcs, &ts->funcs, 
&ts->base, (rfufunc) NULL, (rfcfunc) &rollforward_create_func, (rfdfunc) NULL, 
(dupfunc) &func_dup, mode);
+               ok = rollforward_changeset_updates(tr, &fs->funcs, &ts->funcs, 
&ts->base, (rfufunc) NULL, (rfcfunc) &rollforward_create_func, (rfdfunc) 
&rollforward_drop_func, (dupfunc) &func_dup, mode);
 
        if (ok == LOG_OK) /* last as it may require complex (table) types */
                ok = rollforward_changeset_updates(tr, &fs->seqs, &ts->seqs, 
&ts->base, (rfufunc) &rollforward_update_seq, (rfcfunc) 
&rollforward_create_seq, (rfdfunc) &rollforward_drop_seq, (dupfunc) &seq_dup, 
mode);
@@ -4505,6 +4565,50 @@ reset_idx(sql_trans *tr, sql_idx *fi, sq
 }
 
 static int
+reset_type(sql_trans *tr, sql_type *ft, sql_type *pft)
+{
+       /* did we access the type or is the global changed after we started */
+       if (ft->base.rtime || ft->base.wtime || tr->stime < pft->base.wtime) {
+
+               ft->sqlname = pft->sqlname;
+               ft->radix = pft->radix;
+               ft->eclass = pft->eclass;
+               ft->bits = pft->bits;
+               ft->localtype = pft->localtype;
+               ft->digits = pft->digits;
+               ft->scale = pft->scale;
+               ft->s = find_sql_schema(tr, pft->s->base.name);
+       }
+       return LOG_OK;
+}
+
+static int
+reset_func(sql_trans *tr, sql_func *ff, sql_func *pff)
+{
+       /* did we access the type or is the global changed after we started */
+       if (ff->base.rtime || ff->base.wtime || tr->stime < pff->base.wtime) {
+
+               ff->imp = pff->imp;
+               ff->mod = pff->mod;
+               ff->type = pff->type;
+               ff->query = pff->query;
+               ff->lang = pff->lang;
+               ff->sql = pff->sql;
+               ff->side_effect = pff->side_effect;
+               ff->varres = pff->varres;
+               ff->vararg = pff->vararg;
+               ff->ops = pff->ops;
+               ff->res = pff->res;
+               ff->fix_scale = pff->fix_scale;
+               ff->system = pff->system;
+               ff->ops = pff->ops;
+               ff->s = find_sql_schema(tr, pff->s->base.name);
+               ff->sa = tr->sa;
+       }
+       return LOG_OK;
+}
+
+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 */
@@ -4677,9 +4781,9 @@ reset_schema(sql_trans *tr, sql_schema *
                }
 
                if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->types, &pfs->types, 
&fs->base, (resetf) NULL, (dupfunc) &type_dup);
+                       ok = reset_changeset(tr, &fs->types, &pfs->types, 
&fs->base, (resetf) &reset_type, (dupfunc) &type_dup);
                if (ok == LOG_OK)
-                       ok = reset_changeset(tr, &fs->funcs, &pfs->funcs, 
&fs->base, (resetf) NULL, (dupfunc) &func_dup);
+                       ok = reset_changeset(tr, &fs->funcs, &pfs->funcs, 
&fs->base, (resetf) &reset_func, (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)
@@ -5333,7 +5437,7 @@ sys_drop_sequences(sql_trans *tr, sql_sc
 }
 
 sql_type *
-sql_trans_create_type(sql_trans *tr, sql_schema * s, const char *sqlname, int 
digits, int scale, int radix, const char *impl)
+sql_trans_create_type(sql_trans *tr, sql_schema *s, const char *sqlname, int 
digits, int scale, int radix, const char *impl)
 {
        sql_type *t;
        sql_table *systype;
@@ -5933,7 +6037,11 @@ sql_trans_set_table_schema(sql_trans *tr
        m->t = t;
        list_append(tr->moved_tables, m);
 
-       tr->wtime = tr->wstime;
+       t->base.wtime = os->base.wtime = ns->base.wtime = tr->wtime = 
tr->wstime;
+       for (node *n = t->columns.set->h ; n ; n = n->next) {
+               sql_column *col = (sql_column*) n->data;
+               col->base.wtime = tr->wstime; /* the table's columns types have 
to be set again */
+       }
        tr->schema_updates ++;
        return t;
 }
@@ -6155,12 +6263,12 @@ create_sql_idx(sql_allocator *sa, sql_ta
 }
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to