Changeset: a9c8b842f3ed for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a9c8b842f3ed
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: default
Log Message:
Merged with linear-hashing
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
@@ -1055,7 +1055,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;
@@ -1355,7 +1355,7 @@ mvc_create_column(mvc *m, sql_table *t,
TRC_DEBUG(SQL_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
@@ -1549,7 +1549,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;
@@ -3407,6 +3409,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;
}
@@ -3453,11 +3457,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);
@@ -3471,6 +3477,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;
}
@@ -3617,6 +3625,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);
@@ -4037,7 +4069,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)
@@ -4046,7 +4078,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;
@@ -4056,6 +4088,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;
@@ -4086,17 +4136,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;
}
@@ -4260,13 +4320,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);
@@ -4457,6 +4517,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 */
@@ -4629,9 +4733,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)
@@ -5277,7 +5381,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;
@@ -5877,7 +5981,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;
}
@@ -6098,12 +6206,12 @@ create_sql_idx(sql_allocator *sa, sql_ta
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list