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 -- [email protected]
To unsubscribe send an email to [email protected]