Changeset: d73a1a6b3d41 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/d73a1a6b3d41
Modified Files:
monetdb5/mal/mal_client.c
monetdb5/mal/mal_client.h
monetdb5/modules/mal/clients.c
sql/backends/monet5/sql_upgrades.c
sql/scripts/22_clients.sql
Branch: clientinfo
Log Message:
Add sys.setclientinfo(property string, value string)
diffs (127 lines):
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -642,3 +642,56 @@ MCprintinfo(void)
printf("%d active clients, %d finishing clients, %d blocked clients\n",
nrun, nfinish, nblock);
}
+
+
+void
+MCsetClientInfo(Client c, const char *property, const char *value)
+{
+ if (strlen(property) < 7)
+ return;
+
+ // 012345 6 78...
+ // Client H ostname
+ // Applic a tionName
+ // Client L ibrary
+ // Client R emark
+ // Client P id
+ int discriminant = toupper(property[6]);
+
+ switch (discriminant) {
+ case 'H':
+ if (strcasecmp(property, "ClientHostname") == 0) {
+ GDKfree(c->client_hostname);
+ c->client_hostname = GDKstrdup(value);
+ }
+ break;
+ case 'A':
+ if (strcasecmp(property, "ApplicationName") == 0) {
+ GDKfree(c->client_application);
+ c->client_application = GDKstrdup(value);
+ }
+ break;
+ case 'L':
+ if (strcasecmp(property, "ClientLibrary") == 0) {
+ GDKfree(c->client_library);
+ c->client_library = GDKstrdup(value);
+ }
+ break;
+ case 'R':
+ if (strcasecmp(property, "ClientRemark") == 0) {
+ GDKfree(c->client_remark);
+ c->client_remark = GDKstrdup(value);
+ }
+ break;
+ case 'P':
+ if (strcasecmp(property, "ClientPid") == 0) {
+ char *end;
+ long n = strtol(value, &end, 10);
+ if (*value && !*end)
+ c->client_pid = n;
+ }
+ break;
+ default:
+ break;
+ }
+}
diff --git a/monetdb5/mal/mal_client.h b/monetdb5/mal/mal_client.h
--- a/monetdb5/mal/mal_client.h
+++ b/monetdb5/mal/mal_client.h
@@ -195,5 +195,6 @@ mal_export str MCawakeClient(int id);
mal_export int MCpushClientInput(Client c, bstream *new_input, int listing,
const char
*prompt);
mal_export int MCvalid(Client c);
+mal_export void MCsetClientInfo(Client c, const char *property, const char
*value);
#endif /* _MAL_CLIENT_H_ */
diff --git a/monetdb5/modules/mal/clients.c b/monetdb5/modules/mal/clients.c
--- a/monetdb5/modules/mal/clients.c
+++ b/monetdb5/modules/mal/clients.c
@@ -983,6 +983,17 @@ CLTgetSessionID(Client cntxt, MalBlkPtr
return MAL_SUCCEED;
}
+static str
+CLTsetClientInfo(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ (void)mb;
+ str property = *getArgReference_str(stk, pci, 1);
+ str value = *getArgReference_str(stk, pci, 2);
+
+ MCsetClientInfo(cntxt, property, value);
+ return MAL_SUCCEED;
+}
+
#include "mel.h"
mel_func clients_init_funcs[] = {
pattern("clients", "setListing", CLTsetListing, true, "Turn on/off echo of
MAL instructions:\n1 - echo input,\n2 - show mal instruction,\n4 - show details
of type resolutoin, \n8 - show binding information.", args(1,2,
arg("",int),arg("flag",int))),
@@ -1021,6 +1032,7 @@ mel_func clients_init_funcs[] = {
pattern("clients", "getPasswordHash", CLTgetPasswordHash, false, "Return the
password hash of the given user", args(1,2, arg("",str),arg("user",str))),
pattern("clients", "checkPermission", CLTcheckPermission, false, "Check
permission for a user, requires hashed password (backendsum)", args(1,3,
arg("",void),arg("usr",str),arg("pw",str))),
pattern("clients", "current_sessionid", CLTgetSessionID, false, "return
current session ID", args(1,1, arg("",int))),
+ pattern("clients", "setinfo", CLTsetClientInfo, true, "set a clientinfo
property", args(1, 3, arg("",str), arg("property", str), arg("value", str))),
{ .imp=NULL }
};
#include "mal_import.h"
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -7129,6 +7129,10 @@ sql_update_default(Client c, mvc *sql, s
" )\n"
" external name sql.sessions;\n"
"create view sys.sessions as select * from
sys.sessions();\n"
+ "create procedure sys.setclientinfo(property string,
value string)\n"
+ " external name clients.setinfo;\n"
+ "grant execute on procedure sys.setclientinfo(string,
string) to public;\n"
+ "update sys.functions set system = true where schema_id
= 2000 and name = 'setclientinfo';";
;
sql_schema *sys = mvc_bind_schema(sql, "sys");
sql_table *t = mvc_bind_table(sql, sys, "sessions");
diff --git a/sql/scripts/22_clients.sql b/sql/scripts/22_clients.sql
--- a/sql/scripts/22_clients.sql
+++ b/sql/scripts/22_clients.sql
@@ -41,6 +41,10 @@ external name sql.sessions;
create view sys.sessions as select * from sys.sessions();
-- we won't grant sys.sessions to the public
+create procedure sys.setclientinfo(property string, value string)
+ external name clients.setinfo;
+grant execute on procedure sys.setclientinfo(string, string) to public;
+
-- routines to bring the system down quickly
create procedure sys.shutdown(delay tinyint)
external name sql.shutdown;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]