Changeset: 578fc87b7b80 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/578fc87b7b80 Modified Files: tools/merovingian/ChangeLog tools/merovingian/client/monetdb.1 tools/merovingian/daemon/forkmserver.c tools/merovingian/utils/properties.c tools/merovingian/utils/utils.c tools/merovingian/utils/utils.h Branch: default Log Message:
Implemented a loadmodules property in merovingian. diffs (98 lines): diff --git a/tools/merovingian/ChangeLog b/tools/merovingian/ChangeLog --- a/tools/merovingian/ChangeLog +++ b/tools/merovingian/ChangeLog @@ -1,3 +1,8 @@ # ChangeLog file for sql/src/backends/monet5/merovingian # This file is updated with mchangelog +* Fri Feb 18 2022 Sjoerd Mullender <sjo...@acm.org> +- There is now a loadmodules property that can be used to add --loadmodule + arguments to the mserver5 command line. See the monetdb and mserver5 + manual pages. + diff --git a/tools/merovingian/client/monetdb.1 b/tools/merovingian/client/monetdb.1 --- a/tools/merovingian/client/monetdb.1 +++ b/tools/merovingian/client/monetdb.1 @@ -427,6 +427,17 @@ below. Defines how the server interprets literal strings. See the .IR mserver5 (1) manpage for more details. +.TP +\fBloadmodules=\fP\fImodule-list\fP +Enable the modules in +.I module-list +for the given database. +The +.I module-list +is a comma or space separated list of module names and translates +to a \fB\-\-loadmodule=\fP\fImodule\fP option to +.IR mserver5 (1) +for each of the modules in the list. .RE .TP \fBinherit\fP \fIproperty\fP \fIdatabase\fP [\fIdatabase\fP ...] diff --git a/tools/merovingian/daemon/forkmserver.c b/tools/merovingian/daemon/forkmserver.c --- a/tools/merovingian/daemon/forkmserver.c +++ b/tools/merovingian/daemon/forkmserver.c @@ -578,6 +578,23 @@ forkMserver(const char *database, sabdb* /* get the rest (non-default) mserver props set in the conf file */ list = ckv; freec = c; /* following entries to be freed */ + + kv = findConfKey(ckv, "loadmodules"); + if (kv->val == NULL) + kv = findConfKey(_mero_db_props, "loadmodules"); + if (kv->val != NULL) { + size_t modlen; + for (const char *val = kv->val; *val; val += modlen) { + modlen = strcspn(val, ", \t"); + if (modlen > 0) { + char *arg = malloc(modlen + 14); + snprintf(arg, modlen + 14, "--loadmodule=%.*s", (int) modlen, val); + argv[c++] = arg; + } + modlen += strspn(val + modlen, ", \t"); + } + } + while (list->key != NULL) { if (list->val != NULL && !defaultProperty(list->key)) { if (strcmp(list->key, "gdk_debug") == 0) { diff --git a/tools/merovingian/utils/properties.c b/tools/merovingian/utils/properties.c --- a/tools/merovingian/utils/properties.c +++ b/tools/merovingian/utils/properties.c @@ -40,6 +40,7 @@ static const confkeyval _internal_prop_k {"memmaxsize", NULL, 0, INT}, {"vmmaxsize", NULL, 0, INT}, {"raw_strings", NULL, 0, BOOLEAN}, + {"loadmodules", NULL, 0, MODS}, { NULL, NULL, 0, INVALID} }; diff --git a/tools/merovingian/utils/utils.c b/tools/merovingian/utils/utils.c --- a/tools/merovingian/utils/utils.c +++ b/tools/merovingian/utils/utils.c @@ -285,6 +285,12 @@ setConfVal(confkeyval *ckv, const char * return(strdup(buf)); } }; break; + case MODS: + for (size_t i = 0; val[i]; i++) { + if (val[i] < ' ' || val[i] == '\\' || val[i] == '/' || val[i] >= 0177) + return strdup("only printable ASCII character other than \\ and / allowed"); + } + /* fall through */ case STR: case OTHER: /* leave as is, not much to check */ diff --git a/tools/merovingian/utils/utils.h b/tools/merovingian/utils/utils.h --- a/tools/merovingian/utils/utils.h +++ b/tools/merovingian/utils/utils.h @@ -21,6 +21,7 @@ enum valtype { STR, MURI, LADDR, + MODS, /* list of mserver5 modules */ OTHER }; _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org