Changeset: edcbe78347e7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=edcbe78347e7 Modified Files: sql/storage/sql_storage.h sql/storage/store.c Branch: Nov2019 Log Message:
When a database table/column/schema gets deleteed, remove the granted privileges on it diffs (64 lines): diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h --- a/sql/storage/sql_storage.h +++ b/sql/storage/sql_storage.h @@ -472,5 +472,6 @@ extern sql_trigger *sql_trans_copy_trigg extern sql_part *sql_trans_copy_part(sql_trans *tr, sql_table *t, sql_part *pt); extern void sql_trans_drop_any_comment(sql_trans *tr, sqlid id); +extern void sql_trans_drop_obj_priv(sql_trans *tr, sqlid obj_id); #endif /*SQL_STORAGE_H */ diff --git a/sql/storage/store.c b/sql/storage/store.c --- a/sql/storage/store.c +++ b/sql/storage/store.c @@ -4694,6 +4694,7 @@ sys_drop_column(sql_trans *tr, sql_colum table_funcs.table_delete(tr, syscolumn, rid); sql_trans_drop_dependencies(tr, col->base.id); sql_trans_drop_any_comment(tr, col->base.id); + sql_trans_drop_obj_priv(tr, col->base.id); if (col->def && (seq_pos = strstr(col->def, next_value_for))) { sql_sequence * seq = NULL; @@ -4810,6 +4811,7 @@ sys_drop_table(sql_trans *tr, sql_table sql_trans_drop_any_comment(tr, t->base.id); sql_trans_drop_dependencies(tr, t->base.id); + sql_trans_drop_obj_priv(tr, t->base.id); if (isKindOfTable(t) || isView(t)) if (sys_drop_columns(tr, t, drop_action)) @@ -4867,6 +4869,7 @@ sys_drop_func(sql_trans *tr, sql_func *f sql_trans_drop_dependencies(tr, func->base.id); sql_trans_drop_any_comment(tr, func->base.id); + sql_trans_drop_obj_priv(tr, func->base.id); tr->schema_updates ++; @@ -5237,6 +5240,7 @@ sql_trans_drop_schema(sql_trans *tr, sql sys_drop_types(tr, s, drop_action); sys_drop_sequences(tr, s, drop_action); sql_trans_drop_any_comment(tr, s->base.id); + sql_trans_drop_obj_priv(tr, s->base.id); s->base.wtime = tr->wtime = tr->wstime; tr->schema_updates ++; @@ -6934,3 +6938,18 @@ sql_trans_drop_any_comment(sql_trans *tr table_funcs.table_delete(tr, comments, row); } } + +void +sql_trans_drop_obj_priv(sql_trans *tr, sqlid obj_id) +{ + sql_schema *sys = find_sql_schema(tr, "sys"); + sql_table *privs = find_sql_table(sys, "privileges"); + + assert(sys && privs); + /* select privileges of this obj_id */ + rids *A = table_funcs.rids_select(tr, find_sql_column(privs, "obj_id"), &obj_id, &obj_id, NULL); + /* remove them */ + for(oid rid = table_funcs.rids_next(A); !is_oid_nil(rid); rid = table_funcs.rids_next(A)) + table_funcs.table_delete(tr, privs, rid); + table_funcs.rids_destroy(A); +} _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list