Changeset: c997d3a05c02 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c997d3a05c02
Modified Files:
        monetdb5/mal/mal_linker.c
        monetdb5/mal/mal_resolve.c
Branch: Jun2020
Log Message:

Throwing a better error message at the MAL linker. If the user has enabled 
embbeded python, but didn't install it before (ie pyapi3 module missing), throw 
a better error message


diffs (68 lines):

diff --git a/monetdb5/mal/mal_linker.c b/monetdb5/mal/mal_linker.c
--- a/monetdb5/mal/mal_linker.c
+++ b/monetdb5/mal/mal_linker.c
@@ -439,9 +439,9 @@ MSP_locate_sqlscript(const char *filenam
        return locate_file(filename, SQL_EXT, recurse);
 }
 
-
 int
-malLibraryEnabled(str name) {
+malLibraryEnabled(str name)
+{
        if (strcmp(name, "pyapi3") == 0) {
                const char *val = GDKgetenv("embedded_py");
                return val && (strcmp(val, "3") == 0 ||
@@ -451,9 +451,12 @@ malLibraryEnabled(str name) {
        return true;
 }
 
-char*
-malLibraryHowToEnable(str name) {
+char *
+malLibraryHowToEnable(str name)
+{
        if (strcmp(name, "pyapi3") == 0) {
+               if (malLibraryEnabled(name))
+                       return "Embedded Python 3 has not been installed. 
Please install it first, then start server with --set embedded_py=3";
                return "Embedded Python 3 has not been enabled. Start server 
with --set embedded_py=3";
        }
        return "";
diff --git a/monetdb5/mal/mal_resolve.c b/monetdb5/mal/mal_resolve.c
--- a/monetdb5/mal/mal_resolve.c
+++ b/monetdb5/mal/mal_resolve.c
@@ -536,7 +536,7 @@ typeChecker(Module scope, MalBlkPtr mb, 
                 */
                if (!isaSignature(p) && !getInstrPtr(mb, 0)->polymorphic) {
                        if (!silent) {
-                               char *errsig;
+                               char *errsig = NULL;
                                if (!malLibraryEnabled(p->modname)) {
                                        mb->errors = createMalException(mb, 
idx, TYPE,
                                                                                
"'%s%s%s' library error in: %s",
@@ -544,13 +544,21 @@ typeChecker(Module scope, MalBlkPtr mb, 
                                                                                
(getModuleId(p) ? "." : ""),
                                                                                
getFunctionId(p), malLibraryHowToEnable(p->modname));
                                } else {
-                                       errsig = instruction2str(mb,0,p, 
(LIST_MAL_NAME | LIST_MAL_TYPE | LIST_MAL_VALUE));
+                                       bool free_errsig = false, 
special_undefined = false;
+                                       errsig = 
malLibraryHowToEnable(p->modname);
+                                       if (!strcmp(errsig, "")) {
+                                               errsig = 
instruction2str(mb,0,p, (LIST_MAL_NAME | LIST_MAL_TYPE | LIST_MAL_VALUE));
+                                               free_errsig = true;
+                                       } else {
+                                               special_undefined = true;
+                                       }
                                        mb->errors = createMalException(mb, 
idx, TYPE,
-                                                                               
"'%s%s%s' undefined in: %s",
+                                                                               
"'%s%s%s' undefined%s: %s",
                                                                                
(getModuleId(p) ? getModuleId(p) : ""),
                                                                                
(getModuleId(p) ? "." : ""),
-                                                                               
getFunctionId(p), errsig?errsig:"failed instruction2str()");
-                                       GDKfree(errsig);
+                                                                               
getFunctionId(p), special_undefined ? "" : " in", errsig?errsig:"failed 
instruction2str()");
+                                       if (free_errsig)
+                                               GDKfree(errsig);
                                }
                        } 
                        p->typechk = TYPE_UNKNOWN;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to