Changeset: dea9da51f9fe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dea9da51f9fe
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql_bat2time.c
Branch: default
Log Message:
Added missing bulk implementations for more interval functions
diffs (truncated from 399 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
@@ -4586,6 +4586,8 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:oid],
X_2:int, X_3:bat[:bit]):bat[:daytime] ", "batnil_ce_2time_daytime;",
"" ]
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str],
X_2:int):bat[:daytime] ", "batstr_2time_daytime;", "" ]
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str],
X_2:int, X_3:int):bat[:daytime] ", "batstr_2time_daytimetz;", ""
]
+[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp],
X_2:int):bat[:daytime] ", "battimestamp_2_daytime;", "" ]
+[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng],
X_2:int):bat[:daytime] ", "second_interval_2_daytime;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit]):bat[:dbl] ",
"CMDconvertsignal_dbl;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit],
X_2:bat[:bit]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit],
X_2:bat[:oid]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ]
@@ -6436,6 +6438,7 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:int], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:lng], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:sht], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
+[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:daytime], X_2:int, X_3:int):bat[:lng] ",
"second_interval_daytime;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:str], X_2:int, X_3:int):bat[:lng] ",
"second_interval_str;", "" ]
[ "batcalc", "second_interval", "command
batcalc.second_interval(X_1:int, X_2:bat[:sht], X_3:int, X_4:int):bat[:lng] ",
"sht_batdec2second_interval;", "" ]
[ "batcalc", "sht", "pattern batcalc.sht(X_1:bat[:bit]):bat[:sht] ",
"CMDconvertsignal_sht;", "" ]
@@ -6798,6 +6801,7 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:int]):bat[:timestamp] ",
"MTIMEtimestamp_fromsecond_bulk;", "" ]
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ",
"MTIMEtimestamp_fromstr_bulk;", "" ]
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ",
"MTIMEtimestamp_timestamp_bulk;", "" ]
+[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date],
X_2:int):bat[:timestamp] ", "batdate_2_timestamp;", "" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:oid],
X_2:int):bat[:timestamp] ", "batnil_2time_timestamp;", "" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:oid],
X_2:int, X_3:bat[:BAT]):bat[:timestamp] ", "batnil_ce_2time_timestamp;",
"" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str],
X_2:int):bat[:timestamp] ", "batstr_2time_timestamp;", "" ]
@@ -8615,7 +8619,7 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "daytime", "command calc.daytime(X_1:timestamp):daytime ",
"MTIMEtimestamp_extract_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:daytime,
X_2:int):daytime ", "daytime_2time_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:void,
X_2:int):daytime ", "nil_2time_daytime;", "" ]
-[ "calc", "daytime", "command calc.daytime(X_1:lng, X_2:int):daytime
", "second_interval_2_daytime;", "" ]
+[ "calc", "daytime", "pattern calc.daytime(X_1:lng, X_2:int):daytime
", "second_interval_2_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:str, X_2:int):daytime
", "str_2time_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:str, X_2:int,
X_3:int):daytime ", "str_2time_daytimetz;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:timestamp,
X_2:int):daytime ", "timestamp_2_daytime;", "" ]
@@ -9047,7 +9051,7 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "second_interval", "pattern calc.second_interval(X_1:int,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:lng,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:sht,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
-[ "calc", "second_interval", "command
calc.second_interval(X_1:daytime, X_2:int, X_3:int):lng ",
"second_interval_daytime;", "" ]
+[ "calc", "second_interval", "pattern
calc.second_interval(X_1:daytime, X_2:int, X_3:int):lng ",
"second_interval_daytime;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:str,
X_2:int, X_3:int):lng ", "second_interval_str;", "" ]
[ "calc", "second_interval", "command calc.second_interval(X_1:int,
X_2:sht, X_3:int, X_4:int):lng ", "sht_dec2second_interval;", ""
]
[ "calc", "sht", "pattern calc.sht(X_1:bit):sht ",
"CMDvarCONVERT;", "" ]
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
@@ -6285,6 +6285,8 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:oid],
X_2:int, X_3:bat[:bit]):bat[:daytime] ", "batnil_ce_2time_daytime;",
"" ]
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str],
X_2:int):bat[:daytime] ", "batstr_2time_daytime;", "" ]
[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:str],
X_2:int, X_3:int):bat[:daytime] ", "batstr_2time_daytimetz;", ""
]
+[ "batcalc", "daytime", "command batcalc.daytime(X_1:bat[:timestamp],
X_2:int):bat[:daytime] ", "battimestamp_2_daytime;", "" ]
+[ "batcalc", "daytime", "pattern batcalc.daytime(X_1:bat[:lng],
X_2:int):bat[:daytime] ", "second_interval_2_daytime;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit]):bat[:dbl] ",
"CMDconvertsignal_dbl;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit],
X_2:bat[:bit]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ]
[ "batcalc", "dbl", "pattern batcalc.dbl(X_1:bat[:bit],
X_2:bat[:oid]):bat[:dbl] ", "CMDconvertsignal_dbl;", "" ]
@@ -8989,6 +8991,7 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:int], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:lng], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:sht], X_2:int, X_3:int):bat[:lng] ",
"second_interval;", "" ]
+[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:daytime], X_2:int, X_3:int):bat[:lng] ",
"second_interval_daytime;", "" ]
[ "batcalc", "second_interval", "pattern
batcalc.second_interval(X_1:bat[:str], X_2:int, X_3:int):bat[:lng] ",
"second_interval_str;", "" ]
[ "batcalc", "second_interval", "command
batcalc.second_interval(X_1:int, X_2:bat[:sht], X_3:int, X_4:int):bat[:lng] ",
"sht_batdec2second_interval;", "" ]
[ "batcalc", "sht", "pattern batcalc.sht(X_1:bat[:bit]):bat[:sht] ",
"CMDconvertsignal_sht;", "" ]
@@ -9447,6 +9450,7 @@ stdout of test 'MAL-signatures` in direc
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:int]):bat[:timestamp] ",
"MTIMEtimestamp_fromsecond_bulk;", "" ]
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:str]):bat[:timestamp] ",
"MTIMEtimestamp_fromstr_bulk;", "" ]
[ "batcalc", "timestamp", "command
batcalc.timestamp(X_1:bat[:timestamp]):bat[:timestamp] ",
"MTIMEtimestamp_timestamp_bulk;", "" ]
+[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:date],
X_2:int):bat[:timestamp] ", "batdate_2_timestamp;", "" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:oid],
X_2:int):bat[:timestamp] ", "batnil_2time_timestamp;", "" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:oid],
X_2:int, X_3:bat[:BAT]):bat[:timestamp] ", "batnil_ce_2time_timestamp;",
"" ]
[ "batcalc", "timestamp", "command batcalc.timestamp(X_1:bat[:str],
X_2:int):bat[:timestamp] ", "batstr_2time_timestamp;", "" ]
@@ -11731,7 +11735,7 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "daytime", "command calc.daytime(X_1:timestamp):daytime ",
"MTIMEtimestamp_extract_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:daytime,
X_2:int):daytime ", "daytime_2time_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:void,
X_2:int):daytime ", "nil_2time_daytime;", "" ]
-[ "calc", "daytime", "command calc.daytime(X_1:lng, X_2:int):daytime
", "second_interval_2_daytime;", "" ]
+[ "calc", "daytime", "pattern calc.daytime(X_1:lng, X_2:int):daytime
", "second_interval_2_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:str, X_2:int):daytime
", "str_2time_daytime;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:str, X_2:int,
X_3:int):daytime ", "str_2time_daytimetz;", "" ]
[ "calc", "daytime", "command calc.daytime(X_1:timestamp,
X_2:int):daytime ", "timestamp_2_daytime;", "" ]
@@ -12367,7 +12371,7 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "second_interval", "pattern calc.second_interval(X_1:int,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:lng,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:sht,
X_2:int, X_3:int):lng ", "second_interval;", "" ]
-[ "calc", "second_interval", "command
calc.second_interval(X_1:daytime, X_2:int, X_3:int):lng ",
"second_interval_daytime;", "" ]
+[ "calc", "second_interval", "pattern
calc.second_interval(X_1:daytime, X_2:int, X_3:int):lng ",
"second_interval_daytime;", "" ]
[ "calc", "second_interval", "pattern calc.second_interval(X_1:str,
X_2:int, X_3:int):lng ", "second_interval_str;", "" ]
[ "calc", "second_interval", "command calc.second_interval(X_1:int,
X_2:sht, X_3:int, X_4:int):lng ", "sht_dec2second_interval;", ""
]
[ "calc", "sht", "pattern calc.sht(X_1:bit):sht ",
"CMDvarCONVERT;", "" ]
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -3622,16 +3622,70 @@ daytime_2time_daytime(daytime *res, cons
}
str
-second_interval_2_daytime(daytime *res, const lng *s, const int *digits)
+second_interval_2_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
- daytime d;
-
- if (*s == lng_nil) {
- *res = daytime_nil;
- return MAL_SUCCEED;
- }
- d = daytime_add_usec(daytime_create(0, 0, 0, 0), *s * 1000);
- return daytime_2time_daytime(res, &d, digits);
+ str msg = MAL_SUCCEED;
+ daytime *restrict ret = NULL;
+ int tpe = getArgType(mb, pci, 1), *digits = getArgReference_int(stk,
pci, 2);
+ bool is_a_bat = false;
+ BAT *b = NULL, *res = NULL;
+ bat *r;
+ BUN q = 0;
+
+ (void) cntxt;
+ is_a_bat = isaBatType(tpe);
+ if (is_a_bat) {
+ tpe = getBatType(tpe);
+ if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 1)))) {
+ msg = createException(SQL,
"calc.second_interval_2_daytime", SQLSTATE(HY005) "Cannot access column
descriptor");
+ goto bailout;
+ }
+ q = BATcount(b);
+ if (!(res = COLnew(b->hseqbase, TYPE_daytime, q, TRANSIENT))) {
+ msg = createException(SQL,
"calc.second_interval_2_daytime", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ r = getArgReference_bat(stk, pci, 0);
+ ret = (daytime*) Tloc(res, 0);
+ } else {
+ ret = (daytime*) getArgReference(stk, pci, 0);
+ }
+
+ if (is_a_bat) {
+ lng *restrict vals = (lng*) Tloc(b, 0);
+ for (BUN i = 0 ; i < q && !msg ; i++) {
+ lng next = vals[i];
+ if (is_lng_nil(next)) {
+ ret[i] = daytime_nil;
+ } else {
+ daytime d = daytime_add_usec(daytime_create(0,
0, 0, 0), next * 1000);
+ msg = daytime_2time_daytime(&(ret[i]), &d,
digits);
+ }
+ }
+ } else {
+ lng next = *(lng*)getArgReference(stk, pci, 1);
+ if (is_lng_nil(next)) {
+ *ret = daytime_nil;
+ } else {
+ daytime d = daytime_add_usec(daytime_create(0, 0, 0,
0), next * 1000);
+ msg = daytime_2time_daytime(ret, &d, digits);
+ }
+ }
+
+bailout:
+ if (res && !msg) {
+ BATsetcount(res, q);
+ res->tnil = b->tnil;
+ res->tnonil = b->tnonil;
+ res->tkey = BATcount(res) <= 1;
+ res->tsorted = BATcount(res) <= 1;
+ res->trevsorted = BATcount(res) <= 1;
+ BBPkeepref(*r = res->batCacheid);
+ } else if (res)
+ BBPreclaim(res);
+ if (b)
+ BBPunfix(b->batCacheid);
+ return msg;
}
str
@@ -4229,36 +4283,81 @@ bailout:
}
str
-second_interval_daytime(lng *res, const daytime *s, const int *d, const int
*sk)
+second_interval_daytime(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
- int k = digits2sk(*d);
- lng r = *(int *) s;
-
- (void) sk;
- if (is_daytime_nil(*s)) {
- *res = lng_nil;
- return MAL_SUCCEED;
- }
+ str msg = MAL_SUCCEED;
+ lng *restrict ret = NULL, multiplier = 1, divider = 1;
+ int tpe = getArgType(mb, pci, 1), k =
digits2ek(*getArgReference_int(stk, pci, 2));
+ bool is_a_bat = false;
+ BAT *b = NULL, *res = NULL;
+ bat *r;
+ BUN q = 0;
+
+ (void) cntxt;
+ is_a_bat = isaBatType(tpe);
+ if (is_a_bat) {
+ tpe = getBatType(tpe);
+ if (!(b = BATdescriptor(*getArgReference_bat(stk, pci, 1)))) {
+ msg = createException(SQL,
"calc.second_interval_daytime", SQLSTATE(HY005) "Cannot access column
descriptor");
+ goto bailout;
+ }
+ q = BATcount(b);
+ if (!(res = COLnew(b->hseqbase, TYPE_lng, q, TRANSIENT))) {
+ msg = createException(SQL,
"calc.second_interval_daytime", SQLSTATE(HY013) MAL_MALLOC_FAIL);
+ goto bailout;
+ }
+ r = getArgReference_bat(stk, pci, 0);
+ ret = (lng*) Tloc(res, 0);
+ } else {
+ ret = getArgReference_lng(stk, pci, 0);
+ }
+
switch (k) {
case isec:
break;
case imin:
- r /= 60000;
- r *= 60000;
+ divider *= 60000;
+ multiplier *= 60000;
break;
case ihour:
- r /= 3600000;
- r *= 3600000;
+ divider *= 3600000;
+ multiplier *= 3600000;
break;
case iday:
- r /= (24 * 3600000);
- r *= (24 * 3600000);
+ divider *= (24 * 3600000);
+ multiplier *= (24 * 3600000);
break;
- default:
- throw(ILLARG, "calc.second_interval", SQLSTATE(42000) "Illegal
argument in daytime interval");
- }
- *res = r;
- return MAL_SUCCEED;
+ default: {
+ msg = createException(ILLARG, "calc.second_interval_daytime",
SQLSTATE(42000) "Illegal argument in daytime interval");
+ goto bailout;
+ }
+ }
+
+ if (is_a_bat) {
+ daytime *restrict vals = (daytime*) Tloc(b, 0);
+ for (BUN i = 0 ; i < q ; i++) {
+ daytime next = vals[i];
+ ret[i] = is_daytime_nil(next) ? lng_nil : (next /
divider) * multiplier;
+ }
+ } else {
+ daytime next = *(daytime*)getArgReference(stk, pci, 1);
+ *ret = is_daytime_nil(next) ? lng_nil : (next / divider) *
multiplier;
+ }
+
+bailout:
+ if (res && !msg) {
+ BATsetcount(res, q);
+ res->tnil = b->tnil;
+ res->tnonil = b->tnonil;
+ res->tkey = BATcount(res) <= 1;
+ res->tsorted = BATcount(res) <= 1;
+ res->trevsorted = BATcount(res) <= 1;
+ BBPkeepref(*r = res->batCacheid);
+ } else if (res)
+ BBPreclaim(res);
+ if (b)
+ BBPunfix(b->batCacheid);
+ return msg;
}
str
@@ -6339,10 +6438,14 @@ static mel_func sql_init_funcs[] = {
pattern("sql", "drop_hash", SQLdrop_hash, true, "Drop hash indices for the
given table", args(0,2, arg("sch",str),arg("tbl",str))),
pattern("sql", "prelude", SQLprelude, false, "", noargs),
command("sql", "epilogue", SQLepilogue, false, "", noargs),
- command("calc", "second_interval", second_interval_daytime, false, "cast
daytime to a second_interval and check for overflow", args(1,4,
arg("",lng),arg("v",daytime),arg("ek",int),arg("sk",int))),
- command("calc", "daytime", second_interval_2_daytime, false, "cast
second_interval to a daytime and check for overflow", args(1,3,
arg("",daytime),arg("v",lng),arg("d",int))),
+ pattern("calc", "second_interval", second_interval_daytime, false, "cast
daytime to a second_interval and check for overflow", args(1,4,
arg("",lng),arg("v",daytime),arg("ek",int),arg("sk",int))),
+ pattern("batcalc", "second_interval", second_interval_daytime, false, "cast
daytime to a second_interval and check for overflow", args(1,4,
batarg("",lng),batarg("v",daytime),arg("ek",int),arg("sk",int))),
+ pattern("calc", "daytime", second_interval_2_daytime, false, "cast
second_interval to a daytime and check for overflow", args(1,3,
arg("",daytime),arg("v",lng),arg("d",int))),
+ pattern("batcalc", "daytime", second_interval_2_daytime, false, "cast
second_interval to a daytime and check for overflow", args(1,3,
batarg("",daytime),batarg("v",lng),arg("d",int))),
command("calc", "daytime", timestamp_2_daytime, false, "cast timestamp to a
daytime and check for overflow", args(1,3,
arg("",daytime),arg("v",timestamp),arg("d",int))),
+ command("batcalc", "daytime", battimestamp_2_daytime, false, "cast timestamp
to a daytime and check for overflow", args(1,3,
batarg("",daytime),batarg("v",timestamp),arg("d",int))),
command("calc", "timestamp", date_2_timestamp, false, "cast date to a
timestamp and check for overflow", args(1,3,
arg("",timestamp),arg("v",date),arg("d",int))),
+ command("batcalc", "timestamp", batdate_2_timestamp, false, "cast date to a
timestamp and check for overflow", args(1,3,
batarg("",timestamp),batarg("v",date),arg("d",int))),
command("calc", "index", STRindex_bte, false, "Return the offsets as an index
bat", args(1,3, arg("",bte),arg("v",str),arg("u",bit))),
command("batcalc", "index", BATSTRindex_bte, false, "Return the offsets as an
index bat", args(1,3, batarg("",bte),batarg("v",str),arg("u",bit))),
command("calc", "index", STRindex_sht, false, "Return the offsets as an index
bat", args(1,3, arg("",sht),arg("v",str),arg("u",bit))),
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -282,7 +282,7 @@ sql5_export str SQLbat_alpha_cst(bat *re
sql5_export str SQLcst_alpha_bat(bat *res, const dbl *decl, const bat *theta);
sql5_export str month_interval(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list