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

Reply via email to