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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list