Changeset: 37bafb50b2dc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/37bafb50b2dc
Modified Files:
        monetdb5/mal/mal.h
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_prelude.c
        monetdb5/mal/mel.h
        sql/backends/monet5/sql_upgrades.c
        sql/scripts/25_debug.sql
Branch: default
Log Message:

Recover the MAL documentation and make it available. Fixes bug #7168


diffs (136 lines):

diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -172,6 +172,7 @@ typedef struct {
 typedef struct MALBLK {
        char binding[IDLENGTH]; /* related C-function */
        str help;                               /* supportive commentary */
+       str statichelp;                 /* static help string should not be 
freed */
        oid tag;                                /* unique block tag */
        struct MALBLK *alternative;
        int vtop;                               /* next free slot */
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -123,6 +123,7 @@ newMalBlk(int elements)
        mb->vid = 0;
        mb->vsize = elements;
        mb->help = NULL;
+       mb->statichelp = NULL;
        mb->binding[0] = 0;
        mb->tag = 0;
        mb->workers = 0;
@@ -282,9 +283,10 @@ freeMalBlk(MalBlkPtr mb)
        mb->tag = 0;
        mb->memory = 0;
        mb->workers = 0;
-       if (mb->help)
+       if (mb->help && mb->statichelp != mb->help)
                GDKfree(mb->help);
        mb->help = 0;
+       mb->statichelp = 0;
        mb->inlineProp = 0;
        mb->unsafeProp = 0;
        freeException(mb->errors);
diff --git a/monetdb5/mal/mal_prelude.c b/monetdb5/mal/mal_prelude.c
--- a/monetdb5/mal/mal_prelude.c
+++ b/monetdb5/mal/mal_prelude.c
@@ -227,8 +227,12 @@ addFunctions(mel_func *fcn){
                mb = s->def;
                if( mb == NULL)
                        throw(LOADER, "addFunctions", "Can not create program 
block for %s.%s missing", fcn->mod, fcn->fcn);
+
                if (fcn->cname && fcn->cname[0])
                        strcpy(mb->binding, fcn->cname);
+               /* keep the comment around, setting the static avoid freeing 
the string accidentally , saving on duplicate documentation in the code. */
+               mb->statichelp = mb->help = fcn->comment;
+
                sig= newInstructionArgs(mb, fcn->mod, fcn->fcn, fcn->argc + 
(fcn->retc == 0));
                sig->retc = 0;
                sig->argc = 0;
@@ -236,6 +240,7 @@ addFunctions(mel_func *fcn){
                sig->fcn = (MALfcn)fcn->imp;
                if( fcn->unsafe)
                        mb->unsafeProp = 1;
+               
                /* add the return variables */
                if(fcn->retc == 0){
                        int idx = newTmpVariable(mb, TYPE_void);
diff --git a/monetdb5/mal/mel.h b/monetdb5/mal/mel.h
--- a/monetdb5/mal/mel.h
+++ b/monetdb5/mal/mel.h
@@ -43,8 +43,8 @@ typedef struct __attribute__((__designat
 /*strings */
 #ifdef MEL_STR
 
-#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS }
-#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS }
+#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS, 
.comment=COMMENT }
+#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .cname=#IMP, .unsafe=UNSAFE, .args=ARGS, 
.comment=COMMENT }
 
 /* ARGC = arg-count + ret-count */
 //#define args(RETC,ARGC,...) (mel_arg[ARGC?ARGC:1]){__VA_ARGS__}, .retc=RETC, 
.argc=ARGC
@@ -76,9 +76,8 @@ typedef struct __attribute__((__designat
                unsafe:1,
                retc:6,
                argc:6;
-//#ifdef NDEBUG
-       //char *comment;
-//#endif
+// comment on MAL instructions should also be available when TRACEing the 
queries
+       char *comment;
        fptr imp;
        const mel_arg *args;
 } mel_func;
@@ -86,11 +85,11 @@ typedef struct __attribute__((__designat
 #else
 
 //#ifdef NDEBUG
-#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .args=ARGS }
-#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .args=ARGS }
+#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .args=ARGS, .comment=COMMENT }
+#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .args=ARGS, .comment=COMMENT }
 //#else
-//#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .comment=COMMENT, .args=ARGS }
-//#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .comment=COMMENT, .args=ARGS }
+//#define command(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=true, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .comment=COMMENT, .args=ARGS, 
.comment=COMMENT }
+//#define pattern(MOD,FCN,IMP,UNSAFE,COMMENT,ARGS) { .command=false, .mod=MOD, 
.fcn=FCN, .imp=(fptr)&IMP, .unsafe=UNSAFE, .comment=COMMENT, .args=ARGS, 
.comment=COMMENT }
 //#endif
 
 #define args(RETC,ARGC,...) {__VA_ARGS__}, .retc=RETC, .argc=ARGC
@@ -118,9 +117,8 @@ typedef struct __attribute__((__designat
                unsafe:1,
                retc:6,
                argc:6;
-//#ifdef NDEBUG
-       //char *comment;
-//#endif
+// comment on MAL instructions should also be available when TRACEing the 
queries
+       char *comment;
        fptr imp;
        mel_arg args[20];
 } mel_func;
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
@@ -2404,6 +2404,8 @@ sql_update_jul2021(Client c, mvc *sql, c
                                                        "external name 
\"sql\".\"deltas\";\n"
                                                        "update sys.functions 
set system = true"
                                                        " where schema_id = 
2000 and name = 'deltas';\n");
+                       pos += snprintf(buf + pos, bufsize - pos, 
+                                                       "create view 
sys.malfunctions as select \"signature\", \"comment\" from 
sys.malfunctions();\n");
 
                        /* 26_sysmon */
                        t = mvc_bind_table(sql, s, "queue");
diff --git a/sql/scripts/25_debug.sql b/sql/scripts/25_debug.sql
--- a/sql/scripts/25_debug.sql
+++ b/sql/scripts/25_debug.sql
@@ -44,6 +44,8 @@ create function sys.malfunctions()
        returns table("module" string, "function" string, "signature" string, 
"address" string, "comment" string)
        external name "manual"."functions";
 
+create view sys.malfunctions as select "signature", "comment" from 
sys.malfunctions();
+
 create procedure sys.evalAlgebra( ra_stmt string, opt bool)
        external name sql."evalAlgebra";
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to