Changeset: 7d3d34a7686b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/7d3d34a7686b
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_upgrades.c
sql/backends/monet5/sql_user.c
sql/server/rel_psm.c
sql/server/rel_schema.c
sql/server/sql_env.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
sql/storage/sql_storage.h
sql/storage/store.c
Branch: Jul2021
Log Message:
Check results from storage calls for debugging purposes.
I ran the TestWeb multiple times.
diffs (truncated from 2321 to 300 lines):
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
@@ -416,7 +416,7 @@ create_table_or_view(mvc *sql, char *sna
}
}
check = sql_trans_set_partition_table(sql->session->tr, nt);
- if (check == -1) {
+ if (check == -4) {
sql->sa = osa;
throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE TABLE: %s_%s:
the partition's expression is too long", s->base.name, t->base.name);
} else if (check) {
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
@@ -555,41 +555,46 @@ create_trigger(mvc *sql, char *sname, ch
break;
}
}
- if ((tri = mvc_create_trigger(sql, t, triggername, time, orientation,
event, old_name, new_name, condition, query))) {
- char *buf;
- sql_rel *r = NULL;
- sql_allocator *sa = sql->sa;
+ switch (mvc_create_trigger(&tri, sql, t, triggername, time,
orientation, event, old_name, new_name, condition, query)) {
+ case -1:
+ throw(SQL,"sql.create_trigger", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ case -2:
+ case -3:
+ throw(SQL,"sql.create_trigger", SQLSTATE(42000) "%s:
transaction conflict detected", base);
+ default: {
+ char *buf;
+ sql_rel *r = NULL;
+ sql_allocator *sa = sql->sa;
- if (!(sql->sa = sa_create(sql->pa))) {
- sql->sa = sa;
- throw(SQL, "sql.create_trigger", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- }
- if (!(buf = sa_strdup(sql->sa, query))) {
- sa_destroy(sql->sa);
- sql->sa = sa;
- throw(SQL, "sql.create_trigger", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
- }
- r = rel_parse(sql, s, buf, m_deps);
- if (r)
- r = sql_processrelation(sql, r, 0, 0);
- if (r) {
- list *blist = rel_dependencies(sql, r);
- if (mvc_create_dependencies(sql, blist, tri->base.id,
TRIGGER_DEPENDENCY)) {
+ if (!(sql->sa = sa_create(sql->pa))) {
+ sql->sa = sa;
+ throw(SQL, "sql.create_trigger",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
+ if (!(buf = sa_strdup(sql->sa, query))) {
sa_destroy(sql->sa);
sql->sa = sa;
throw(SQL, "sql.create_trigger",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
+ r = rel_parse(sql, s, buf, m_deps);
+ if (r)
+ r = sql_processrelation(sql, r, 0, 0);
+ if (r) {
+ list *blist = rel_dependencies(sql, r);
+ if (mvc_create_dependencies(sql, blist,
tri->base.id, TRIGGER_DEPENDENCY)) {
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ throw(SQL, "sql.create_trigger",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ }
+ }
+ sa_destroy(sql->sa);
+ sql->sa = sa;
+ if (!r) {
+ if (strlen(sql->errstr) > 6 && sql->errstr[5]
== '!')
+ throw(SQL, "sql.create_trigger", "%s",
sql->errstr);
+ else
+ throw(SQL, "sql.create_trigger",
SQLSTATE(42000) "%s", sql->errstr);
+ }
}
- sa_destroy(sql->sa);
- sql->sa = sa;
- if (!r) {
- if (strlen(sql->errstr) > 6 && sql->errstr[5] == '!')
- throw(SQL, "sql.create_trigger", "%s",
sql->errstr);
- else
- throw(SQL, "sql.create_trigger",
SQLSTATE(42000) "%s", sql->errstr);
- }
- } else {
- throw(SQL,"sql.create_trigger", SQLSTATE(42000) "%s:
transaction conflict detected", base);
}
return MAL_SUCCEED;
}
@@ -955,7 +960,7 @@ create_func(mvc *sql, char *sname, char
sql_func *nf;
sql_subfunc *sf;
sql_schema *s = NULL;
- int clientid = sql->clientid, res = 0;
+ int clientid = sql->clientid;
char *F = NULL, *fn = NULL, *base = replace ? "CREATE OR REPLACE" :
"CREATE";
FUNC_TYPE_STR(f->type, F, fn)
@@ -1008,7 +1013,7 @@ create_func(mvc *sql, char *sname, char
if (mvc_check_dependency(sql, sff->base.id,
!IS_PROC(sff) ? FUNC_DEPENDENCY : PROC_DEPENDENCY, NULL))
throw(SQL,"sql.create_func", SQLSTATE(42000)
"%s %s: there are database objects dependent on %s %s;", base, F, fn,
sff->base.name);
- switch ((res = mvc_drop_func(sql, s, sff, 0))) {
+ switch (mvc_drop_func(sql, s, sff, 0)) {
case -1:
throw(SQL,"sql.create_func",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
case -2:
@@ -1023,8 +1028,15 @@ create_func(mvc *sql, char *sname, char
}
}
- if (!(nf = mvc_create_func(sql, NULL, s, f->base.name, f->ops, f->res,
f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg, f->system)))
- throw(SQL,"sql.create_func", SQLSTATE(42000) "%s %s:
transaction conflict detected", base, F);
+ switch (mvc_create_func(&nf, sql, NULL, s, f->base.name, f->ops,
f->res, f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg,
f->system)) {
+ case -1:
+ throw(SQL,"sql.create_func", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ case -2:
+ case -3:
+ throw(SQL,"sql.create_func", SQLSTATE(42000) "%s %s:
transaction conflict detected", base, F);
+ default:
+ break;
+ }
switch (nf->lang) {
case FUNC_LANG_INT:
case FUNC_LANG_MAL: /* shouldn't be reachable, but leave it here */
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -3508,12 +3508,15 @@ SQLupgrades(Client c, mvc *m)
sqlstore *store = m->session->tr->store;
if (f && sql_privilege(m, ROLE_PUBLIC, f->func->base.id, PRIV_EXECUTE)
!= PRIV_EXECUTE) {
sql_table *privs = find_sql_table(m->session->tr, s,
"privileges");
- int pub = ROLE_PUBLIC, p = PRIV_EXECUTE, zero = 0;
+ int pub = ROLE_PUBLIC, p = PRIV_EXECUTE, zero = 0, res;
- store->table_api.table_insert(m->session->tr, privs,
&f->func->base.id, &pub, &p, &zero, &zero);
+ if ((res = store->table_api.table_insert(m->session->tr, privs,
&f->func->base.id, &pub, &p, &zero, &zero)) != LOG_OK) {
+ TRC_CRITICAL(SQL_PARSER, "Privilege creation during
upgrade failed\n");
+ GDKfree(prev_schema);
+ return -1;
+ }
}
-
if (sql_bind_func(m, s->base.name, "dependencies_schemas_on_users",
NULL, NULL, F_UNION)
&& sql_bind_func(m, s->base.name, "dependencies_owners_on_schemas",
NULL, NULL, F_UNION)
&& sql_bind_func(m, s->base.name, "dependencies_tables_on_views",
NULL, NULL, F_UNION)
diff --git a/sql/backends/monet5/sql_user.c b/sql/backends/monet5/sql_user.c
--- a/sql/backends/monet5/sql_user.c
+++ b/sql/backends/monet5/sql_user.c
@@ -279,6 +279,7 @@ monet5_create_privileges(ptr _mvc, sql_s
mvc *m = (mvc *) _mvc;
sqlid schema_id = 0;
list *res, *ops;
+ sql_func *f;
/* create the authorisation related tables */
t = mvc_create_table(m, s, "db_user_info", tt_table, 1, SQL_PERSIST, 0,
-1, 0);
@@ -295,7 +296,7 @@ monet5_create_privileges(ptr _mvc, sql_s
ops = sa_list(m->sa);
/* following funcion returns a table (single column) of user names
with the approriate scenario (sql) */
- mvc_create_func(m, NULL, s, "db_users", ops, res, F_UNION,
FUNC_LANG_SQL, "sql", "db_users", "CREATE FUNCTION db_users () RETURNS TABLE(
name varchar(2048)) EXTERNAL NAME sql.db_users;", FALSE, FALSE, TRUE);
+ mvc_create_func(&f, m, NULL, s, "db_users", ops, res, F_UNION,
FUNC_LANG_SQL, "sql", "db_users", "CREATE FUNCTION db_users () RETURNS TABLE(
name varchar(2048)) EXTERNAL NAME sql.db_users;", FALSE, FALSE, TRUE);
t = mvc_init_create_view(m, s, "users",
"create view sys.users as select u.\"name\" as
\"name\", "
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -940,7 +940,15 @@ rel_create_func(sql_query *query, dlist
sql->params = NULL;
if (create) {
- f = mvc_create_func(sql, sql->sa, s, fname, l, restype,
type, lang, mod, fname, lang_body, (type == F_LOADER)?TRUE:FALSE, vararg,
FALSE);
+ switch (mvc_create_func(&f, sql, sql->sa, s, fname, l,
restype, type, lang, mod, fname, lang_body, (type == F_LOADER)?TRUE:FALSE,
vararg, FALSE)) {
+ case -1:
+ return sql_error(sql, 01,
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ case -2:
+ case -3:
+ return sql_error(sql, 01,
SQLSTATE(42000) "CREATE %s: transaction conflict detected", F);
+ default:
+ break;
+ }
} else if (!sf) {
return sql_error(sql, 01, SQLSTATE(42000) "CREATE %s:
%s function %s.%s not bound", F, slang, s->base.name, fname);
}
@@ -951,7 +959,16 @@ rel_create_func(sql_query *query, dlist
if (create) { /* needed for recursive functions */
q = query_cleaned(sql->ta, q);
- sql->forward = f = mvc_create_func(sql, sql->sa, s,
fname, l, restype, type, lang, sql_shared_module_name, q, q, FALSE, vararg,
FALSE);
+ switch (mvc_create_func(&f, sql, sql->sa, s, fname, l,
restype, type, lang, sql_shared_module_name, q, q, FALSE, vararg, FALSE)) {
+ case -1:
+ return sql_error(sql, 01,
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ case -2:
+ case -3:
+ return sql_error(sql, 01,
SQLSTATE(42000) "CREATE %s: transaction conflict detected", F);
+ default:
+ break;
+ }
+ sql->forward = f;
} else if (!sf) {
return sql_error(sql, 01, SQLSTATE(42000) "CREATE %s:
SQL function %s.%s not bound", F, s->base.name, fname);
}
@@ -981,7 +998,15 @@ rel_create_func(sql_query *query, dlist
sql->params = NULL;
if (create) {
q = query_cleaned(sql->ta, q);
- f = mvc_create_func(sql, sql->sa, s, fname, l, restype,
type, lang, fmod, fnme, q, FALSE, vararg, FALSE);
+ switch (mvc_create_func(&f, sql, sql->sa, s, fname, l,
restype, type, lang, fmod, fnme, q, FALSE, vararg, FALSE)) {
+ case -1:
+ return sql_error(sql, 01,
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ case -2:
+ case -3:
+ return sql_error(sql, 01,
SQLSTATE(42000) "CREATE %s: transaction conflict detected", F);
+ default:
+ break;
+ }
} else if (!sf) {
return sql_error(sql, 01, SQLSTATE(42000) "CREATE %s:
external name %s.%s not bound (%s.%s)", F, fmod, fnme, s->base.name, fname );
} else {
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -324,15 +324,38 @@ column_constraint_type(mvc *sql, const c
(void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT
%s: key %s already exists", (kt == pkey) ? "PRIMARY KEY" : "UNIQUE", name);
return res;
}
- if (!(k = (sql_key*)mvc_create_ukey(sql, t, name, kt))) {
- (void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT
%s: transaction conflict detected", (kt == pkey) ? "PRIMARY KEY" : "UNIQUE");
- return res;
+ switch (mvc_create_ukey(&k, sql, t, name, kt)) {
+ case -1:
+ (void) sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return res;
+ case -2:
+ case -3:
+ (void) sql_error(sql, 02, SQLSTATE(42000)
"CONSTRAINT %s: transaction conflict detected", (kt == pkey) ? "PRIMARY KEY" :
"UNIQUE");
+ return res;
+ default:
+ break;
}
-
- mvc_create_kc(sql, k, cs);
- if (!mvc_create_ukey_done(sql, k)) {
- (void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT
%s: transaction conflict detected", (kt == pkey) ? "PRIMARY KEY" : "UNIQUE");
- return res;
+ switch (mvc_create_kc(sql, k, cs)) {
+ case -1:
+ (void) sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return res;
+ case -2:
+ case -3:
+ (void) sql_error(sql, 02, SQLSTATE(42000)
"CONSTRAINT %s: transaction conflict detected", (kt == pkey) ? "PRIMARY KEY" :
"UNIQUE");
+ return res;
+ default:
+ break;
+ }
+ switch (mvc_create_ukey_done(sql, k)) {
+ case -1:
+ (void) sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return res;
+ case -2:
+ case -3:
+ (void) sql_error(sql, 02, SQLSTATE(42000)
"CONSTRAINT %s: transaction conflict detected", (kt == pkey) ? "PRIMARY KEY" :
"UNIQUE");
+ return res;
+ default:
+ break;
}
res = SQL_OK;
} break;
@@ -387,11 +410,28 @@ column_constraint_type(mvc *sql, const c
cs->base.name, tp1,
rk->type == pkey ? "PRIMARY" : "UNIQUE", tp2);
return res;
}
- if (!(fk = mvc_create_fkey(sql, t, name, fkey, rk, ref_actions
& 255, (ref_actions>>8) & 255))) {
- (void) sql_error(sql, 02, SQLSTATE(42000) "CONSTRAINT
FOREIGN KEY: transaction conflict detected");
- return res;
+ switch (mvc_create_fkey(&fk, sql, t, name, fkey, rk,
ref_actions & 255, (ref_actions>>8) & 255)) {
+ case -1:
+ (void) sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return res;
+ case -2:
+ case -3:
+ (void) sql_error(sql, 02, SQLSTATE(42000)
"CONSTRAINT FOREIGN KEY: transaction conflict detected");
+ return res;
+ default:
+ break;
}
- mvc_create_fkc(sql, fk, cs);
+ switch (mvc_create_fkc(sql, fk, cs)) {
+ case -1:
+ (void) sql_error(sql, 02, SQLSTATE(HY013)
MAL_MALLOC_FAIL);
+ return res;
+ case -2:
+ case -3:
+ (void) sql_error(sql, 02, SQLSTATE(42000)
"CONSTRAINT FOREIGN KEY: transaction conflict detected");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list