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