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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to