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