Changeset: 0aa8b0e994d2 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/0aa8b0e994d2 Modified Files: sql/server/sql_parser.y Branch: default Log Message:
Merge with Jun2023 branch. diffs (truncated from 442 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/gdk/gdk_utils.c b/gdk/gdk_utils.c --- a/gdk/gdk_utils.c +++ b/gdk/gdk_utils.c @@ -1622,10 +1622,14 @@ THRget(int tid) static inline uintptr_t THRsp(void) { +#if defined(__GNUC__) || defined(__clang__) + return (uintptr_t) __builtin_frame_address(0); +#else int l = 0; uintptr_t sp = (uintptr_t) (&l); return sp; +#endif } static inline Thread diff --git a/monetdb5/optimizer/opt_wrapper.c b/monetdb5/optimizer/opt_wrapper.c --- a/monetdb5/optimizer/opt_wrapper.c +++ b/monetdb5/optimizer/opt_wrapper.c @@ -173,9 +173,9 @@ OPTwrapper(Client cntxt, MalBlkPtr mb, M str OPTstatistics(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { - bat *nme = (bat*) getArgReference_bat(stk, p, 0); - bat *cnt = (bat*) getArgReference_bat(stk, p, 1); - bat *time = (bat*) getArgReference_bat(stk, p, 2); + bat *nme = getArgReference_bat(stk, p, 0); + bat *cnt = getArgReference_bat(stk, p, 1); + bat *time = getArgReference_bat(stk, p, 2); BAT *n, *c, *t; int i; 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/UDF/capi/capi.c b/sql/backends/monet5/UDF/capi/capi.c --- a/sql/backends/monet5/UDF/capi/capi.c +++ b/sql/backends/monet5/UDF/capi/capi.c @@ -510,7 +510,7 @@ static str CUDFeval(Client cntxt, MalBlk (void)pthread_sigmask(SIG_UNBLOCK, &signal_set, NULL); } - sqlfun = *(sql_func **)getArgReference_ptr(stk, pci, pci->retc); + sqlfun = (sql_func *)*getArgReference_ptr(stk, pci, pci->retc); funcname = sqlfun ? sqlfun->base.name : "yet_another_c_function"; args = (str *)GDKzalloc(sizeof(str) * pci->argc); 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 @@ -517,7 +517,7 @@ mvc_claim_wrap(Client cntxt, MalBlkPtr m str msg; const char *sname = *getArgReference_str(stk, pci, 3); const char *tname = *getArgReference_str(stk, pci, 4); - lng cnt = *(lng*)getArgReference_lng(stk, pci, 5); + lng cnt = *getArgReference_lng(stk, pci, 5); BAT *pos = NULL; sql_schema *s; sql_table *t; @@ -554,7 +554,7 @@ mvc_add_dependency_change(Client cntxt, mvc *m = NULL; const char *sname = *getArgReference_str(stk, pci, 1); const char *tname = *getArgReference_str(stk, pci, 2); - lng cnt = *(lng*)getArgReference_lng(stk, pci, 3); + lng cnt = *getArgReference_lng(stk, pci, 3); sql_schema *s; sql_table *t; @@ -993,7 +993,7 @@ mvc_next_value_bulk(Client cntxt, MalBlk sql_schema *s; sql_sequence *seq; bat *res = getArgReference_bat(stk, pci, 0); - BUN card = *(BUN*)getArgReference_lng(stk, pci, 1); + BUN card = (BUN)*getArgReference_lng(stk, pci, 1); const char *sname = *getArgReference_str(stk, pci, 2); const char *seqname = *getArgReference_str(stk, pci, 3); BAT *r = NULL; @@ -1789,7 +1789,7 @@ mvc_append_wrap(Client cntxt, MalBlkPtr const char *sname = *getArgReference_str(stk, pci, 2); const char *tname = *getArgReference_str(stk, pci, 3); const char *cname = *getArgReference_str(stk, pci, 4); - BUN offset = *(BUN*)getArgReference_oid(stk, pci, 5); + BUN offset = (BUN)*getArgReference_oid(stk, pci, 5); bat Pos = *getArgReference_bat(stk, pci, 6); ptr ins = getArgReference(stk, pci, 7); int tpe = getArgType(mb, pci, 7), log_res = LOG_OK; @@ -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: { _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org