Changeset: e5de61209f5c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e5de61209f5c
Branch: default
Log Message:
Merge nospare into default.
diffs (truncated from 24084 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9359,12 +9359,12 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "export_table", "unsafe pattern sql.export_table(X_1:str,
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str],
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int], X_13:any...):int
", "mvc_export_row_wrap;", "" ]
[ "sql", "export_table", "unsafe pattern sql.export_table(X_1:str,
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str],
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int],
X_13:bat[:any]...):int ", "mvc_export_table_wrap;", "" ]
[ "sql", "first_value", "pattern sql.first_value(X_1:any_1, X_2:bit,
X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ", "SQLfirst_value;", ""
]
-[ "sql", "flush_log", "unsafe command sql.flush_log():void ",
"SQLflush_log;", "" ]
+[ "sql", "flush_log", "unsafe pattern sql.flush_log():void ",
"SQLflush_log;", "" ]
[ "sql", "getVariable", "pattern sql.getVariable(X_1:int, X_2:str,
X_3:str):any_1 ", "getVariable;", "" ]
[ "sql", "getVersion", "command sql.getVersion(X_1:int):lng ",
"mvc_getVersion;", "" ]
[ "sql", "get_value", "pattern sql.get_value(X_1:str, X_2:str):lng ",
"mvc_get_value;", "" ]
[ "sql", "grow", "pattern sql.grow(X_1:bat[:oid], X_2:any_1):int ",
"mvc_grow_wrap;", "" ]
-[ "sql", "hot_snapshot", "unsafe command sql.hot_snapshot(X_1:str):void
", "SQLhot_snapshot;", "" ]
+[ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str):void
", "SQLhot_snapshot;", "" ]
[ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str,
X_2:bit):void ", "SQLhot_snapshot_wrap;", "" ]
[ "sql", "importColumn", "pattern sql.importColumn(X_2:str, X_3:bit,
X_4:str, X_5:int, X_6:oid) (X_0:bat[:any], X_1:oid) ",
"mvc_bin_import_column_wrap;", "" ]
[ "sql", "importTable", "unsafe pattern sql.importTable(X_1:str,
X_2:str, X_3:int, X_4:bit, X_5:str...):bat[:any]... ",
"mvc_bin_import_table_wrap;", "" ]
@@ -9418,7 +9418,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int], X_6:any...):int ",
"mvc_row_result_wrap;", "" ]
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:str, X_2:str,
X_3:str, X_4:int, X_5:int, X_6:int, X_7:any):int ",
"mvc_scalar_value_wrap;", "" ]
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int],
X_6:bat[:any]...):int ", "mvc_table_result_wrap;", "" ]
-[ "sql", "resume_log_flushing", "unsafe command
sql.resume_log_flushing():void ", "SQLresume_log_flushing;", ""
]
+[ "sql", "resume_log_flushing", "unsafe pattern
sql.resume_log_flushing():void ", "SQLresume_log_flushing;", ""
]
[ "sql", "reuse", "unsafe pattern sql.reuse(X_1:str,
X_2:str):void ", "SQLreuse;", "" ]
[ "sql", "row_number", "pattern sql.row_number(X_1:any_1, X_2:bit,
X_3:bit):int ", "SQLrow_number;", "" ]
[ "sql", "rt_credentials", "pattern sql.rt_credentials(X_3:str)
(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str]) ", "sql_rt_credentials_wrap;",
"" ]
@@ -9461,7 +9461,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "sum", "pattern sql.sum(X_1:int, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):lng ", "SQLsum;", "" ]
[ "sql", "sum", "pattern sql.sum(X_1:lng, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):lng ", "SQLsum;", "" ]
[ "sql", "sum", "pattern sql.sum(X_1:sht, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):lng ", "SQLsum;", "" ]
-[ "sql", "suspend_log_flushing", "unsafe command
sql.suspend_log_flushing():void ", "SQLsuspend_log_flushing;", ""
]
+[ "sql", "suspend_log_flushing", "unsafe pattern
sql.suspend_log_flushing():void ", "SQLsuspend_log_flushing;", ""
]
[ "sql", "tid", "pattern sql.tid(X_1:int, X_2:str, X_3:str):bat[:oid]
", "SQLtid;", "" ]
[ "sql", "tid", "pattern sql.tid(X_1:int, X_2:str, X_3:str, X_4:int,
X_5:int):bat[:oid] ", "SQLtid;", "" ]
[ "sql", "transaction", "unsafe pattern sql.transaction():void ",
"SQLtransaction2;", "" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12665,12 +12665,12 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "export_table", "unsafe pattern sql.export_table(X_1:str,
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str],
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int], X_13:any...):int
", "mvc_export_row_wrap;", "" ]
[ "sql", "export_table", "unsafe pattern sql.export_table(X_1:str,
X_2:str, X_3:str, X_4:str, X_5:str, X_6:str, X_7:int, X_8:bat[:str],
X_9:bat[:str], X_10:bat[:str], X_11:bat[:int], X_12:bat[:int],
X_13:bat[:any]...):int ", "mvc_export_table_wrap;", "" ]
[ "sql", "first_value", "pattern sql.first_value(X_1:any_1, X_2:bit,
X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ", "SQLfirst_value;", ""
]
-[ "sql", "flush_log", "unsafe command sql.flush_log():void ",
"SQLflush_log;", "" ]
+[ "sql", "flush_log", "unsafe pattern sql.flush_log():void ",
"SQLflush_log;", "" ]
[ "sql", "getVariable", "pattern sql.getVariable(X_1:int, X_2:str,
X_3:str):any_1 ", "getVariable;", "" ]
[ "sql", "getVersion", "command sql.getVersion(X_1:int):lng ",
"mvc_getVersion;", "" ]
[ "sql", "get_value", "pattern sql.get_value(X_1:str, X_2:str):lng ",
"mvc_get_value;", "" ]
[ "sql", "grow", "pattern sql.grow(X_1:bat[:oid], X_2:any_1):int ",
"mvc_grow_wrap;", "" ]
-[ "sql", "hot_snapshot", "unsafe command sql.hot_snapshot(X_1:str):void
", "SQLhot_snapshot;", "" ]
+[ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str):void
", "SQLhot_snapshot;", "" ]
[ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str,
X_2:bit):void ", "SQLhot_snapshot_wrap;", "" ]
[ "sql", "importColumn", "pattern sql.importColumn(X_2:str, X_3:bit,
X_4:str, X_5:int, X_6:oid) (X_0:bat[:any], X_1:oid) ",
"mvc_bin_import_column_wrap;", "" ]
[ "sql", "importTable", "unsafe pattern sql.importTable(X_1:str,
X_2:str, X_3:int, X_4:bit, X_5:str...):bat[:any]... ",
"mvc_bin_import_table_wrap;", "" ]
@@ -12729,7 +12729,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int], X_6:any...):int ",
"mvc_row_result_wrap;", "" ]
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:str, X_2:str,
X_3:str, X_4:int, X_5:int, X_6:int, X_7:any):int ",
"mvc_scalar_value_wrap;", "" ]
[ "sql", "resultSet", "unsafe pattern sql.resultSet(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:int], X_5:bat[:int],
X_6:bat[:any]...):int ", "mvc_table_result_wrap;", "" ]
-[ "sql", "resume_log_flushing", "unsafe command
sql.resume_log_flushing():void ", "SQLresume_log_flushing;", ""
]
+[ "sql", "resume_log_flushing", "unsafe pattern
sql.resume_log_flushing():void ", "SQLresume_log_flushing;", ""
]
[ "sql", "reuse", "unsafe pattern sql.reuse(X_1:str,
X_2:str):void ", "SQLreuse;", "" ]
[ "sql", "row_number", "pattern sql.row_number(X_1:any_1, X_2:bit,
X_3:bit):int ", "SQLrow_number;", "" ]
[ "sql", "rt_credentials", "pattern sql.rt_credentials(X_3:str)
(X_0:bat[:str], X_1:bat[:str], X_2:bat[:str]) ", "sql_rt_credentials_wrap;",
"" ]
@@ -12779,7 +12779,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "sum", "pattern sql.sum(X_1:lng, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):lng ", "SQLsum;", "" ]
[ "sql", "sum", "pattern sql.sum(X_1:sht, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):hge ", "SQLsum;", "" ]
[ "sql", "sum", "pattern sql.sum(X_1:sht, X_2:bit, X_3:bit, X_4:int,
X_5:oid, X_6:oid):lng ", "SQLsum;", "" ]
-[ "sql", "suspend_log_flushing", "unsafe command
sql.suspend_log_flushing():void ", "SQLsuspend_log_flushing;", ""
]
+[ "sql", "suspend_log_flushing", "unsafe pattern
sql.suspend_log_flushing():void ", "SQLsuspend_log_flushing;", ""
]
[ "sql", "tid", "pattern sql.tid(X_1:int, X_2:str, X_3:str):bat[:oid]
", "SQLtid;", "" ]
[ "sql", "tid", "pattern sql.tid(X_1:int, X_2:str, X_3:str, X_4:int,
X_5:int):bat[:oid] ", "SQLtid;", "" ]
[ "sql", "transaction", "unsafe pattern sql.transaction():void ",
"SQLtransaction2;", "" ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -525,7 +525,7 @@ gdk_return log_tstart(logger *lg);
gdk_return logger_add_bat(logger *lg, BAT *b, const char *name, char tpe, oid
id) __attribute__((__warn_unused_result__));
lng logger_changes(logger *lg);
gdk_return logger_cleanup(logger *lg);
-logger *logger_create(int debug, const char *fn, const char *logdir, int
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp);
+logger *logger_create(int debug, const char *fn, const char *logdir, int
version, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void
*funcdata);
gdk_return logger_del_bat(logger *lg, log_bid bid)
__attribute__((__warn_unused_result__));
void logger_destroy(logger *lg);
log_bid logger_find_bat(logger *lg, const char *name, char tpe, oid id);
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -136,10 +136,11 @@ typedef volatile atomic_flag ATOMIC_FLAG
* documentation.
*/
+typedef __declspec(align(8)) volatile int64_t ATOMIC_TYPE;
+typedef int64_t ATOMIC_BASE_TYPE;
+
#if SIZEOF_SIZE_T == 8
-typedef volatile int64_t ATOMIC_TYPE;
-typedef int64_t ATOMIC_BASE_TYPE;
#define ATOMIC_VAR_INIT(val) (val)
#define ATOMIC_INIT(var, val) (*(var) = (val))
#define ATOMIC_DESTROY(var) ((void) 0)
@@ -168,48 +169,30 @@ ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE
#define ATOMIC_INC(var) _InterlockedIncrement64(var)
#define ATOMIC_DEC(var) _InterlockedDecrement64(var)
-#pragma intrinsic(_InterlockedExchange64)
-#pragma intrinsic(_InterlockedExchangeAdd64)
-#pragma intrinsic(_InterlockedIncrement64)
-#pragma intrinsic(_InterlockedDecrement64)
-#pragma intrinsic(_InterlockedCompareExchange64)
-
#else
-typedef volatile int ATOMIC_TYPE;
-typedef int ATOMIC_BASE_TYPE;
#define ATOMIC_VAR_INIT(val) (val)
#define ATOMIC_INIT(var, val) (*(var) = (val))
#define ATOMIC_DESTROY(var) ((void) 0)
-#ifdef __INTEL_COMPILER
-#define ATOMIC_GET(var) _InterlockedExchangeAdd(var, 0)
-#else
-#define ATOMIC_GET(var) (*(var))
-/* should we use _InterlockedExchangeAdd(var, 0) instead? */
-#endif
-#define ATOMIC_SET(var, val) _InterlockedExchange(var, (ATOMIC_BASE_TYPE)
(val))
-#define ATOMIC_XCG(var, val) _InterlockedExchange(var, (ATOMIC_BASE_TYPE)
(val))
+#define ATOMIC_GET(var)
_InlineInterlockedExchangeAdd64(var, 0)
+#define ATOMIC_SET(var, val) _InlineInterlockedExchange64(var,
(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_XCG(var, val) _InlineInterlockedExchange64(var,
(ATOMIC_BASE_TYPE) (val))
static inline bool
ATOMIC_CAS(ATOMIC_TYPE *var, ATOMIC_BASE_TYPE *exp, ATOMIC_BASE_TYPE des)
{
ATOMIC_BASE_TYPE old;
- old = _InterlockedCompareExchange(var, des, *exp);
+ old = _InterlockedCompareExchange64(var, des, *exp);
if (old == *exp)
return true;
*exp = old;
return false;
}
#define ATOMIC_CAS(var, exp, des) ATOMIC_CAS(var, exp, (ATOMIC_BASE_TYPE)
(des))
-#define ATOMIC_ADD(var, val) _InterlockedExchangeAdd(var, (ATOMIC_BASE_TYPE)
(val))
-#define ATOMIC_SUB(var, val) _InterlockedExchangeAdd(var,
-(ATOMIC_BASE_TYPE) (val))
-#define ATOMIC_INC(var) _InterlockedIncrement(var)
-#define ATOMIC_DEC(var) _InterlockedDecrement(var)
-
-#pragma intrinsic(_InterlockedExchange)
-#pragma intrinsic(_InterlockedExchangeAdd)
-#pragma intrinsic(_InterlockedIncrement)
-#pragma intrinsic(_InterlockedDecrement)
+#define ATOMIC_ADD(var, val) _InlineInterlockedExchangeAdd64(var,
(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_SUB(var, val) _InlineInterlockedExchangeAdd64(var,
-(ATOMIC_BASE_TYPE) (val))
+#define ATOMIC_INC(var) _InlineInterlockedIncrement64(var)
+#define ATOMIC_DEC(var) _InlineInterlockedDecrement64(var)
#endif
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1430,7 +1430,7 @@ check_version(logger *lg, FILE *fp)
}
if (version != lg->version) {
if (lg->prefuncp == NULL ||
- (*lg->prefuncp)(version, lg->version) != GDK_SUCCEED) {
+ (*lg->prefuncp)(lg->funcdata, version, lg->version) !=
GDK_SUCCEED) {
GDKerror("Incompatible database version %06d, "
"this server supports version %06d.\n%s",
version, lg->version,
@@ -2296,7 +2296,7 @@ logger_load(int debug, const char *fn, c
lg->convert_date = false;
}
#endif
- if (lg->postfuncp && (*lg->postfuncp)(lg) != GDK_SUCCEED)
+ if (lg->postfuncp && (*lg->postfuncp)(lg->funcdata, lg) !=
GDK_SUCCEED)
goto error;
/* done reading the log, revert to "normal" behavior */
@@ -2331,7 +2331,7 @@ logger_load(int debug, const char *fn, c
/* Initialize a new logger
* It will load any data in the logdir and persist it in the BATs*/
static logger *
-logger_new(int debug, const char *fn, const char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_new(int debug, const char *fn, const char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata)
{
int len;
logger *lg;
@@ -2386,6 +2386,7 @@ logger_new(int debug, const char *fn, co
lg->prefuncp = prefuncp;
lg->postfuncp = postfuncp;
+ lg->funcdata = funcdata;
lg->log = NULL;
lg->end = 0;
lg->catalog_bid = NULL;
@@ -2414,10 +2415,10 @@ logger_restart(logger *lg)
/* Create a new logger */
logger *
-logger_create(int debug, const char *fn, const char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp)
+logger_create(int debug, const char *fn, const char *logdir, int version,
preversionfix_fptr prefuncp, postversionfix_fptr postfuncp, void *funcdata)
{
logger *lg;
- lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp);
+ lg = logger_new(debug, fn, logdir, version, prefuncp, postfuncp,
funcdata);
if (lg == NULL)
return NULL;
if (lg->debug & 1) {
diff --git a/gdk/gdk_logger.h b/gdk/gdk_logger.h
--- a/gdk/gdk_logger.h
+++ b/gdk/gdk_logger.h
@@ -11,8 +11,8 @@
#define LOGFILE "log"
-typedef gdk_return (*preversionfix_fptr)(int oldversion, int newversion);
-typedef gdk_return (*postversionfix_fptr)(void *lg);
+typedef gdk_return (*preversionfix_fptr)(void *data, int oldversion, int
newversion);
+typedef gdk_return (*postversionfix_fptr)(void *data, void *lg);
typedef struct logger logger;
@@ -38,7 +38,7 @@ typedef int log_bid;
#define LOG_COL 2
#define LOG_IDX 3
-gdk_export logger *logger_create(int debug, const char *fn, const char
*logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr
postfuncp);
+gdk_export logger *logger_create(int debug, const char *fn, const char
*logdir, int version, preversionfix_fptr prefuncp, postversionfix_fptr
postfuncp, void *funcdata);
gdk_export void logger_destroy(logger *lg);
gdk_export gdk_return logger_flush(logger *lg, lng save_id);
gdk_export gdk_return logger_cleanup(logger *lg);
diff --git a/gdk/gdk_logger_internals.h b/gdk/gdk_logger_internals.h
--- a/gdk/gdk_logger_internals.h
+++ b/gdk/gdk_logger_internals.h
@@ -26,6 +26,7 @@ struct logger {
char *local_dir; /* the directory in which the log is written */
preversionfix_fptr prefuncp;
postversionfix_fptr postfuncp;
+ void *funcdata;
stream *log;
lng end; /* end of pre-allocated blocks for faster
f(data)sync */
/* Store log_bids (int) to circumvent trouble with reference counting */
diff --git a/monetdb5/optimizer/opt_inline.c b/monetdb5/optimizer/opt_inline.c
--- a/monetdb5/optimizer/opt_inline.c
+++ b/monetdb5/optimizer/opt_inline.c
@@ -29,9 +29,10 @@ static bool OPTinlineMultiplex(Client cn
Symbol s;
str mod,fcn;
- mod = VALget(&getVar(mb, getArg(p, 1))->value);
- fcn = VALget(&getVar(mb, getArg(p, 2))->value);
- if( (s= findSymbol(cntxt->usermodule, mod,fcn)) ==0 )
+ mod = VALget(&getVar(mb, getArg(p, p->retc+0))->value);
+ fcn = VALget(&getVar(mb, getArg(p, p->retc+1))->value);
+ //if( (s= findSymbol(cntxt->usermodule, mod,fcn)) ==0 )
+ if( (s= findSymbolInModule(getModule(putName(mod)), putName(fcn))) ==0 )
return false;
if (s->def == mb) /* avoid infinite recursion */
return false;
@@ -43,7 +44,9 @@ static bool OPTinlineMultiplex(Client cn
* This code should be protected against overflow due to recursive
calls.
* In general, this is a hard problem. For now, we just expand.
*/
+ MT_lock_set(&mal_contextLock);
(void) OPTinlineImplementation(cntxt, s->def, NULL, p);
+ MT_lock_unset(&mal_contextLock);
return s->def->inlineProp;
}
diff --git a/monetdb5/optimizer/opt_remap.c b/monetdb5/optimizer/opt_remap.c
--- a/monetdb5/optimizer/opt_remap.c
+++ b/monetdb5/optimizer/opt_remap.c
@@ -115,13 +115,13 @@ OPTmultiplexInline(Client cntxt, MalBlkP
int i,j,k,m, actions=0;
int refbat=0, retc = p->retc;
bit *upgrade;
- Symbol s;
str msg;
- s= findSymbol(cntxt->usermodule,
- VALget(&getVar(mb, getArg(p, retc+0))->value),
- VALget(&getVar(mb, getArg(p, retc+1))->value));
+ str mod = VALget(&getVar(mb, getArg(p, retc+0))->value);
+ str fcn = VALget(&getVar(mb, getArg(p, retc+1))->value);
+ //Symbol s = findSymbol(cntxt->usermodule, mod,fcn);
+ Symbol s = findSymbolInModule(getModule(putName(mod)), putName(fcn));
if( s== NULL || !isSideEffectFree(s->def) ||
getInstrPtr(s->def,0)->retc != p->retc ) {
@@ -396,9 +396,10 @@ OPTremapImplementation(Client cntxt, Mal
* such as the calculator functions. It is particularly
* geared at handling the PSM code.
*/
- str mod = VALget(&getVar(mb, getArg(p, 1))->value);
- str fcn = VALget(&getVar(mb, getArg(p, 2))->value);
- Symbol s = findSymbol(cntxt->usermodule, mod,fcn);
+ str mod = VALget(&getVar(mb, getArg(p,
p->retc+0))->value);
+ str fcn = VALget(&getVar(mb, getArg(p,
p->retc+1))->value);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list