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