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

Reply via email to