Changeset: b0ba5e0208a7 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b0ba5e0208a7
Modified Files:
clients/Tests/exports.stable.out
geom/monetdb5/geom.mal
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
monetdb5/mal/Tests/All
monetdb5/mal/Tests/tst3050.mal
monetdb5/mal/mal.h
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_listing.c
monetdb5/mal/mal_parser.c
monetdb5/modules/atoms/mtime.mal
monetdb5/modules/atoms/streams.mal
monetdb5/modules/kernel/alarm.mal
monetdb5/modules/kernel/mmath.mal
monetdb5/modules/mal/manifold.c
monetdb5/optimizer/Tests/All
monetdb5/optimizer/Tests/dataflow3.mal
monetdb5/optimizer/Tests/dataflow3.stable.out
monetdb5/optimizer/Tests/inline00.mal
monetdb5/optimizer/Tests/inline00.stable.out
monetdb5/optimizer/Tests/inline01.mal
monetdb5/optimizer/Tests/inline01.stable.out
monetdb5/optimizer/Tests/inline02.mal
monetdb5/optimizer/Tests/inline02.stable.out
monetdb5/optimizer/Tests/inline03.mal
monetdb5/optimizer/Tests/inline03.stable.out
monetdb5/optimizer/Tests/inline04.mal
monetdb5/optimizer/Tests/inline04.stable.out
monetdb5/optimizer/Tests/inline05.mal
monetdb5/optimizer/Tests/inline05.stable.out
monetdb5/optimizer/Tests/inline06.mal
monetdb5/optimizer/Tests/inline06.stable.out
monetdb5/optimizer/Tests/inline07.mal
monetdb5/optimizer/Tests/inline07.stable.out
monetdb5/optimizer/Tests/inline08.mal
monetdb5/optimizer/Tests/inline08.stable.out
monetdb5/optimizer/Tests/inline09.mal
monetdb5/optimizer/Tests/inline09.stable.out
monetdb5/optimizer/Tests/inline10.mal
monetdb5/optimizer/Tests/inline10.stable.out
monetdb5/optimizer/Tests/inline11.mal
monetdb5/optimizer/Tests/inlineCst.mal
monetdb5/optimizer/Tests/inlineCst.stable.out
monetdb5/optimizer/Tests/inlineFunction.mal
monetdb5/optimizer/Tests/inlineFunction.stable.out
monetdb5/optimizer/Tests/inlineFunction1.mal
monetdb5/optimizer/Tests/inlineFunction1.stable.out
monetdb5/optimizer/Tests/inlineFunction2.mal
monetdb5/optimizer/Tests/inlineFunction2.stable.out
monetdb5/optimizer/Tests/inlineFunction3.mal
monetdb5/optimizer/Tests/inlineFunction3.stable.out
monetdb5/optimizer/Tests/inlineFunction4.mal
monetdb5/optimizer/Tests/inlineFunction4.stable.out
monetdb5/optimizer/Tests/inlineIfthen.mal
monetdb5/optimizer/Tests/inlineIfthen.stable.out
monetdb5/optimizer/opt_costModel.c
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_deadcode.c
monetdb5/optimizer/opt_evaluate.c
monetdb5/optimizer/opt_garbageCollector.c
monetdb5/optimizer/opt_inline.c
monetdb5/optimizer/opt_joinpath.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_remap.c
monetdb5/optimizer/opt_support.c
monetdb5/scheduler/Tests/sched00.mal
monetdb5/scheduler/Tests/sched00.stable.out
sql/backends/monet5/UDF/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/Tests/udf-reverse.stable.out
sql/backends/monet5/sql.c
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_inspect.mal
sql/benchmarks/ssbm/Tests/01-explain.stable.out
sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/02-explain.stable.out
sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/03-explain.stable.out
sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/04-explain.stable.out
sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/05-explain.stable.out
sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/06-explain.stable.out
sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/07-explain.stable.out
sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/08-explain.stable.out
sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/09-explain.stable.out
sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/10-explain.stable.out
sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/11-explain.stable.out
sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/12-explain.stable.out
sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/13-explain.stable.out
sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128
sql/benchmarks/tpch/Tests/01-explain.stable.out
sql/benchmarks/tpch/Tests/01-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
sql/benchmarks/tpch/Tests/02-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out.int128
sql/benchmarks/tpch/Tests/04-explain.stable.out
sql/benchmarks/tpch/Tests/04-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/05-explain.stable.out
sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/05-explain.stable.out.int128
sql/benchmarks/tpch/Tests/06-explain.stable.out
sql/benchmarks/tpch/Tests/06-explain.stable.out.int128
sql/benchmarks/tpch/Tests/07-explain.stable.out
sql/benchmarks/tpch/Tests/07-explain.stable.out.int128
sql/benchmarks/tpch/Tests/08-explain.stable.out.int128
sql/benchmarks/tpch/Tests/09-explain.stable.out
sql/benchmarks/tpch/Tests/09-explain.stable.out.int128
sql/benchmarks/tpch/Tests/10-explain.stable.out
sql/benchmarks/tpch/Tests/10-explain.stable.out.int128
sql/benchmarks/tpch/Tests/11-explain.stable.out
sql/benchmarks/tpch/Tests/11-explain.stable.out.int128
sql/benchmarks/tpch/Tests/12-explain.stable.out
sql/benchmarks/tpch/Tests/12-explain.stable.out.int128
sql/benchmarks/tpch/Tests/13-explain.stable.out
sql/benchmarks/tpch/Tests/13-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/14-explain.stable.out.int128
sql/benchmarks/tpch/Tests/15-explain.stable.out
sql/benchmarks/tpch/Tests/15-explain.stable.out.int128
sql/benchmarks/tpch/Tests/16-explain.stable.out
sql/benchmarks/tpch/Tests/17-explain.stable.out
sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
sql/benchmarks/tpch/Tests/18-explain.stable.out
sql/benchmarks/tpch/Tests/18-explain.stable.out.int128
sql/benchmarks/tpch/Tests/19-explain.stable.out
sql/benchmarks/tpch/Tests/19-explain.stable.out.int128
sql/benchmarks/tpch/Tests/20-explain.stable.out
sql/benchmarks/tpch/Tests/20-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/20-explain.stable.out.int128
sql/benchmarks/tpch/Tests/21-explain.stable.out
sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/22-explain.stable.out
sql/benchmarks/tpch/Tests/22-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/22-explain.stable.out.int128
sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out
sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
sql/test/mapi/Tests/sql_int128.stable.out
sql/test/mergetables/Tests/mergequery.stable.out
sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:
merged....
diffs (truncated from 10541 to 300 lines):
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
@@ -2187,7 +2187,6 @@ void initNamespace(void);
void initParser(void);
int initQlog(void);
int inlineMALblock(MalBlkPtr mb, int pc, MalBlkPtr mc);
-int inlineProp;
str inplaceRef;
void insertInstruction(MalBlkPtr mb, InstrPtr p, int pc);
str insertRef;
@@ -2595,7 +2594,6 @@ void unloadLibraries(void);
str unlockRef;
str unpackRef;
str unpinRef;
-int unsafeProp;
void updateFootPrint(MalBlkPtr mb, MalStkPtr stk, int varid);
str updateRef;
void updateScenario(str scen, str nme, MALfcn fcn);
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -34,56 +34,56 @@ command del() address wkbDEL;
command length() address wkbLENGTH;
command heap() address wkbHEAP;
-command wkb{unsafe}(v:str) :wkb address wkbFromString;
-command FromText{unsafe}(w:str, type:int) :wkb address wkbFromText;
+unsafe command wkb(v:str) :wkb address wkbFromString;
+unsafe command FromText(w:str, type:int) :wkb address wkbFromText;
module geom;
-function PointFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function PointFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,1);
return x;
end PointFromText;
-function CurveFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function CurveFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,2);
return x;
end CurveFromText;
-function LineFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function LineFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,2);
return x;
end LineFromText;
-function SurfaceFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function SurfaceFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,3);
return x;
end SurfaceFromText;
-function PolyFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function PolyFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,3);
return x;
end PolyFromText;
-function MultiPointFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function MultiPointFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,4);
return x;
end MultiPointFromText;
-function MultiCurveFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function MultiCurveFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,5);
return x;
end MultiCurveFromText;
-function MultiLineFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function MultiLineFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,5);
return x;
end MultiLineFromText;
-function MultiSurfaceFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function MultiSurfaceFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,6);
return x;
end MultiSurfaceFromText;
-function MultiPolyFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function MultiPolyFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,6);
return x;
end MultiPolyFromText;
-function GeomFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function GeomFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,7);
return x;
end GeomFromText;
-function GeomCollectionFromText{unsafe}( wkt:str, srid:sht ) :wkb;
+unsafe function GeomCollectionFromText( wkt:str, srid:sht ) :wkb;
x := wkb.FromText(wkt,7);
return x;
end GeomCollectionFromText;
@@ -244,56 +244,56 @@ geom.prelude();
module calc;
-command mbr{unsafe}(v:str) :mbr address mbrFromString;
+unsafe command mbr(v:str) :mbr address mbrFromString;
command mbr(v:mbr) :mbr address mbrFromMBR;
-command wkb{unsafe}(v:str) :wkb address wkbFromString;
+unsafe command wkb(v:str) :wkb address wkbFromString;
command wkb(v:wkb) :wkb address wkbFromWKB;
-function point{unsafe}( wkt:str ) :wkb;
+unsafe function point( wkt:str ) :wkb;
x := wkb.FromText(wkt,1);
return x;
end point;
-function curve{unsafe}( wkt:str ) :wkb;
+unsafe function curve( wkt:str ) :wkb;
x := wkb.FromText(wkt,2);
return x;
end curve;
-function linestring{unsafe}( wkt:str ) :wkb;
+unsafe function linestring( wkt:str ) :wkb;
x := wkb.FromText(wkt,2);
return x;
end linestring;
-function surface{unsafe}( wkt:str ) :wkb;
+unsafe function surface( wkt:str ) :wkb;
x := wkb.FromText(wkt,3);
return x;
end surface;
-function polygon{unsafe}( wkt:str ) :wkb;
+unsafe function polygon( wkt:str ) :wkb;
x := wkb.FromText(wkt,3);
return x;
end polygon;
-function multipoint{unsafe}( wkt:str ) :wkb;
+unsafe function multipoint( wkt:str ) :wkb;
x := wkb.FromText(wkt,4);
return x;
end multipoint;
-function multicurve{unsafe}( wkt:str ) :wkb;
+unsafe function multicurve( wkt:str ) :wkb;
x := wkb.FromText(wkt,5);
return x;
end multicurve;
-function multilinestring{unsafe}( wkt:str ) :wkb;
+unsafe function multilinestring( wkt:str ) :wkb;
x := wkb.FromText(wkt,5);
return x;
end multilinestring;
-function multisurface{unsafe}( wkt:str ) :wkb;
+unsafe function multisurface( wkt:str ) :wkb;
x := wkb.FromText(wkt,6);
return x;
end multisurface;
-function multipolygon{unsafe}( wkt:str ) :wkb;
+unsafe function multipolygon( wkt:str ) :wkb;
x := wkb.FromText(wkt,6);
return x;
end multipolygon;
-function geometry{unsafe}( wkt:str ) :wkb;
+unsafe function geometry( wkt:str ) :wkb;
x := wkb.FromText(wkt,7);
return x;
end geometry;
-function geomcollection{unsafe}( wkt:str ) :wkb;
+unsafe function geomcollection( wkt:str ) :wkb;
x := wkb.FromText(wkt,7);
return x;
end geomcollection;
diff --git
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
@@ -30,16 +30,16 @@ stderr of test 'opt_sql_append` in direc
# 22:58:57 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=rome"
"--port=36275"
# 22:58:57 >
-MAPI = (monetdb) /var/tmp/mtest-3121/.s.monetdb.38104
+MAPI = (monetdb) /var/tmp/mtest-5888/.s.monetdb.37748
QUERY = explain copy into ttt from '\tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI = (monetdb) /var/tmp/mtest-3121/.s.monetdb.38104
+MAPI = (monetdb) /var/tmp/mtest-5888/.s.monetdb.37748
QUERY = explain copy into ttt from 'a:\tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: a:\tmp/xyz
-MAPI = (monetdb) /var/tmp/mtest-3121/.s.monetdb.38104
+MAPI = (monetdb) /var/tmp/mtest-5888/.s.monetdb.37748
QUERY = explain copy into ttt from '\tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI = (monetdb) /var/tmp/mtest-3121/.s.monetdb.38104
+MAPI = (monetdb) /var/tmp/mtest-5888/.s.monetdb.37748
QUERY = explain copy into ttt from 'Z:/tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: Z:/tmp/xyz
diff --git
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
@@ -62,17 +62,17 @@ Ready.
% mal # name
% clob # type
% 133 # length
-function user.s4_1{autoCommit=true}():void;
- X_25:void := querylog.define("explain copy into ttt from
\\'/tmp/xyz\\';","default_pipe",12);
-barrier X_34 := language.dataflow();
- X_2 := sql.mvc();
- (X_12:bat[:oid,:int],X_13:bat[:oid,:int],X_14:bat[:oid,:int]) :=
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
-exit X_34;
- X_15 := sql.append(X_2,"sys","ttt","a",X_12);
- X_19 := sql.append(X_15,"sys","ttt","b",X_13);
- X_21 := sql.append(X_19,"sys","ttt","c",X_14);
- X_23 := aggr.count(X_14);
- sql.affectedRows(X_21,X_23);
+function user.s4_1():void;
+ X_24:void := querylog.define("explain copy into ttt from
\\'/tmp/xyz\\';","default_pipe",12);
+barrier X_33 := language.dataflow();
+ X_1 := sql.mvc();
+ (X_11:bat[:oid,:int],X_12:bat[:oid,:int],X_13:bat[:oid,:int]) :=
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
+exit X_33;
+ X_14 := sql.append(X_1,"sys","ttt","a",X_11);
+ X_18 := sql.append(X_14,"sys","ttt","b",X_12);
+ X_20 := sql.append(X_18,"sys","ttt","c",X_13);
+ X_22 := aggr.count(X_13);
+ sql.affectedRows(X_20,X_22);
end user.s4_1;
#declare opt_pipe_name string;
#set opt_pipe_name = ( select optimizer );
@@ -96,17 +96,17 @@ end user.s4_1;
% mal # name
% clob # type
% 133 # length
-function user.s12_1{autoCommit=true}():void;
- X_25:void := querylog.define("explain copy into ttt from
\\'/tmp/xyz\\';","user_1",12);
-barrier X_35 := language.dataflow();
- X_2 := sql.mvc();
- (X_12:bat[:oid,:int],X_13:bat[:oid,:int],X_14:bat[:oid,:int]) :=
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
-exit X_35;
- X_15 := sql.append(X_2,"sys","ttt","a",X_12);
- X_19 := sql.append(X_15,"sys","ttt","b",X_13);
- X_23 := aggr.count(X_14);
- X_21 := sql.append(X_19,"sys","ttt","c",X_14);
- sql.affectedRows(X_21,X_23);
+function user.s12_1():void;
+ X_24:void := querylog.define("explain copy into ttt from
\\'/tmp/xyz\\';","user_1",12);
+barrier X_34 := language.dataflow();
+ X_1 := sql.mvc();
+ (X_11:bat[:oid,:int],X_12:bat[:oid,:int],X_13:bat[:oid,:int]) :=
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
+exit X_34;
+ X_14 := sql.append(X_1,"sys","ttt","a",X_11);
+ X_18 := sql.append(X_14,"sys","ttt","b",X_12);
+ X_22 := aggr.count(X_13);
+ X_20 := sql.append(X_18,"sys","ttt","c",X_13);
+ sql.affectedRows(X_20,X_22);
end user.s12_1;
#drop table ttt;
diff --git a/monetdb5/mal/Tests/All b/monetdb5/mal/Tests/All
--- a/monetdb5/mal/Tests/All
+++ b/monetdb5/mal/Tests/All
@@ -141,16 +141,16 @@ tst281
tst292
tst285
tst300
-tst3000
+#tst3000
tst301
-tst3010
+#tst3010
tst302
tst303
-tst3030
+#tst3030
tst304
tst305
-tst3050
-tst3060
+#tst3050
+#tst3060
tst307
tst308
tst400
diff --git a/monetdb5/mal/Tests/tst3050.mal b/monetdb5/mal/Tests/tst3050.mal
--- a/monetdb5/mal/Tests/tst3050.mal
+++ b/monetdb5/mal/Tests/tst3050.mal
@@ -1,13 +1,13 @@
#Parsing properties and keeping them around
-function
dummy(a:int{unsafe=true,sorted=true},b:int{sequence=true}):int{dense=true};
+unsafe function dummy(a:int,b:int):int;
return dummy:=1;
end dummy;
-function myprint{unsafe,optimizer}():void;
+unsafe function myprint():void;
end myprint;
a:= 0;
b:= 2;
-t:= user.dummy(a{sorted=true},b{sequence=true});
+t:= user.dummy(a,b);
mdb.var("user","myprint");
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -207,6 +207,9 @@ typedef struct MALBLK {
int ptop; /* next free slot */
int psize; /* byte size of arena */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list