Changeset: b15ca3308bdc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/b15ca3308bdc
Modified Files:
        sql/backends/monet5/sql.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: Jul2021
Log Message:

merged


diffs (truncated from 42547 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
@@ -5695,10 +5695,22 @@ sql_truncate(backend *be, sql_table *t, 
 
                                        assert(s->base.id == sche->base.id);
                                        if ((seq = find_sql_sequence(tr, s, 
seq_name))) {
-                                               if 
(!sql_trans_sequence_restart(tr, seq, seq->start)) {
-                                                       sql_error(sql, 02, 
SQLSTATE(HY005) "Could not restart sequence %s.%s", sche->base.name, seq_name);
-                                                       error = 1;
-                                                       goto finalize;
+                                               switch 
(sql_trans_sequence_restart(tr, seq, seq->start)) {
+                                                       case -1:
+                                                               sql_error(sql, 
02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                                                               error = 1;
+                                                               goto finalize;
+                                                       case -2:
+                                                       case -3:
+                                                               sql_error(sql, 
02, SQLSTATE(HY005) "RESTART SEQUENCE: transaction conflict detected");
+                                                               error = 1;
+                                                               goto finalize;
+                                                       case -4:
+                                                               sql_error(sql, 
02, SQLSTATE(HY005) "Could not restart sequence %s.%s", sche->base.name, 
seq_name);
+                                                               error = 1;
+                                                               goto finalize;
+                                                       default:
+                                                               break;
                                                }
                                        }
                                }
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
@@ -371,12 +371,20 @@ create_table_or_view(mvc *sql, char* sna
        }
 
        for (n = ol_first_node(t->columns); n; n = n->next) {
-               sql_column *c = n->data, *copied = mvc_copy_column(sql, nt, c);
-
-               if (copied == NULL) {
-                       sa_reset(sql->ta);
-                       sql->sa = osa;
-                       throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: %s_%s_%s conflicts", s->base.name, t->base.name, c->base.name);
+               sql_column *c = n->data, *copied = NULL;
+
+               switch (mvc_copy_column(sql, nt, c, &copied)) {
+                       case -1:
+                               sa_reset(sql->ta);
+                               sql->sa = osa;
+                               throw(SQL, "sql.catalog", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       case -2:
+                       case -3:
+                               sa_reset(sql->ta);
+                               sql->sa = osa;
+                               throw(SQL, "sql.catalog", SQLSTATE(42000) 
"CREATE TABLE: %s_%s_%s conflicts", s->base.name, t->base.name, c->base.name);
+                       default:
+                               break;
                }
                if (isPartitionedByColumnTable(t) && c->base.id == 
t->part.pcol->base.id)
                        nt->part.pcol = copied;
@@ -405,9 +413,17 @@ create_table_or_view(mvc *sql, char* sna
        if (t->idxs) {
                for (n = ol_first_node(t->idxs); n; n = n->next) {
                        sql_idx *i = n->data;
-                       if (!mvc_copy_idx(sql, nt, i)) {
-                               sql->sa = osa;
-                               throw(SQL, "sql.catalog", SQLSTATE(42000) 
"CREATE TABLE: %s_%s_%s index conflicts", s->base.name, t->base.name, 
i->base.name);
+
+                       switch (mvc_copy_idx(sql, nt, i, NULL)) {
+                               case -1:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(42000) "CREATE TABLE: %s_%s_%s index conflicts", s->base.name, 
t->base.name, i->base.name);
+                               default:
+                                       break;
                        }
                }
        }
@@ -422,18 +438,33 @@ create_table_or_view(mvc *sql, char* sna
                                sql->sa = osa;
                                return err;
                        }
-                       if (!mvc_copy_key(sql, nt, k)) {
-                               sql->sa = osa;
-                               throw(SQL, "sql.catalog", SQLSTATE(42000) 
"CREATE TABLE: %s_%s_%s constraint conflicts", s->base.name, t->base.name, 
k->base.name);
+                       switch (mvc_copy_key(sql, nt, k, NULL)) {
+                               case -1:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(42000) "CREATE TABLE: %s_%s_%s constraint conflicts", s->base.name, 
t->base.name, k->base.name);
+                               default:
+                                       break;
                        }
                }
        }
        if (t->triggers) {
                for (n = ol_first_node(t->triggers); n; n = n->next) {
                        sql_trigger *tr = n->data;
-                       if (mvc_copy_trigger(sql, nt, tr)) {
-                               sql->sa = osa;
-                               throw(SQL, "sql.catalog", SQLSTATE(42000) 
"CREATE TABLE: %s_%s_%s trigger conflicts", s->base.name, t->base.name, 
nt->base.name);
+
+                       switch (mvc_copy_trigger(sql, nt, tr, NULL)) {
+                               case -1:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       sql->sa = osa;
+                                       throw(SQL, "sql.catalog", 
SQLSTATE(42000) "CREATE TABLE: %s_%s_%s trigger conflicts", s->base.name, 
t->base.name, nt->base.name);
+                               default:
+                                       break;
                        }
                }
        }
@@ -1041,11 +1072,18 @@ mvc_restart_seq(Client cntxt, MalBlkPtr 
                throw(SQL, "sql.restart", SQLSTATE(HY050) "Cannot set sequence 
%s.%s start to a value lesser than the minimum ("LLFMT" < "LLFMT")", sname, 
seqname, start, seq->minvalue);
        if (seq->maxvalue && start > seq->maxvalue)
                throw(SQL, "sql.restart", SQLSTATE(HY050) "Cannot set sequence 
%s.%s start to a value higher than the maximum ("LLFMT" > "LLFMT")", sname, 
seqname, start, seq->maxvalue);
-       if (sql_trans_sequence_restart(m->session->tr, seq, start)) {
-               *res = start;
-               return MAL_SUCCEED;
+       switch (sql_trans_sequence_restart(m->session->tr, seq, start)) {
+               case -1:
+                       throw(SQL,"sql.restart",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               case -2:
+               case -3:
+                       throw(SQL,"sql.restart",SQLSTATE(42000) "RESTART 
SEQUENCE: transaction conflict detected");
+               case -4:
+                       throw(SQL,"sql.restart",SQLSTATE(HY050) "Cannot 
(re)start sequence %s.%s", sname, seqname);
+               default:
+                       *res = start;
        }
-       throw(SQL, "sql.restart", SQLSTATE(HY050) "Cannot (re)start sequence 
%s.%s", sname, seqname);
+       return MAL_SUCCEED;
 }
 
 str
@@ -1160,9 +1198,19 @@ mvc_bat_restart_seq(Client cntxt, MalBlk
                        msg = createException(SQL, "sql.restart", 
SQLSTATE(HY050) "Cannot set sequence %s.%s start to a value higher than the 
maximum ("LLFMT" > "LLFMT")", sname, seqname, start, seq->maxvalue);
                        goto bailout;
                }
-               if (!sql_trans_seqbulk_restart(m->session->tr, sb, nstart)) {
-                       msg = createException(SQL, "sql.restart", 
SQLSTATE(HY050) "Cannot restart sequence %s.%s", nsname, nseqname);
-                       goto bailout;
+               switch (sql_trans_seqbulk_restart(m->session->tr, sb, nstart)) {
+                       case -1:
+                               msg = 
createException(SQL,"sql.restart",SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               goto bailout;
+                       case -2:
+                       case -3:
+                               msg = 
createException(SQL,"sql.restart",SQLSTATE(42000) "RESTART SEQUENCE: 
transaction conflict detected");
+                               goto bailout;
+                       case -4:
+                               msg = 
createException(SQL,"sql.restart",SQLSTATE(HY050) "Cannot restart sequence 
%s.%s", nsname, nseqname);
+                               goto bailout;
+                       default:
+                               break;
                }
                if (BUNappend(r, &nstart, false) != GDK_SUCCEED) {
                        msg = createException(SQL, "sql.restart", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
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
@@ -185,7 +185,15 @@ alter_table_add_table(mvc *sql, char *ms
                        return createException(SQL, 
"sql.alter_table_add_table",SQLSTATE(42000) "ALTER TABLE: a range partition is 
required while adding under a range partition table");
                if (isListPartitionTable(mt))
                        return createException(SQL, 
"sql.alter_table_add_table",SQLSTATE(42000) "ALTER TABLE: a value partition is 
required while adding under a list partition table");
-               sql_trans_add_table(sql->session->tr, mt, pt);
+               switch (sql_trans_add_table(sql->session->tr, mt, pt)) {
+                       case -1:
+                               return 
createException(SQL,"sql.alter_table_add_table",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       case -2:
+                       case -3:
+                               return 
createException(SQL,"sql.alter_table_add_table",SQLSTATE(42000) "ALTER TABLE: 
transaction conflict detected");
+                       default:
+                               break;
+               }
        }
        return msg;
 }
@@ -471,7 +479,15 @@ alter_table_set_access(mvc *sql, char *s
                if (access && table_has_updates(sql->session->tr, t))
                        throw(SQL,"sql.alter_table_set_access",SQLSTATE(40000) 
"ALTER TABLE: set READ or INSERT ONLY not possible with outstanding updates 
(wait until updates are flushed)\n");
 
-               mvc_access(sql, t, access);
+               switch (mvc_access(sql, t, access)) {
+                       case -1:
+                               
throw(SQL,"sql.alter_table_set_access",SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                       case -2:
+                       case -3:
+                               
throw(SQL,"sql.alter_table_set_access",SQLSTATE(42000) "ALTER TABLE: 
transaction conflict detected");
+                       default:
+                               break;
+               }
                if (access == 0 && (msg = sql_drop_statistics(sql, t)))
                        return msg;
        }
@@ -749,7 +765,15 @@ alter_seq(mvc *sql, char *sname, char *s
                throw(SQL,"sql.alter_seq", SQLSTATE(42000) "ALTER SEQUENCE: no 
such sequence '%s'", seq->base.name);
        /* if seq properties hold NULL values, then they should be ignored 
during the update */
        /* first alter the known values */
-       sql_trans_alter_sequence(sql->session->tr, nseq, seq->minvalue, 
seq->maxvalue, seq->increment, seq->cacheinc, seq->cycle);
+       switch (sql_trans_alter_sequence(sql->session->tr, nseq, seq->minvalue, 
seq->maxvalue, seq->increment, seq->cacheinc, seq->cycle)) {
+               case -1:
+                       throw(SQL,"sql.alter_seq",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               case -2:
+               case -3:
+                       throw(SQL,"sql.alter_seq",SQLSTATE(42000) "ALTER 
SEQUENCE: transaction conflict detected");
+               default:
+                       break;
+       }
        if (nseq->minvalue && nseq->maxvalue && nseq->maxvalue < seq->minvalue)
                throw(SQL, "sql.alter_seq", SQLSTATE(42000) "ALTER SEQUENCE: 
maximum value is lesser than the minimum ("LLFMT" < "LLFMT")", nseq->maxvalue, 
nseq->minvalue);
        if (val) {
@@ -759,8 +783,17 @@ alter_seq(mvc *sql, char *sname, char *s
                        throw(SQL,"sql.alter_seq", SQLSTATE(42000) "ALTER 
SEQUENCE: cannot set sequence start to a value lesser than the minimum ("LLFMT" 
< "LLFMT")", *val, nseq->minvalue);
                if (nseq->maxvalue && *val > nseq->maxvalue)
                        throw(SQL,"sql.alter_seq", SQLSTATE(42000) "ALTER 
SEQUENCE: cannot set sequence start to a value higher than the maximum ("LLFMT" 
> "LLFMT")", *val, nseq->maxvalue);
-               if (!sql_trans_sequence_restart(sql->session->tr, nseq, *val))
-                       throw(SQL,"sql.alter_seq", SQLSTATE(42000) "ALTER 
SEQUENCE: failed to restart sequence %s.%s", sname, nseq->base.name);
+               switch (sql_trans_sequence_restart(sql->session->tr, nseq, 
*val)) {
+                       case -1:
+                               throw(SQL,"sql.alter_seq",SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       case -2:
+                       case -3:
+                               throw(SQL,"sql.alter_seq",SQLSTATE(42000) 
"ALTER SEQUENCE: transaction conflict detected");
+                       case -4:
+                               throw(SQL,"sql.alter_seq",SQLSTATE(42000) 
"ALTER SEQUENCE: failed to restart sequence %s.%s", sname, nseq->base.name);
+                       default:
+                               break;
+               }
        }
        return MAL_SUCCEED;
 }
@@ -983,7 +1016,15 @@ alter_table(Client cntxt, mvc *sql, char
                                                throw(SQL,"sql.alter_table", 
SQLSTATE(40000) "NOT NULL CONSTRAINT: cannot change NOT NULL CONSTRAINT for 
column '%s' as its part of the PRIMARY KEY\n", c->base.name);
                                }
                        }
-                       mvc_null(sql, nc, c->null);
+                       switch (mvc_null(sql, nc, c->null)) {
+                               case -1:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(42000) "NOT NULL CONSTRAINT: transaction conflict detected");
+                               default:
+                                       break;
+                       }
                        /* for non empty check for nulls */
                        sqlstore *store = sql->session->tr->store;
                        if (c->null == 0) {
@@ -996,13 +1037,30 @@ alter_table(Client cntxt, mvc *sql, char
                                        throw(SQL,"sql.alter_table", 
SQLSTATE(40002) "ALTER TABLE: NOT NULL constraint violated for column %s.%s", 
c->t->base.name, c->base.name);
                        }
                }
-               if (c->def != nc->def)
-                       mvc_default(sql, nc, c->def);
+               if (c->def != nc->def) {
+                       switch (mvc_default(sql, nc, c->def)) {
+                               case -1:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(42000) "DEFAULT: transaction conflict detected");
+                               default:
+                                       break;
+                       }
+               }
 
                if (c->storage_type != nc->storage_type) {
                        if (c->t->access == TABLE_WRITABLE)
                                throw(SQL,"sql.alter_table", SQLSTATE(40002) 
"ALTER TABLE: SET STORAGE for column %s.%s only allowed on READ or INSERT ONLY 
tables", c->t->base.name, c->base.name);
-                       mvc_storage(sql, nc, c->storage_type);
+                       switch (mvc_storage(sql, nc, c->storage_type)) {
+                               case -1:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                               case -2:
+                               case -3:
+                                       throw(SQL,"sql.alter_table", 
SQLSTATE(42000) "ALTER TABLE: SET STORAGE transaction conflict detected");
+                               default:
+                                       break;
+                       }
                }
        }
        /* handle new columns */
@@ -1012,8 +1070,15 @@ alter_table(Client cntxt, mvc *sql, char
 
                if (c->base.deleted) /* skip */
                        continue;
-               if (mvc_copy_column(sql, nt, c) == NULL)
-                       throw(SQL,"sql.alter_table", SQLSTATE(40002) "ALTER 
TABLE: Failed to create column %s.%s", c->t->base.name, c->base.name);
+               switch (mvc_copy_column(sql, nt, c, NULL)) {
+                       case -1:
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to