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