Changeset: 4dfceb6180d6 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/4dfceb6180d6 Modified Files: clients/Tests/MAL-signatures-hge.test clients/Tests/MAL-signatures.test clients/mapiclient/mhelp.c sql/ChangeLog.Jun2023 sql/backends/monet5/sql.c sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_user.c sql/common/sql_backend.c sql/common/sql_backend.h sql/server/rel_schema.c sql/server/sql_parser.y sql/server/sql_privileges.c sql/server/sql_privileges.h sql/test/Users/Tests/create_user_options.test Branch: Jun2023 Log Message:
Add ALTER USER MAX_MEMORY MAX_WORKERS diffs (truncated from 327 to 300 lines): diff --git a/clients/Tests/MAL-signatures-hge.test b/clients/Tests/MAL-signatures-hge.test --- a/clients/Tests/MAL-signatures-hge.test +++ b/clients/Tests/MAL-signatures-hge.test @@ -50290,7 +50290,7 @@ SQLalter_table; Catalog operation alter_table sqlcatalog alter_user -pattern sqlcatalog.alter_user(X_0:str, X_1:str, X_2:int, X_3:str, X_4:str, X_5:str, X_6:str):void +pattern sqlcatalog.alter_user(X_0:str, X_1:str, X_2:int, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:int):void SQLalter_user; Catalog operation alter_user sqlcatalog diff --git a/clients/Tests/MAL-signatures.test b/clients/Tests/MAL-signatures.test --- a/clients/Tests/MAL-signatures.test +++ b/clients/Tests/MAL-signatures.test @@ -38615,7 +38615,7 @@ SQLalter_table; Catalog operation alter_table sqlcatalog alter_user -pattern sqlcatalog.alter_user(X_0:str, X_1:str, X_2:int, X_3:str, X_4:str, X_5:str, X_6:str):void +pattern sqlcatalog.alter_user(X_0:str, X_1:str, X_2:int, X_3:str, X_4:str, X_5:str, X_6:str, X_7:lng, X_8:int):void SQLalter_user; Catalog operation alter_user sqlcatalog diff --git a/clients/mapiclient/mhelp.c b/clients/mapiclient/mhelp.c --- a/clients/mapiclient/mhelp.c +++ b/clients/mapiclient/mhelp.c @@ -83,9 +83,10 @@ SQLhelp sqlhelp1[] = { "Change a user's login name or password or default schema", "ALTER USER ident RENAME TO ident\n" "ALTER USER SET [ENCRYPTED | UNENCRYPTED] PASSWORD string USING OLD PASSWORD string\n" - "ALTER USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string\n" - "ALTER USER ident [WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string] SET SCHEMA ident\n" - "ALTER USER ident [WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string] SCHEMA PATH string [DEFAULT ROLE ident]", + "ALTER USER ident\n" + " [WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string]\n" + " [SET SCHEMA ident] [SCHEMA PATH string] [DEFAULT ROLE ident]\n" + " [MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, {"ANALYZE", @@ -249,7 +250,8 @@ SQLhelp sqlhelp1[] = { {"CREATE USER", "Create a new database user", "CREATE USER ident WITH [ENCRYPTED | UNENCRYPTED] PASSWORD string NAME string [SCHEMA ident] [SCHEMA PATH string]\n" - "[MAX_MEMORY poslng] [MAX_WORKERS posint] [OPTIMIZER string] [DEFAULT ROLE ident]", + "[MAX_MEMORY posbytes | NO MAX_MEMORY] [MAX_WORKERS poscount | NO MAX_WORKERS]\n" + "[OPTIMIZER string] [DEFAULT ROLE ident]", "ident", "See also https://www.monetdb.org/documentation/user-guide/sql-manual/data-definition/privileges/"}, {"CREATE VIEW", diff --git a/sql/ChangeLog.Jun2023 b/sql/ChangeLog.Jun2023 --- a/sql/ChangeLog.Jun2023 +++ b/sql/ChangeLog.Jun2023 @@ -1,3 +1,6 @@ # ChangeLog file for sql # This file is updated with Maddlog +* Fri Jun 16 2023 Joeri van Ruth <joeri.van.r...@monetdbsolutions.com> +- Add MAX_MEMORY and MAX_WORKERS options to the ALTER USER statement + 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 @@ -5859,7 +5859,7 @@ pattern("sql", "decypher", SQLdecypher, pattern("sqlcatalog", "create_user", SQLcreate_user, false, "Catalog operation create_user", args(0,10, arg("sname",str),arg("passwrd",str),arg("enc",int),arg("schema",str),arg("schemapath",str),arg("fullname",str), arg("max_memory", lng), arg("max_workers", int), arg("optimizer", str), arg("default_role", str))), pattern("sqlcatalog", "drop_user", SQLdrop_user, false, "Catalog operation drop_user", args(0,2, arg("sname",str),arg("action",int))), pattern("sqlcatalog", "drop_user", SQLdrop_user, false, "Catalog operation drop_user", args(0,3, arg("sname",str),arg("auth",str),arg("action",int))), - pattern("sqlcatalog", "alter_user", SQLalter_user, false, "Catalog operation alter_user", args(0,7, arg("sname",str),arg("passwrd",str),arg("enc",int),arg("schema",str),arg("schemapath",str),arg("oldpasswrd",str),arg("role",str))), + pattern("sqlcatalog", "alter_user", SQLalter_user, false, "Catalog operation alter_user", args(0,9, arg("sname",str),arg("passwrd",str),arg("enc",int),arg("schema",str),arg("schemapath",str),arg("oldpasswrd",str),arg("role",str),arg("max_memory",lng),arg("max_workers",int))), pattern("sqlcatalog", "rename_user", SQLrename_user, false, "Catalog operation rename_user", args(0,3, arg("sname",str),arg("newnme",str),arg("action",int))), pattern("sqlcatalog", "create_role", SQLcreate_role, false, "Catalog operation create_role", args(0,3, arg("sname",str),arg("role",str),arg("grator",int))), pattern("sqlcatalog", "drop_role", SQLdrop_role, false, "Catalog operation drop_role", args(0,3, arg("auth",str),arg("role",str),arg("action",int))), 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 @@ -1810,9 +1810,11 @@ SQLalter_user(Client cntxt, MalBlkPtr mb char *schema_path = SaveArgReference(stk, pci, 5); char *oldpasswd = SaveArgReference(stk, pci, 6); char *role = SaveArgReference(stk, pci, 7); + lng max_memory = *getArgReference_lng(stk, pci, 8); + int max_workers = *getArgReference_int(stk, pci, 9); initcontext(); - msg = sql_alter_user(sql, sname, passwd, enc, schema, schema_path, oldpasswd, role); + msg = sql_alter_user(sql, sname, passwd, enc, schema, schema_path, oldpasswd, role, max_memory, max_workers); 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 @@ -469,7 +469,7 @@ monet5_schema_has_user(ptr _mvc, sql_sch static int monet5_alter_user(ptr _mvc, str user, str passwd, bool enc, sqlid schema_id, str schema_path, str oldpasswd, sqlid - role_id) + role_id, lng max_memory, int max_workers) { mvc *m = (mvc *) _mvc; Client c = MCgetClient(m->clientid); @@ -482,7 +482,7 @@ monet5_alter_user(ptr _mvc, str user, st sql_table *info = find_sql_table(m->session->tr, sys, "db_user_info"); sql_column *users_name = find_sql_column(info, "name"); - if (schema_id || schema_path || role_id) { + if (schema_id || schema_path || role_id || max_memory > -1 || max_workers > -1) { rid = store->table_api.column_find_row(m->session->tr, users_name, user, NULL); // user should be checked here since the way `ALTER USER ident ...` stmt is if (is_oid_nil(rid)) { @@ -606,7 +606,26 @@ monet5_alter_user(ptr _mvc, str user, st res == LOG_CONFLICT ? " due to conflict with another transaction" : ""); return (FALSE); } + } + if (max_memory > -1) { + sql_column *users_max_memory = find_sql_column(info, "max_memory"); + + if ((res = store->table_api.column_update_value(m->session->tr, users_max_memory, rid, &max_memory))) { + (void) sql_error(m, 02, SQLSTATE(42000) "ALTER USER: failed%s", + res == LOG_CONFLICT ? " due to conflict with another transaction" : ""); + return (FALSE); + } + } + + if (max_workers > -1) { + sql_column *users_max_workers = find_sql_column(info, "max_workers"); + + if ((res = store->table_api.column_update_value(m->session->tr, users_max_workers, rid, &max_workers))) { + (void) sql_error(m, 02, SQLSTATE(42000) "ALTER USER: failed%s", + res == LOG_CONFLICT ? " due to conflict with another transaction" : ""); + return (FALSE); + } } return TRUE; diff --git a/sql/common/sql_backend.c b/sql/common/sql_backend.c --- a/sql/common/sql_backend.c +++ b/sql/common/sql_backend.c @@ -78,10 +78,10 @@ backend_schema_has_user(ptr mvc, sql_sch int backend_alter_user(ptr mvc, str user, str passwd, bool enc, - sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id) + sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id, lng max_memory, int max_workers) { if (be_funcs.fauser != NULL) - return(be_funcs.fauser(mvc, user, passwd, enc, schema_id, schema_path, oldpasswd, role_id)); + return(be_funcs.fauser(mvc, user, passwd, enc, schema_id, schema_path, oldpasswd, role_id, max_memory, max_workers)); return(FALSE); } diff --git a/sql/common/sql_backend.h b/sql/common/sql_backend.h --- a/sql/common/sql_backend.h +++ b/sql/common/sql_backend.h @@ -22,7 +22,7 @@ typedef int (*drop_user_fptr) (ptr mvc, typedef oid (*find_user_fptr) (ptr mvc, char *user); typedef void (*create_privileges_fptr) (ptr mvc, sql_schema *s, const char *initpasswd); typedef int (*schema_has_user_fptr) (ptr mvc, sql_schema *s); -typedef int (*alter_user_fptr) (ptr mvc, str user, str passwd, bool enc, sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id); +typedef int (*alter_user_fptr) (ptr mvc, str user, str passwd, bool enc, sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id, lng max_memory, int max_workers); typedef int (*rename_user_fptr) (ptr mvc, str olduser, str newuser); typedef void* (*schema_user_dependencies) (ptr mvc, int schema_id); typedef void (*create_function) (ptr mvc, str name, sql_rel *rel, sql_table *t); @@ -55,7 +55,7 @@ extern int backend_drop_user(ptr mvc, c extern oid backend_find_user(ptr mp, char *user); extern void backend_create_privileges(ptr mvc, sql_schema *s, const char *initpasswd); extern int backend_schema_has_user(ptr mvc, sql_schema *s); -extern int backend_alter_user(ptr mvc, str user, str passwd, bool enc, sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id); +extern int backend_alter_user(ptr mvc, str user, str passwd, bool enc, sqlid schema_id, char *schema_path, str oldpasswd, sqlid role_id, lng max_memory, int max_workers); extern int backend_rename_user(ptr mvc, str olduser, str newuser); extern void* backend_schema_user_dependencies(ptr trans, sqlid schema_id); extern int backend_resolve_function(ptr trans, sql_func *f, const char *fimp, bool *side_effect); 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 @@ -2296,8 +2296,8 @@ rel_create_user(sql_allocator *sa, char append(exps, exp_atom_clob(sa, schema)); append(exps, exp_atom_clob(sa, schema_path)); append(exps, exp_atom_clob(sa, fullname)); - append(exps, exp_atom_lng(sa, max_memory)); - append(exps, exp_atom_int(sa, max_workers)); + append(exps, exp_atom_lng(sa, max_memory >= 0 ? max_memory : 0)); + append(exps, exp_atom_int(sa, max_workers >= 0 ? max_workers: 0)); append(exps, exp_atom_clob(sa, optimizer)); append(exps, exp_atom_clob(sa, default_role)); rel->l = NULL; @@ -2311,7 +2311,7 @@ rel_create_user(sql_allocator *sa, char } static sql_rel * -rel_alter_user(sql_allocator *sa, char *user, char *passwd, int enc, char *schema, char *schema_path, char *oldpasswd, char *role) +rel_alter_user(sql_allocator *sa, char *user, char *passwd, int enc, char *schema, char *schema_path, char *oldpasswd, char *role, lng max_memory, int max_workers) { sql_rel *rel = rel_create(sa); list *exps = new_exp_list(sa); @@ -2325,6 +2325,9 @@ rel_alter_user(sql_allocator *sa, char * append(exps, exp_atom_clob(sa, schema_path)); append(exps, exp_atom_clob(sa, oldpasswd)); append(exps, exp_atom_clob(sa, role)); + append(exps, exp_atom_lng(sa, max_memory)); + append(exps, exp_atom_int(sa, max_workers)); + rel->l = NULL; rel->r = NULL; rel->op = op_ddl; @@ -2965,7 +2968,9 @@ rel_schemas(sql_query *query, symbol *s) a->next->data.sval, /* schema */ a->next->next->data.sval, /* schema path */ a->next->next->next->next->data.sval, /* old passwd */ - l->h->next->next->data.sval /* default role */ + l->h->next->next->data.sval, /* default role */ + l->h->next->next->next->data.l_val, /* max_memory */ + l->h->next->next->next->next->data.i_val /* max_workers */ ); } break; case SQL_RENAME_USER: { diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -1306,9 +1306,9 @@ alter_statement: append_string(l, $7); append_int(l, $3); $$ = _symbol_create_list( SQL_SET_TABLE_SCHEMA, l ); } - | ALTER USER ident opt_with_encrypted_password user_schema opt_schema_path opt_default_role + | ALTER USER ident opt_with_encrypted_password user_schema opt_schema_path opt_default_role opt_max_memory opt_max_workers { dlist *l = L(), *p = L(); - if (!$4 && !$5 && !$6 && !$7) { + if (!$4 && !$5 && !$6 && !$7 && $8 < 0 && $9 < 0) { yyerror(m, "ALTER USER: At least one property should be updated"); YYABORT; } @@ -1320,6 +1320,8 @@ alter_statement: append_string(p, NULL); append_list(l, p); append_string(l, $7); + append_lng(l, $8); + append_int(l, $9); $$ = _symbol_create_list( SQL_ALTER_USER, l ); } | ALTER USER ident RENAME TO ident { dlist *l = L(); @@ -1337,6 +1339,8 @@ alter_statement: append_string(p, $10); append_list(l, p); append_string(l, NULL); + append_lng(l, -1); + append_int(l, -1); $$ = _symbol_create_list( SQL_ALTER_USER, l ); } | ALTER SCHEMA if_exists ident RENAME TO ident { dlist *l = L(); @@ -1574,12 +1578,14 @@ role_def: ; opt_max_memory: - /* empty */ { $$ = 0; } + /* empty */ { $$ = -1; } + | NO MAX_MEMORY { $$ = 0; } | MAX_MEMORY poslng { $$ = $2; } ; opt_max_workers: - /* empty */ { $$ = 0; } + /* empty */ { $$ = -1; } + | NO MAX_WORKERS { $$ = 0; } | MAX_WORKERS posint { $$ = $2; } ; 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 @@ -949,7 +949,7 @@ sql_drop_user(mvc *sql, char *user) } char * -sql_alter_user(mvc *sql, char *user, char *passwd, bool enc, char *schema, char *schema_path, char *oldpasswd, char *role) +sql_alter_user(mvc *sql, char *user, char *passwd, bool enc, char *schema, char *schema_path, char *oldpasswd, char *role, lng max_memory, int max_workers) { sql_schema *s = NULL; sqlid schema_id = 0; @@ -976,7 +976,7 @@ sql_alter_user(mvc *sql, char *user, cha if (!isNew(s) && sql_trans_add_dependency(sql->session->tr, s->base.id, ddl) != LOG_OK) throw(SQL, "sql.alter_user", SQLSTATE(HY013) MAL_MALLOC_FAIL); } - if (backend_alter_user(sql, user, passwd, enc, schema_id, schema_path, oldpasswd, role_id) == FALSE) + if (backend_alter_user(sql, user, passwd, enc, schema_id, schema_path, oldpasswd, role_id, max_memory, max_workers) == FALSE) throw(SQL,"sql.alter_user", SQLSTATE(M0M27) "%s", sql->errstr); return NULL; } diff --git a/sql/server/sql_privileges.h b/sql/server/sql_privileges.h --- a/sql/server/sql_privileges.h +++ b/sql/server/sql_privileges.h @@ -44,7 +44,7 @@ extern int sql_schema_has_user(mvc *m, s extern char * sql_create_user(mvc *sql, char *user, char *passwd, bool enc, char *fullname, char *schema, char *schema_path, lng max_memory, int max_workers, char *optimizer, char *default_role); extern char * sql_drop_user(mvc *sql, char *user); -extern char * sql_alter_user(mvc *sql, char *user, char *passwd, bool enc, char *schema, char *schema_path, char *oldpasswd, char *role); +extern char * sql_alter_user(mvc *sql, char *user, char *passwd, bool enc, char *schema, char *schema_path, char *oldpasswd, char *role, lng max_memory, int max_workers); extern char * sql_rename_user(mvc *sql, char *olduser, char *newuser); _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org