Changeset: 9a9e97141d65 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/9a9e97141d65 Modified Files: sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_user.c sql/backends/monet5/vaults/fits/fits.c sql/server/sql_mvc.c sql/server/sql_privileges.c sql/storage/store.c sql/storage/store_dependency.c Branch: Jan2022 Log Message:
Merge with Jul2021 branch. diffs (299 lines): 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 @@ -1180,6 +1180,8 @@ alter_table(Client cntxt, mvc *sql, char if (c->null == 0) { const void *nilptr = ATOMnilptr(c->type.type->localtype); rids *nils = store->table_api.rids_select(sql->session->tr, nc, nilptr, NULL, NULL); + if (!nils) + throw(SQL,"sql.alter_table", SQLSTATE(HY013) MAL_MALLOC_FAIL); int has_nils = !is_oid_nil(store->table_api.rids_next(nils)); store->table_api.rids_destroy(nils); 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 @@ -537,7 +537,8 @@ monet5_schema_user_dependencies(ptr _tra /* select all authorization ids */ A = store->table_api.rids_select(tr, auth_name, NULL, NULL); /* join all authorization with the selected users */ - A = store->table_api.rids_join(tr, A, auth_name, U, users_name); + if (A && U) + A = store->table_api.rids_join(tr, A, auth_name, U, users_name); store->table_api.rids_destroy(U); return A; } 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 @@ -239,6 +239,8 @@ str FITSexportTable(Client cntxt, MalBlk col = mvc_bind_column(m, column, "table_id"); rs = store->table_api.rids_select(m->session->tr, col, (void *) fid, (void *) fid, NULL); + if (!rs) + throw(MAL, "fits.exporttable", SQLSTATE(HY013) MAL_MALLOC_FAIL); GDKfree(fid); while ((rid = store->table_api.rids_next(rs)), !is_oid_nil(rid)) diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c --- a/sql/server/sql_mvc.c +++ b/sql/server/sql_mvc.c @@ -114,11 +114,12 @@ mvc_fix_depend(mvc *m, sql_column *depid for (int i = 0; i < n; i++) { rs = store->table_api.rids_select(m->session->tr, depids, &v[i].oldid, &v[i].oldid, NULL); - while ((rid = store->table_api.rids_next(rs)), !is_oid_nil(rid)) { - store->table_api.column_update_value(m->session->tr, depids, - rid, &v[i].newid); + if (rs) { + while ((rid = store->table_api.rids_next(rs)), !is_oid_nil(rid)) { + store->table_api.column_update_value(m->session->tr, depids, rid, &v[i].newid); + } + store->table_api.rids_destroy(rs); } - store->table_api.rids_destroy(rs); } } @@ -290,7 +291,7 @@ mvc_init(int debug, store_type store_tpe for (int i = 0; i < 9; i++) { sql_column *col = NULL; - + mvc_create_column_(&col, m, t, tview[i].name, tview[i].type, tview[i].digits); if (col == NULL) { mvc_destroy(m); diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c --- a/sql/server/sql_privileges.c +++ b/sql/server/sql_privileges.c @@ -271,7 +271,8 @@ sql_delete_priv(mvc *sql, sqlid auth_id, /* select privileges of this auth_id, privilege, obj_id */ A = store->table_api.rids_select(tr, priv_auth, &auth_id, &auth_id, priv_priv, &privilege, &privilege, priv_obj, &obj_id, &obj_id, NULL ); - + if (!A) + throw(SQL, "sql.delete_prive", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(A)) log_res = store->table_api.table_delete(tr, privs, rid); @@ -440,6 +441,8 @@ sql_drop_role(mvc *m, str auth) /* select user roles of this role_id */ A = store->table_api.rids_select(tr, find_sql_column(user_roles, "role_id"), &role_id, &role_id, NULL); + if (!A) + throw(SQL, "sql.drop_role", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(A)) log_res = store->table_api.table_delete(tr, user_roles, rid); @@ -785,7 +788,7 @@ sql_create_user(mvc *sql, char *user, ch throw(SQL,"sql.create_user", SQLSTATE(42M31) "Insufficient privileges to create user '%s'", user); if (backend_find_user(sql, user) >= 0) - throw(SQL,"sql.create_user", SQLSTATE(42M31) "CREATE USER: user '%s' already exists", user); + throw(SQL,"sql.create_user", SQLSTATE(42M31) "CREATE USER: user '%s' already exists", user); if (!(s = find_sql_schema(sql->session->tr, schema))) throw(SQL,"sql.create_user", SQLSTATE(3F000) "CREATE USER: no such schema '%s'", schema); @@ -842,6 +845,8 @@ sql_drop_granted_users(mvc *sql, sqlid u /* select privileges of this user_id */ A = store->table_api.rids_select(tr, find_sql_column(privs, "auth_id"), &user_id, &user_id, NULL); + if (!A) + throw(SQL, "sql.drop_user", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(A)) log_res = store->table_api.table_delete(tr, privs, rid); @@ -851,6 +856,8 @@ sql_drop_granted_users(mvc *sql, sqlid u /* select privileges granted by this user_id */ A = store->table_api.rids_select(tr, find_sql_column(privs, "grantor"), &user_id, &user_id, NULL); + if (!A) + throw(SQL, "sql.drop_user", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(A)) log_res = store->table_api.table_delete(tr, privs, rid); @@ -867,6 +874,8 @@ sql_drop_granted_users(mvc *sql, sqlid u /* select user roles of this user_id */ A = store->table_api.rids_select(tr, find_sql_column(user_roles, "login_id"), &user_id, &user_id, NULL); + if (!A) + throw(SQL, "sql.drop_user", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(A)) log_res = store->table_api.table_delete(tr, user_roles, rid); @@ -878,6 +887,8 @@ sql_drop_granted_users(mvc *sql, sqlid u /* select users created by this user_id */ A = store->table_api.rids_select(tr, find_sql_column(auths, "grantor"), &user_id, &user_id, NULL); + if (!A) + throw(SQL, "sql.drop_user", SQLSTATE(HY013) MAL_MALLOC_FAIL); /* remove them and continue the deletion */ for(rid = store->table_api.rids_next(A); !is_oid_nil(rid) && log_res == LOG_OK && msg; rid = store->table_api.rids_next(A)) { sqlid nuid = store->table_api.column_find_sqlid(tr, find_sql_column(auths, "id"), rid); diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -573,6 +573,8 @@ load_range_partition(sql_trans *tr, sql_ sqlstore *store = tr->store; rs = store->table_api.rids_select(tr, find_sql_column(ranges, "table_id"), &pt->member, &pt->member, NULL); + if (!rs) + return -1; if ((rid = store->table_api.rids_next(rs)) != oid_nil) { ptr cbat; const char *v; @@ -600,6 +602,8 @@ load_value_partition(sql_trans *tr, sql_ oid rid; rids *rs = store->table_api.rids_select(tr, find_sql_column(values, "table_id"), &pt->member, &pt->member, NULL); + if (!rs) + return -1; vals = SA_LIST(tr->sa, (fdestroy) &part_value_destroy); if (!vals) { store->table_api.rids_destroy(rs); @@ -1088,6 +1092,10 @@ load_schema(sql_trans *tr, res_table *rt type_schema = find_sql_column(types, "schema_id"); type_id = find_sql_column(types, "id"); rs = store->table_api.rids_select(tr, type_schema, &s->base.id, &s->base.id, type_id, &tmpid, NULL, NULL); + if (!rs) { + schema_destroy(store, s); + return NULL; + } for (oid rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { sql_type *t = load_type(tr, s, rid); if (os_add(s->types, tr, t->base.name, &t->base)) { @@ -1126,11 +1134,20 @@ load_schema(sql_trans *tr, res_table *rt func_schema = find_sql_column(funcs, "schema_id"); func_id = find_sql_column(funcs, "id"); rs = store->table_api.rids_select(tr, func_schema, &s->base.id, &s->base.id, func_id, &tmpid, NULL, NULL); + if (!rs) { + schema_destroy(store, s); + return NULL; + } if (rs && !store->table_api.rids_empty(rs)) { sql_table *args = find_sql_table(tr, syss, "args"); sql_column *arg_func_id = find_sql_column(args, "func_id"); sql_column *arg_number = find_sql_column(args, "number"); subrids *nrs = store->table_api.subrids_create(tr, rs, func_id, arg_func_id, arg_number); + if (!nrs) { + store->table_api.rids_destroy(rs); + schema_destroy(store, s); + return NULL; + } sqlid fid; sql_func *f; @@ -1149,6 +1166,11 @@ load_schema(sql_trans *tr, res_table *rt } /* Handle all procedures without arguments (no args) */ rs = store->table_api.rids_diff(tr, rs, func_id, nrs, arg_func_id); + if (!rs) { + store->table_api.subrids_destroy(nrs); + schema_destroy(store, s); + return NULL; + } for (oid rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { fid = store->table_api.column_find_sqlid(tr, func_id, rid); f = load_func(tr, s, fid, NULL); @@ -1173,6 +1195,10 @@ load_schema(sql_trans *tr, res_table *rt seq_schema = find_sql_column(seqs, "schema_id"); seq_id = find_sql_column(seqs, "id"); rs = store->table_api.rids_select(tr, seq_schema, &s->base.id, &s->base.id, seq_id, &tmpid, NULL, NULL); + if (!rs) { + schema_destroy(store, s); + return NULL; + } for (oid rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { sql_sequence *seq = load_seq(tr, s, rid); if (os_add(s->seqs, tr, seq->base.name, &seq->base)) { @@ -1193,7 +1219,12 @@ load_schema(sql_trans *tr, res_table *rt sql_column *mt_sub = find_sql_column(objects, "sub"); rids *rs = store->table_api.rids_select(tr, mt_nr, &t->base.id, &t->base.id, NULL); - rs = store->table_api.rids_orderby(tr, rs, mt_sub); + if (rs) + rs = store->table_api.rids_orderby(tr, rs, mt_sub); + if (!rs) { + schema_destroy(store, s); + return NULL; + } for (oid rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { sql_part *pt = load_part(tr, t, rid); if (isRangePartitionTable(t)) { @@ -4549,6 +4580,8 @@ sys_drop_part(sql_trans *tr, sql_part *p } else if (isListPartitionTable(mt)) { sql_table *values = find_sql_table(tr, syss, "value_partitions"); rids *rs = store->table_api.rids_select(tr, find_sql_column(values, "table_id"), &pt->member, &pt->member, NULL); + if (!rs) + return -1; for (oid rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { if ((res = store->table_api.table_delete(tr, values, rid))) { store->table_api.rids_destroy(rs); @@ -4631,6 +4664,8 @@ sys_drop_table(sql_trans *tr, sql_table sql_table *partitions = find_sql_table(tr, syss, "table_partitions"); sql_column *pcols = find_sql_column(partitions, "table_id"); rids *rs = store->table_api.rids_select(tr, pcols, &t->base.id, &t->base.id, NULL); + if (!rs) + return -1; oid poid; if ((poid = store->table_api.rids_next(rs)) != oid_nil) { if ((res = store->table_api.table_delete(tr, partitions, poid))) { @@ -5423,6 +5458,8 @@ sql_trans_add_value_partition(sql_trans p = (sql_part*) n->data; rs = store->table_api.rids_select(tr, find_sql_column(values, "table_id"), &pt->base.id, &pt->base.id, NULL); + if (!rs) + return -1; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { if ((res = store->table_api.table_delete(tr, values, rid))) { /* eliminate the old values */ store->table_api.rids_destroy(rs); diff --git a/sql/storage/store_dependency.c b/sql/storage/store_dependency.c --- a/sql/storage/store_dependency.c +++ b/sql/storage/store_dependency.c @@ -63,6 +63,8 @@ sql_trans_drop_dependencies(sql_trans* t int log_res = LOG_OK; rs = store->table_api.rids_select(tr, dep_dep_id, &depend_id, &depend_id, NULL); + if (!rs) + return LOG_ERR; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(rs)) log_res = store->table_api.table_delete(tr, deps, rid); store->table_api.rids_destroy(rs); @@ -85,6 +87,8 @@ sql_trans_drop_dependency(sql_trans* tr, int log_res = LOG_OK; rs = store->table_api.rids_select(tr, dep_obj_id, &obj_id, &obj_id, dep_dep_id, &depend_id, &depend_id, dep_dep_type, &dtype, &dtype, NULL); + if (!rs) + return LOG_ERR; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid) && log_res == LOG_OK; rid = store->table_api.rids_next(rs)) log_res = store->table_api.table_delete(tr, deps, rid); store->table_api.rids_destroy(rs); @@ -112,6 +116,8 @@ sql_trans_get_dependencies(sql_trans* tr dep_dep_type = find_sql_column(deps, "depend_type"); rs = store->table_api.rids_select(tr, dep_id, &id, &id, NULL); + if (!rs) + return NULL; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)){ if (!(v = store->table_api.column_find_value(tr, dep_dep_id, rid))) { list_destroy(dep_list); @@ -140,6 +146,8 @@ sql_trans_get_dependencies(sql_trans* tr depend_type = TRIGGER_DEPENDENCY; rs = store->table_api.rids_select(tr, table_id, &id, &id, NULL); + if (!rs) + return NULL; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { if (!(v = store->table_api.column_find_value(tr, tri_id, rid))) { list_destroy(dep_list); @@ -266,7 +274,8 @@ sql_trans_owner_schema_dependencies(sql_ return NULL; rs = store->table_api.rids_select(tr, schema_owner, &owner_id, &owner_id, NULL); - + if (!rs) + return NULL; for (rid = store->table_api.rids_next(rs); !is_oid_nil(rid); rid = store->table_api.rids_next(rs)) { if (!(v = store->table_api.column_find_value(tr, schema_id, rid))) { list_destroy(l); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org