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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list