Changeset: 11b6e5900791 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=11b6e5900791
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
clients/Tests/exports.stable.out
monetdb5/ChangeLog
monetdb5/modules/kernel/group.c
monetdb5/modules/kernel/group.h
monetdb5/modules/kernel/group.mal
Branch: default
Log Message:
Implemented versions of group.(sub)group(done) that don't return a histogram.
diffs (233 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
@@ -7689,17 +7689,29 @@ Ready.
[ "geom", "setSRID", "command geom.setSRID(w:wkb, srid:int):wkb ",
"wkbSetSRID;", "Sets the Reference System ID for this Geometry." ]
[ "group", "group", "command group.group(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", ""
]
[ "group", "group", "command group.group(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPgroup2;", "" ]
+[ "group", "group", "command group.group(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ]
+[ "group", "group", "command group.group(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", ""
]
[ "group", "groupdone", "command group.groupdone(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;",
"" ]
[ "group", "groupdone", "command group.groupdone(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPgroup2;", "" ]
+[ "group", "groupdone", "command group.groupdone(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ]
+[ "group", "groupdone", "command group.groupdone(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", ""
]
[ "group", "multicolumn", "pattern group.multicolumn(b:bat[:any]...)
(ref:bat[:oid], grp:bat[:oid], hist:bat[:any]) ", "GROUPmulticolumngroup;",
"Derivation of a group index over multiple columns." ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPsubgroup2;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup3;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup4;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;",
"" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup7;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup8;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid]) ", "GRPsubgroup9;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPsubgroup2;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup3;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup4;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;",
"" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup7;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup8;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid]) ", "GRPsubgroup9;", "" ]
[ "identifier", "#fromstr", "command identifier.#fromstr():void ",
"IDfromString;", "Convert a string to an identifier without any check"
]
[ "identifier", "#tostr", "command identifier.#tostr():void ",
"IDtoString;", "Convert identifier to string equivalent" ]
[ "identifier", "identifier", "command
identifier.identifier(s:str):identifier ", "IDentifier;", "Cast a string
to an identifer " ]
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
@@ -10045,17 +10045,29 @@ Ready.
[ "geom", "setSRID", "command geom.setSRID(w:wkb, srid:int):wkb ",
"wkbSetSRID;", "Sets the Reference System ID for this Geometry." ]
[ "group", "group", "command group.group(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;", ""
]
[ "group", "group", "command group.group(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPgroup2;", "" ]
+[ "group", "group", "command group.group(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ]
+[ "group", "group", "command group.group(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", ""
]
[ "group", "groupdone", "command group.groupdone(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ", "GRPgroup1;",
"" ]
[ "group", "groupdone", "command group.groupdone(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPgroup2;", "" ]
+[ "group", "groupdone", "command group.groupdone(b:bat[:any_1])
(groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup3;", "" ]
+[ "group", "groupdone", "command group.groupdone(b:bat[:any_1],
s:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPgroup4;", ""
]
[ "group", "multicolumn", "pattern group.multicolumn(b:bat[:any]...)
(ref:bat[:oid], grp:bat[:oid], hist:bat[:any]) ", "GROUPmulticolumngroup;",
"Derivation of a group index over multiple columns." ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPsubgroup2;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup3;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup4;", "" ]
[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;",
"" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup7;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup8;", "" ]
+[ "group", "subgroup", "command group.subgroup(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid]) ", "GRPsubgroup9;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid], histo:bat[:lng]) ",
"GRPsubgroup2;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup3;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid],
histo:bat[:lng]) ", "GRPsubgroup4;", "" ]
[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid], histo:bat[:lng]) ", "GRPsubgroup5;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ", "GRPsubgroup6;",
"" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup7;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid], extents:bat[:oid]) ",
"GRPsubgroup8;", "" ]
+[ "group", "subgroupdone", "command group.subgroupdone(b:bat[:any_1],
s:bat[:oid], g:bat[:oid], e:bat[:oid], h:bat[:lng]) (groups:bat[:oid],
extents:bat[:oid]) ", "GRPsubgroup9;", "" ]
[ "identifier", "#fromstr", "command identifier.#fromstr():void ",
"IDfromString;", "Convert a string to an identifier without any check"
]
[ "identifier", "#tostr", "command identifier.#tostr():void ",
"IDtoString;", "Convert identifier to string equivalent" ]
[ "identifier", "identifier", "command
identifier.identifier(s:str):identifier ", "IDentifier;", "Cast a string
to an identifer " ]
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
@@ -1131,10 +1131,16 @@ str FCTshutdown(Client cntxt, MalBlkPtr
str GROUPmulticolumngroup(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
str GRPgroup1(bat *ngid, bat *next, bat *nhis, const bat *bid);
str GRPgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid);
+str GRPgroup3(bat *ngid, bat *next, const bat *bid);
+str GRPgroup4(bat *ngid, bat *next, const bat *bid, const bat *sid);
str GRPsubgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat
*gid);
str GRPsubgroup3(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat
*sid, const bat *gid);
str GRPsubgroup4(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat
*gid, const bat *eid, const bat *hid);
str GRPsubgroup5(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat
*sid, const bat *gid, const bat *eid, const bat *hid);
+str GRPsubgroup6(bat *ngid, bat *next, const bat *bid, const bat *gid);
+str GRPsubgroup7(bat *ngid, bat *next, const bat *bid, const bat *sid, const
bat *gid);
+str GRPsubgroup8(bat *ngid, bat *next, const bat *bid, const bat *gid, const
bat *eid, const bat *hid);
+str GRPsubgroup9(bat *ngid, bat *next, const bat *bid, const bat *sid, const
bat *gid, const bat *eid, const bat *hid);
str IDentifier(identifier *retval, str *in);
int IDfromString(str src, int *len, identifier *retval);
str IDprelude(void *ret);
diff --git a/monetdb5/ChangeLog b/monetdb5/ChangeLog
--- a/monetdb5/ChangeLog
+++ b/monetdb5/ChangeLog
@@ -1,6 +1,10 @@
# ChangeLog file for MonetDB5
# This file is updated with Maddlog
+* Sat Aug 19 2017 Sjoerd Mullender <[email protected]>
+- Implemented versions of group.(sub)group(done) that don't return
+ a histogram.
+
* Mon Aug 7 2017 Sjoerd Mullender <[email protected]>
- Removed MAL functions streams.socketRead, streams.socketReadBytes,
streams.socketWrite, and streams.socketWriteBytes.
diff --git a/monetdb5/modules/kernel/group.c b/monetdb5/modules/kernel/group.c
--- a/monetdb5/modules/kernel/group.c
+++ b/monetdb5/modules/kernel/group.c
@@ -58,6 +58,30 @@ GRPsubgroup5(bat *ngid, bat *next, bat *
}
str
+GRPsubgroup9(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat
*gid, const bat *eid, const bat *hid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, sid, gid, eid, hid);
+}
+
+str
+GRPsubgroup8(bat *ngid, bat *next, const bat *bid, const bat *gid, const bat
*eid, const bat *hid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, NULL, gid, eid, hid);
+}
+
+str
+GRPsubgroup7(bat *ngid, bat *next, const bat *bid, const bat *sid, const bat
*gid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, sid, gid, NULL, NULL);
+}
+
+str
+GRPsubgroup6(bat *ngid, bat *next, const bat *bid, const bat *gid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, NULL, gid, NULL, NULL);
+}
+
+str
GRPsubgroup4(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *gid,
const bat *eid, const bat *hid)
{
return GRPsubgroup5(ngid, next, nhis, bid, NULL, gid, eid, hid);
@@ -76,6 +100,18 @@ GRPsubgroup2(bat *ngid, bat *next, bat *
}
str
+GRPgroup4(bat *ngid, bat *next, const bat *bid, const bat *sid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, sid, NULL, NULL, NULL);
+}
+
+str
+GRPgroup3(bat *ngid, bat *next, const bat *bid)
+{
+ return GRPsubgroup5(ngid, next, NULL, bid, NULL, NULL, NULL, NULL);
+}
+
+str
GRPgroup2(bat *ngid, bat *next, bat *nhis, const bat *bid, const bat *sid)
{
return GRPsubgroup5(ngid, next, nhis, bid, sid, NULL, NULL, NULL);
diff --git a/monetdb5/modules/kernel/group.h b/monetdb5/modules/kernel/group.h
--- a/monetdb5/modules/kernel/group.h
+++ b/monetdb5/modules/kernel/group.h
@@ -13,6 +13,9 @@
mal_export str GRPgroup1(bat *ngid, bat *next, bat *nhis, const bat *bid);
mal_export str GRPgroup2(bat *ngid, bat *next, bat *nhis,
const bat *bid, const bat
*sid);
+mal_export str GRPgroup3(bat *ngid, bat *next, const bat *bid);
+mal_export str GRPgroup4(bat *ngid, bat *next,
+ const bat *bid, const bat
*sid);
mal_export str GRPsubgroup2(bat *ngid, bat *next, bat *nhis,
const bat *bid, const
bat *gid);
mal_export str GRPsubgroup3(bat *ngid, bat *next, bat *nhis,
@@ -24,5 +27,16 @@ mal_export str GRPsubgroup4(bat *ngid, b
mal_export str GRPsubgroup5(bat *ngid, bat *next, bat *nhis,
const bat *bid, const
bat *sid,
const bat *gid, const
bat *eid, const bat *hid);
+mal_export str GRPsubgroup6(bat *ngid, bat *next,
+ const bat *bid, const
bat *gid);
+mal_export str GRPsubgroup7(bat *ngid, bat *next,
+ const bat *bid, const
bat *sid,
+ const bat *gid);
+mal_export str GRPsubgroup8(bat *ngid, bat *next,
+ const bat *bid, const
bat *gid,
+ const bat *eid, const
bat *hid);
+mal_export str GRPsubgroup9(bat *ngid, bat *next,
+ const bat *bid, const
bat *sid,
+ const bat *gid, const
bat *eid, const bat *hid);
#endif /* _GROUP_H_ */
diff --git a/monetdb5/modules/kernel/group.mal
b/monetdb5/modules/kernel/group.mal
--- a/monetdb5/modules/kernel/group.mal
+++ b/monetdb5/modules/kernel/group.mal
@@ -10,6 +10,10 @@ command group(b:bat[:any_1]) (groups:bat
address GRPgroup1;
command group(b:bat[:any_1],s:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPgroup2;
+command group(b:bat[:any_1]) (groups:bat[:oid],extents:bat[:oid])
+address GRPgroup3;
+command group(b:bat[:any_1],s:bat[:oid]) (groups:bat[:oid],extents:bat[:oid])
+address GRPgroup4;
command subgroup(b:bat[:any_1],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPsubgroup2;
command subgroup(b:bat[:any_1],s:bat[:oid],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
@@ -18,11 +22,23 @@ command subgroup(b:bat[:any_1],g:bat[:oi
address GRPsubgroup4;
command
subgroup(b:bat[:any_1],s:bat[:oid],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPsubgroup5;
+command subgroup(b:bat[:any_1],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup6;
+command subgroup(b:bat[:any_1],s:bat[:oid],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup7;
+command subgroup(b:bat[:any_1],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup8;
+command
subgroup(b:bat[:any_1],s:bat[:oid],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup9;
command groupdone(b:bat[:any_1])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPgroup1;
command groupdone(b:bat[:any_1],s:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPgroup2;
+command groupdone(b:bat[:any_1]) (groups:bat[:oid],extents:bat[:oid])
+address GRPgroup3;
+command groupdone(b:bat[:any_1],s:bat[:oid])
(groups:bat[:oid],extents:bat[:oid])
+address GRPgroup4;
command subgroupdone(b:bat[:any_1],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPsubgroup2;
command subgroupdone(b:bat[:any_1],s:bat[:oid],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
@@ -31,3 +47,11 @@ command subgroupdone(b:bat[:any_1],g:bat
address GRPsubgroup4;
command
subgroupdone(b:bat[:any_1],s:bat[:oid],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid],histo:bat[:lng])
address GRPsubgroup5;
+command subgroupdone(b:bat[:any_1],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup6;
+command subgroupdone(b:bat[:any_1],s:bat[:oid],g:bat[:oid])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup7;
+command subgroupdone(b:bat[:any_1],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup8;
+command
subgroupdone(b:bat[:any_1],s:bat[:oid],g:bat[:oid],e:bat[:oid],h:bat[:lng])
(groups:bat[:oid],extents:bat[:oid])
+address GRPsubgroup9;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list