Changeset: bc5651431a1f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bc5651431a1f
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_user.c
        sql/backends/monet5/vaults/fits/fits.c
        sql/server/rel_schema.c
        sql/server/rel_updates.c
        sql/server/sql_env.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_privileges.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        tools/monetdbe/monetdbe.c
Branch: Jul2021
Log Message:

Finished storage calls cleanup with more testing.


diffs (truncated from 950 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
@@ -340,11 +340,15 @@ create_table_or_view(mvc *sql, char *sna
        if (temp == SQL_DECLARED_TABLE && ol_length(t->keys))
                throw(SQL, "sql.catalog", SQLSTATE(42000) "%s %s: '%s' cannot 
have constraints", action, obj, t->base.name);
 
-       nt = sql_trans_create_table(sql->session->tr, s, tname, t->query, 
t->type, t->system, temp, t->commit_action,
-                                                               t->sz, 
t->properties);
-       if (!nt)
-               throw(SQL, "sql.catalog", SQLSTATE(42000) "%s %s: '%s' name 
conflicts", action, obj, t->base.name);
-
+       switch (sql_trans_create_table(&nt, sql->session->tr, s, tname, 
t->query, t->type, t->system, temp, t->commit_action, t->sz, t->properties)) {
+               case -1:
+                       throw(SQL, "sql.catalog", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               case -2:
+               case -3:
+                       throw(SQL, "sql.catalog", SQLSTATE(42000) "%s %s: '%s' 
name conflicts", action, obj, t->base.name);
+               default:
+                       break;
+       }
        osa = sql->sa;
        sql->sa = sql->ta;
        /* first check default values */
@@ -558,8 +562,8 @@ str
 create_table_from_emit(Client cntxt, char *sname, char *tname, sql_emit_col 
*columns, size_t ncols)
 {
        size_t i;
-       sql_table *t;
-       sql_schema *s;
+       sql_table *t = NULL;
+       sql_schema *s = NULL;
        mvc *sql = NULL;
        str msg = MAL_SUCCEED;
 
@@ -574,8 +578,15 @@ create_table_from_emit(Client cntxt, cha
                throw(SQL, "sql.catalog", SQLSTATE(3F000) "CREATE TABLE: no 
such schema '%s'", sname);
        if (!mvc_schema_privs(sql, s))
                throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE TABLE: Access 
denied for %s to schema '%s'", get_string_global_var(sql, "current_user"), 
s->base.name);
-       if (!(t = mvc_create_table(sql, s, tname, tt_table, 0, 
SQL_DECLARED_TABLE, CA_COMMIT, -1, 0)))
-               throw(SQL, "sql.catalog", SQLSTATE(3F000) "CREATE TABLE: could 
not create table '%s'", tname);
+       switch (mvc_create_table(&t, sql, s, tname, tt_table, 0, 
SQL_DECLARED_TABLE, CA_COMMIT, -1, 0)) {
+               case -1:
+                       throw(SQL, "sql.catalog", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               case -2:
+               case -3:
+                       throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: transaction conflict detected");
+               default:
+                       break;
+       }
 
        for (i = 0; i < ncols; i++) {
                BAT *b = columns[i].b;
@@ -594,8 +605,15 @@ create_table_from_emit(Client cntxt, cha
 
                if (columns[i].name && columns[i].name[0] == '%')
                        throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: generated labels not allowed in column names, use an alias instead");
-               if (!(col = mvc_create_column(sql, t, columns[i].name, &tpe)))
-                       throw(SQL, "sql.catalog", SQLSTATE(3F000) "CREATE 
TABLE: could not create column %s", columns[i].name);
+               switch (mvc_create_column(&col, sql, t, columns[i].name, &tpe)) 
{
+                       case -1:
+                               throw(SQL, "sql.catalog", SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                       case -2:
+                       case -3:
+                               throw(SQL, "sql.catalog", SQLSTATE(42000) 
"CREATE TABLE: transaction conflict detected");
+                       default:
+                               break;
+               }
        }
        if ((msg = create_table_or_view(sql, sname, t->base.name, t, 0, 0)) != 
MAL_SUCCEED)
                return msg;
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
@@ -275,18 +275,19 @@ static void
 monet5_create_privileges(ptr _mvc, sql_schema *s)
 {
        sql_schema *sys;
-       sql_table *t, *uinfo;
+       sql_table *t = NULL, *uinfo = NULL;
+       sql_column *col = NULL;
        mvc *m = (mvc *) _mvc;
        sqlid schema_id = 0;
        list *res, *ops;
-       sql_func *f;
+       sql_func *f = NULL;
 
        /* create the authorisation related tables */
-       t = mvc_create_table(m, s, "db_user_info", tt_table, 1, SQL_PERSIST, 0, 
-1, 0);
-       mvc_create_column_(m, t, "name", "varchar", 1024);
-       mvc_create_column_(m, t, "fullname", "varchar", 2048);
-       mvc_create_column_(m, t, "default_schema", "int", 9);
-       mvc_create_column_(m, t, "schema_path", "clob", 0);
+       mvc_create_table(&t, m, s, "db_user_info", tt_table, 1, SQL_PERSIST, 0, 
-1, 0);
+       mvc_create_column_(&col, m, t, "name", "varchar", 1024);
+       mvc_create_column_(&col, m, t, "fullname", "varchar", 2048);
+       mvc_create_column_(&col, m, t, "default_schema", "int", 9);
+       mvc_create_column_(&col, m, t, "schema_path", "clob", 0);
        uinfo = t;
 
        res = sa_list(m->sa);
@@ -309,10 +310,10 @@ monet5_create_privileges(ptr _mvc, sql_s
                return ;
        }
 
-       mvc_create_column_(m, t, "name", "varchar", 2048);
-       mvc_create_column_(m, t, "fullname", "varchar", 2048);
-       mvc_create_column_(m, t, "default_schema", "int", 9);
-       mvc_create_column_(m, t, "schema_path", "clob", 0);
+       mvc_create_column_(&col, m, t, "name", "varchar", 2048);
+       mvc_create_column_(&col, m, t, "fullname", "varchar", 2048);
+       mvc_create_column_(&col, m, t, "default_schema", "int", 9);
+       mvc_create_column_(&col, m, t, "schema_path", "clob", 0);
 
        sys = find_sql_schema(m->session->tr, "sys");
        schema_id = sys->base.id;
diff --git a/sql/backends/monet5/vaults/fits/fits.c 
b/sql/backends/monet5/vaults/fits/fits.c
--- a/sql/backends/monet5/vaults/fits/fits.c
+++ b/sql/backends/monet5/vaults/fits/fits.c
@@ -38,48 +38,49 @@ FITSinitCatalog(mvc *m)
 {
        sql_schema *sch;
        sql_table *fits_tp, *fits_fl, *fits_tbl, *fits_col;
+       sql_column *col = NULL;
 
        sch = mvc_bind_schema(m, "sys");
 
        fits_fl = mvc_bind_table(m, sch, "fits_files");
        if (fits_fl == NULL) {
-               fits_fl = mvc_create_table(m, sch, "fits_files", tt_table, 0, 
SQL_PERSIST, 0, 2, 0);
-               mvc_create_column_(m, fits_fl, "id", "int", 32);
-               mvc_create_column_(m, fits_fl, "name", "varchar", 80);
+               mvc_create_table(&fits_fl, m, sch, "fits_files", tt_table, 0, 
SQL_PERSIST, 0, 2, 0);
+               mvc_create_column_(&col, m, fits_fl, "id", "int", 32);
+               mvc_create_column_(&col, m, fits_fl, "name", "varchar", 80);
        }
 
        fits_tbl = mvc_bind_table(m, sch, "fits_tables");
        if (fits_tbl == NULL) {
-               fits_tbl = mvc_create_table(m, sch, "fits_tables", tt_table, 0, 
SQL_PERSIST, 0, 8, 0);
-               mvc_create_column_(m, fits_tbl, "id", "int", 32);
-               mvc_create_column_(m, fits_tbl, "name", "varchar", 80);
-               mvc_create_column_(m, fits_tbl, "columns", "int", 32);
-               mvc_create_column_(m, fits_tbl, "file_id", "int", 32);
-               mvc_create_column_(m, fits_tbl, "hdu", "int", 32);
-               mvc_create_column_(m, fits_tbl, "date", "varchar", 80);
-               mvc_create_column_(m, fits_tbl, "origin", "varchar", 80);
-               mvc_create_column_(m, fits_tbl, "comment", "varchar", 80);
+               mvc_create_table(&fits_tbl, m, sch, "fits_tables", tt_table, 0, 
SQL_PERSIST, 0, 8, 0);
+               mvc_create_column_(&col, m, fits_tbl, "id", "int", 32);
+               mvc_create_column_(&col, m, fits_tbl, "name", "varchar", 80);
+               mvc_create_column_(&col, m, fits_tbl, "columns", "int", 32);
+               mvc_create_column_(&col, m, fits_tbl, "file_id", "int", 32);
+               mvc_create_column_(&col, m, fits_tbl, "hdu", "int", 32);
+               mvc_create_column_(&col, m, fits_tbl, "date", "varchar", 80);
+               mvc_create_column_(&col, m, fits_tbl, "origin", "varchar", 80);
+               mvc_create_column_(&col, m, fits_tbl, "comment", "varchar", 80);
        }
 
        fits_col = mvc_bind_table(m, sch, "fits_columns");
        if (fits_col == NULL) {
-               fits_col = mvc_create_table(m, sch, "fits_columns", tt_table, 
0, SQL_PERSIST, 0, 6, 0);
-               mvc_create_column_(m, fits_col, "id", "int", 32);
-               mvc_create_column_(m, fits_col, "name", "varchar", 80);
-               mvc_create_column_(m, fits_col, "type", "varchar", 80);
-               mvc_create_column_(m, fits_col, "units", "varchar", 80);
-               mvc_create_column_(m, fits_col, "number", "int", 32);
-               mvc_create_column_(m, fits_col, "table_id", "int", 32);
+               mvc_create_table(&fits_col, m, sch, "fits_columns", tt_table, 
0, SQL_PERSIST, 0, 6, 0);
+               mvc_create_column_(&col, m, fits_col, "id", "int", 32);
+               mvc_create_column_(&col, m, fits_col, "name", "varchar", 80);
+               mvc_create_column_(&col, m, fits_col, "type", "varchar", 80);
+               mvc_create_column_(&col, m, fits_col, "units", "varchar", 80);
+               mvc_create_column_(&col, m, fits_col, "number", "int", 32);
+               mvc_create_column_(&col, m, fits_col, "table_id", "int", 32);
        }
 
        fits_tp = mvc_bind_table(m, sch, "fits_table_properties");
        if (fits_tp == NULL) {
-               fits_tp = mvc_create_table(m, sch, "fits_table_properties", 
tt_table, 0, SQL_PERSIST, 0, 5, 0);
-               mvc_create_column_(m, fits_tp, "table_id", "int", 32);
-               mvc_create_column_(m, fits_tp, "xtension", "varchar", 80);
-               mvc_create_column_(m, fits_tp, "bitpix", "int", 32);
-               mvc_create_column_(m, fits_tp, "stilvers", "varchar", 80);
-               mvc_create_column_(m, fits_tp, "stilclas", "varchar", 80);
+               mvc_create_table(&fits_tp, m, sch, "fits_table_properties", 
tt_table, 0, SQL_PERSIST, 0, 5, 0);
+               mvc_create_column_(&col, m, fits_tp, "table_id", "int", 32);
+               mvc_create_column_(&col, m, fits_tp, "xtension", "varchar", 80);
+               mvc_create_column_(&col, m, fits_tp, "bitpix", "int", 32);
+               mvc_create_column_(&col, m, fits_tp, "stilvers", "varchar", 80);
+               mvc_create_column_(&col, m, fits_tp, "stilclas", "varchar", 80);
        }
 }
 
@@ -980,7 +981,7 @@ str FITSloadTable(Client cntxt, MalBlkPt
        /*      col = mvc_bind_column(m, fits_tbl, "columns");
           cnum = *(int*) store->table_api.column_find_value(m->session->tr, 
col, rid); */
        fits_get_num_cols(fptr, &cnum, &status);
-       tbl = mvc_create_table(m, sch, tname, tt_table, 0, SQL_PERSIST, 0, 
cnum, 0);
+       mvc_create_table(&tbl, m, sch, tname, tt_table, 0, SQL_PERSIST, 0, 
cnum, 0);
 
        // TODO: Check that the allocations succeeded
        tpcode = (int *)GDKzalloc(sizeof(int) * cnum);
@@ -989,6 +990,7 @@ str FITSloadTable(Client cntxt, MalBlkPt
        cname = (char **)GDKzalloc(sizeof(char *) * cnum);
 
        for (j = 1; j <= cnum; j++) {
+               sql_column *col = NULL;
                /*              fits_get_acolparms(fptr, j, cname, &tbcol, 
tunit, tform, &tscal, &tzero, tnull, tdisp, &status); */
                snprintf(keywrd, 80, "TTYPE%d", j);
                fits_read_key(fptr, TSTRING, keywrd, nm, NULL, &status);
@@ -1002,7 +1004,7 @@ str FITSloadTable(Client cntxt, MalBlkPt
 
                TRC_DEBUG(FITS, "%d %ld %ld - M: %s\n", tpcode[j-1], rep[j-1], 
wid[j-1], tpe.type->base.name);
 
-               mvc_create_column(m, tbl, cname[j - 1], &tpe);
+               mvc_create_column(&col, m, tbl, cname[j - 1], &tpe);
        }
 
        /* data load */
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
@@ -144,6 +144,7 @@ as_subquery(mvc *sql, sql_table *t, tabl
                        char *cname = n->data.sval;
                        sql_exp *e = m->data;
                        sql_subtype *tp = exp_subtype(e);
+                       sql_column *col = NULL;
 
                        if (tt != tt_view && cname && cname[0] == '%') {
                                sql_error(sql, 01, SQLSTATE(42000) "%s: 
generated labels not allowed in column names, use an alias instead", msg);
@@ -152,7 +153,17 @@ as_subquery(mvc *sql, sql_table *t, tabl
                                sql_error(sql, 01, SQLSTATE(42S21) "%s: 
duplicate column name %s", msg, cname);
                                return -1;
                        }
-                       mvc_create_column(sql, t, cname, tp);
+                       switch (mvc_create_column(&col, sql, t, cname, tp)) {
+                               case -1:
+                                       sql_error(sql, 01, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                                       return -1;
+                               case -2:
+                               case -3:
+                                       sql_error(sql, 01, SQLSTATE(42000) "%s: 
transaction conflict detected", msg);
+                                       return -1;
+                               default:
+                                       break;
+                       }
                }
                if (n || m) {
                        sql_error(sql, 01, SQLSTATE(21S02) "%s: number of 
columns does not match", msg);
@@ -165,6 +176,7 @@ as_subquery(mvc *sql, sql_table *t, tabl
                        sql_exp *e = m->data;
                        const char *cname = exp_name(e);
                        sql_subtype *tp = exp_subtype(e);
+                       sql_column *col = NULL;
 
                        if (tt != tt_view && cname && cname[0] == '%') {
                                sql_error(sql, 01, SQLSTATE(42000) "%s: 
generated labels not allowed in column names, use an alias instead", msg);
@@ -176,7 +188,17 @@ as_subquery(mvc *sql, sql_table *t, tabl
                                sql_error(sql, 01, SQLSTATE(42S21) "%s: 
duplicate column name %s", msg, cname);
                                return -1;
                        }
-                       mvc_create_column(sql, t, cname, tp);
+                       switch (mvc_create_column(&col, sql, t, cname, tp)) {
+                               case -1:
+                                       sql_error(sql, 01, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+                                       return -1;
+                               case -2:
+                               case -3:
+                                       sql_error(sql, 01, SQLSTATE(42000) "%s: 
transaction conflict detected", msg);
+                                       return -1;
+                               default:
+                                       break;
+                       }
                }
        }
        return 0;
@@ -185,11 +207,24 @@ as_subquery(mvc *sql, sql_table *t, tabl
 sql_table *
 mvc_create_table_as_subquery(mvc *sql, sql_rel *sq, sql_schema *s, const char 
*tname, dlist *column_spec, int temp, int commit_action, const char *action)
 {
+       sql_table *t = NULL;
        table_types tt =(temp == SQL_REMOTE)?tt_remote:
                (temp == SQL_MERGE_TABLE)?tt_merge_table:
                (temp == SQL_REPLICA_TABLE)?tt_replica_table:tt_table;
 
-       sql_table *t = mvc_create_table(sql, s, tname, tt, 0, 
SQL_DECLARED_TABLE, commit_action, -1, 0);
+       switch (mvc_create_table(&t, sql, s, tname, tt, 0, SQL_DECLARED_TABLE, 
commit_action, -1, 0)) {
+               case -1:
+                       return sql_error(sql, 02, SQLSTATE(HY013) 
MAL_MALLOC_FAIL);
+               case -2:
+               case -3:
+                       return sql_error(sql, 02, SQLSTATE(42000) "%s TABLE: 
transaction conflict detected", action);
+               case -4:
+                       return sql_error(sql, 02, SQLSTATE(42000) "%s TABLE: 
the partition's expression is too long", action);
+               case -5:
+                       return NULL;
+               default:
+                       break;
+       }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to