Changeset: 3612d4314622 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3612d4314622
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/common/sql_changeset.c
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/server/sql_partition.c
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/storage/store_sequence.c
        sql/test/rename/Tests/rename02.sql
Branch: rename-sql
Log Message:

Introduced TR_RENAMED flag for sql_base. This flag allows to identify if a sql 
object was renamed during a transaction.

The "flag" field of sql_base (now "flags") is now a bit mask listening changes 
occurred during a transaction.


diffs (truncated from 1363 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -864,7 +864,7 @@ stmt_col( backend *be, sql_column *c, st
        stmt *sc = stmt_bat(be, c, RDONLY, del?del->partition:0);
 
        if (isTable(c->t) && c->t->access != TABLE_READONLY &&
-          (c->base.flag != TR_NEW || c->t->base.flag != TR_NEW /* alter */) &&
+          (!isNew(c) || !isNew(c->t) /* alter */) &&
           (c->t->persistence == SQL_PERSIST || c->t->persistence == 
SQL_DECLARED_TABLE) && !c->t->commit_action) {
                stmt *i = stmt_bat(be, c, RD_INS, 0);
                stmt *u = stmt_bat(be, c, RD_UPD_ID, del?del->partition:0);
@@ -882,7 +882,7 @@ stmt_idx( backend *be, sql_idx *i, stmt 
        stmt *sc = stmt_idxbat(be, i, RDONLY, del?del->partition:0);
 
        if (isTable(i->t) && i->t->access != TABLE_READONLY &&
-          (i->base.flag != TR_NEW || i->t->base.flag != TR_NEW /* alter */) &&
+          (!isNew(i) || !isNew(i->t) /* alter */) &&
           (i->t->persistence == SQL_PERSIST || i->t->persistence == 
SQL_DECLARED_TABLE) && !i->t->commit_action) {
                stmt *ic = stmt_idxbat(be, i, RD_INS, 0);
                stmt *u = stmt_idxbat(be, i, RD_UPD_ID, del?del->partition:0);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1922,7 +1922,7 @@ SQLtid(Client cntxt, MalBlkPtr mb, MalSt
 
        nr = store_funcs.count_col(tr, c, 1);
 
-       if (isTable(t) && t->access == TABLE_WRITABLE && (t->base.flag != 
TR_NEW /* alter */ ) &&
+       if (isTable(t) && t->access == TABLE_WRITABLE && (!isNew(t) /* alter */ 
) &&
            t->persistence == SQL_PERSIST && !t->commit_action)
                inr = store_funcs.count_col(tr, c, 0);
        nr -= inr;
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
@@ -65,7 +65,7 @@ table_has_updates(sql_trans *tr, sql_tab
                if ( b == 0)
                        return -1;
                cnt |= BATcount(b) > 0;
-               if (isTable(t) && t->access != TABLE_READONLY && (t->base.flag 
!= TR_NEW /* alter */ ) &&
+               if (isTable(t) && t->access != TABLE_READONLY && (!isNew(t) /* 
alter */ ) &&
                    t->persistence == SQL_PERSIST && !t->commit_action)
                        cnt |= store_funcs.count_col(tr, c, 0) > 0;
                BBPunfix(b->batCacheid);
@@ -1601,7 +1601,7 @@ SQLrename_table(Client cntxt, MalBlkPtr 
        if (!(t = mvc_bind_table(sql, s, old_name)))
                throw(SQL, "sql.rename_table", SQLSTATE(42S02) "ALTER TABLE: no 
such table '%s' in schema '%s'", old_name, schema_name);
        if (t->system)
-               throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: 
cannot rename system table '%s'", old_name);
+               throw(SQL, "sql.rename_table", SQLSTATE(42000) "ALTER TABLE: 
cannot rename a system table");
        if (!new_name || strcmp(new_name, str_nil) == 0)
                throw(SQL, "sql.rename_table", SQLSTATE(3F000) "ALTER TABLE: 
invalid new table name");
        if (mvc_bind_table(sql, s, new_name))
@@ -1632,7 +1632,7 @@ SQLrename_column(Client cntxt, MalBlkPtr
        if (!(t = mvc_bind_table(sql, s, table_name)))
                throw(SQL, "sql.rename_column", SQLSTATE(42S02) "ALTER TABLE: 
no such table '%s' in schema '%s'", table_name, schema_name);
        if (t->system)
-               throw(SQL, "sql.rename_column", SQLSTATE(42000) "ALTER TABLE: 
cannot rename system table '%s'", t->base.name);
+               throw(SQL, "sql.rename_column", SQLSTATE(42000) "ALTER TABLE: 
cannot rename a column in a system table");
        if (isView(t))
                throw(SQL, "sql.rename_column", SQLSTATE(42000) "ALTER TABLE: 
cannot rename column '%s': '%s' is a view", old_name, t->base.name);
        if (!mvc_bind_column(sql, t, old_name))
diff --git a/sql/common/sql_changeset.c b/sql/common/sql_changeset.c
--- a/sql/common/sql_changeset.c
+++ b/sql/common/sql_changeset.c
@@ -33,12 +33,12 @@ cs_destroy(changeset * cs)
 }
 
 void
-cs_add(changeset * cs, void *elm, int flag)
+cs_add(changeset * cs, void *elm, int flags)
 {
        if (!cs->set) 
                cs->set = list_new(cs->sa, cs->destroy);
        list_append(cs->set, elm);
-       if (flag == TR_NEW && !cs->nelm)
+       if (newFlagSet(flags) && !cs->nelm)
                cs->nelm = cs->set->t;
 }
 
@@ -49,14 +49,14 @@ cs_transverse_with_validate(changeset * 
 }
 
 void*
-cs_add_with_validate(changeset * cs, void *elm, int flag, fvalidate cmp)
+cs_add_with_validate(changeset * cs, void *elm, int flags, fvalidate cmp)
 {
        void* res = NULL;
        if (!cs->set)
                cs->set = list_new(cs->sa, cs->destroy);
        if((res = list_append_with_validate(cs->set, elm, cmp)) != NULL)
                return res;
-       if (flag == TR_NEW && !cs->nelm)
+       if (newFlagSet(flags) && !cs->nelm)
                cs->nelm = cs->set->t;
        return res;
 }
@@ -68,9 +68,9 @@ cs_add_before(changeset * cs, node *n, v
 }
 
 void
-cs_del(changeset * cs, node *elm, int flag)
+cs_del(changeset * cs, node *elm, int flags)
 {
-       if (flag == TR_NEW) {   /* remove just added */
+       if (newFlagSet(flags)) {        /* remove just added */
                if (cs->nelm == elm)
                        cs->nelm = elm->next;
                list_remove_node(cs->set, elm);
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -136,14 +136,14 @@ int is_commutative(const char *fnm)
 }
 
 void
-base_init(sql_allocator *sa, sql_base * b, sqlid id, int flag, const char 
*name)
+base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags, const char 
*name)
 {
        b->id = id;
 
        assert(sa);
        b->wtime = 0;
        b->rtime = 0;
-       b->flag = flag;
+       b->flags = flags;
        b->name = NULL;
        b->refcnt = 1;
        if (name)
@@ -1108,7 +1108,7 @@ sql_create_type(sql_allocator *sa, const
 {
        sql_type *t = SA_ZNEW(sa, sql_type);
 
-       base_init(sa, &t->base, store_next_oid(), TR_OLD, name);
+       base_init(sa, &t->base, store_next_oid(), 0, name);
        t->sqlname = sa_strdup(sa, sqlname);
        t->digits = digits;
        t->scale = scale;
@@ -1164,7 +1164,7 @@ sql_create_func_(sql_allocator *sa, cons
 
        if (!ops)
                ops = sa_list(sa);
-       base_init(sa, &t->base, store_next_oid(), TR_OLD, name);
+       base_init(sa, &t->base, store_next_oid(), 0, name);
        t->imp = sa_strdup(sa, imp);
        t->mod = sa_strdup(sa, mod);
        t->ops = ops;
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
@@ -85,8 +85,8 @@
 #define SCALE_EQ       7       /* user defined functions need equal scales */
 #define SCALE_DIGITS_FIX 8     /* the geom module requires the types and 
functions to have the same scale and digits */
 
-#define TR_OLD 0
 #define TR_NEW 1
+#define TR_RENAMED 2
 
 #define RDONLY 0
 #define RD_INS 1
@@ -176,15 +176,21 @@ typedef struct sql_base {
        int wtime;
        int rtime;
        int allocated;
-       int flag;
+       int flags;
        int refcnt;
        sqlid id;
        char *name;
 } sql_base;
 
-extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, int flag, 
const char *name);
-extern void base_set_name(sql_base * b, const char *name);
-extern void base_destroy(sql_base * b);
+#define newFlagSet(x)     ((x & TR_NEW) == TR_NEW)
+#define removeNewFlag(x)  ((x)->base.flags &= ~TR_NEW)
+#define isNew(x)          (newFlagSet((x)->base.flags))
+
+#define setRenamedFlag(x)    ((x)->base.flags |= TR_RENAMED)
+#define removeRenamedFlag(x) ((x)->base.flags &= ~TR_RENAMED)
+#define isRenamed(x)         (((x)->base.flags & TR_RENAMED) == TR_RENAMED)
+
+extern void base_init(sql_allocator *sa, sql_base * b, sqlid id, int flags, 
const char *name);
 
 typedef struct changeset {
        sql_allocator *sa;
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -374,7 +374,7 @@ initialize_sql_parts(mvc* sql, sql_table
                        sql_table* pt = find_sql_table(mt->s, next->base.name);
 
                        pt->p = NULL;
-                       cs_del(&mt->members, n, next->base.flag);
+                       cs_del(&mt->members, n, next->base.flags);
                        sql_trans_drop_dependency(sql->session->tr, 
next->base.id, mt->base.id, TABLE_DEPENDENCY);
                }
                for (node *n = new->h; n; n = n->next) {
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
@@ -600,7 +600,7 @@ update_col(sql_trans *tr, sql_column *c,
                        return LOG_ERR;
                c->data = bat;
                obat = timestamp_delta(oc->data, tr->stime);
-               if(dup_bat(tr, c->t, obat, bat, type, isNew(oc), c->base.flag 
== TR_NEW) == LOG_ERR)
+               if(dup_bat(tr, c->t, obat, bat, type, isNew(oc), isNew(c)) == 
LOG_ERR)
                        return LOG_ERR;
                c->base.allocated = 1;
        }
@@ -630,7 +630,7 @@ update_idx(sql_trans *tr, sql_idx * i, v
                        return LOG_ERR;
                i->data = bat;
                obat = timestamp_delta(oi->data, tr->stime);
-               if(dup_bat(tr, i->t, obat, bat, type, isNew(i), i->base.flag == 
TR_NEW) == LOG_ERR)
+               if(dup_bat(tr, i->t, obat, bat, type, isNew(i), isNew(i)) == 
LOG_ERR)
                        return LOG_ERR;
                i->base.allocated = 1;
        }
@@ -753,7 +753,7 @@ dup_col(sql_trans *tr, sql_column *oc, s
                        ok = LOG_ERR;
                else {
                        c->data = bat;
-                       ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), 
c->base.flag == TR_NEW);
+                       ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), 
isNew(c));
                        c->base.allocated = 1;
                }
        }
@@ -774,7 +774,7 @@ dup_idx(sql_trans *tr, sql_idx *i, sql_i
                        ok = LOG_ERR;
                else {
                        ni->data = bat;
-                       ok = dup_bat(tr, ni->t, obat, bat, type, isNew(i), 
ni->base.flag == TR_NEW);
+                       ok = dup_bat(tr, ni->t, obat, bat, type, isNew(i), 
isNew(ni));
                        ni->base.allocated = 1;
                }
        }
@@ -836,7 +836,7 @@ append_col(sql_trans *tr, sql_column *c,
                else {
                        c->data = bat;
                        obat = timestamp_delta(oc->data, tr->stime);
-                       ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), 
c->base.flag == TR_NEW);
+                       ok = dup_bat(tr, c->t, obat, bat, type, isNew(oc), 
isNew(c));
                        if(ok == LOG_OK)
                                c->base.allocated = 1;
                }
@@ -893,7 +893,7 @@ append_idx(sql_trans *tr, sql_idx * i, v
                else {
                        i->data = bat;
                        obat = timestamp_delta(oi->data, tr->stime);
-                       ok = dup_bat(tr, i->t, obat, bat, type, isNew(i), 
i->base.flag == TR_NEW);
+                       ok = dup_bat(tr, i->t, obat, bat, type, isNew(i), 
isNew(i));
                        if(ok != LOG_ERR)
                                i->base.allocated = 1;
                }
@@ -1027,7 +1027,7 @@ delete_tab(sql_trans *tr, sql_table * t,
                        sql_column *oc = tr_find_column(tr->parent, c);
                        c->data = timestamp_delta(oc->data, tr->stime);
                }
-                       bat = c->data;
+               bat = c->data;
                if (bat->cached) {
                        bat_destroy(bat->cached);
                        bat->cached = NULL;
@@ -1044,7 +1044,7 @@ delete_tab(sql_trans *tr, sql_table * t,
                                sql_idx *oi = tr_find_idx(tr->parent, i);
                                i->data = timestamp_delta(oi->data, tr->stime);
                        }
-                               bat = i->data;
+                       bat = i->data;
                        if (bat && bat->cached) {
                                bat_destroy(bat->cached);
                                bat->cached = NULL;
@@ -1092,7 +1092,7 @@ dcount_col(sql_trans *tr, sql_column *c)
                sql_column *oc = tr_find_column(tr->parent, c);
                c->data = timestamp_delta(oc->data, tr->stime);
        }
-        b = c->data;
+       b = c->data;
        if (!b)
                return 1;
        if (b->cnt > 1024) {
@@ -1147,7 +1147,7 @@ count_del(sql_trans *tr, sql_table *t)
                sql_table *ot = tr_find_table(tr->parent, t);
                t->data = timestamp_dbat(ot->data, tr->stime);
        }
-               d = t->data;
+       d = t->data;
        if (!d)
                return 0;
        return d->cnt;
@@ -1163,7 +1163,7 @@ count_col_upd(sql_trans *tr, sql_column 
                sql_column *oc = tr_find_column(tr->parent, c);
                c->data = timestamp_delta(oc->data, tr->stime);
        }
-        b = c->data;
+       b = c->data;
        if (!b)
                return 1;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to