Changeset: 95370bb07d9f for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=95370bb07d9f
Added Files:
        monetdb5/modules/mal/Tests/iterator01.mal
        monetdb5/modules/mal/Tests/iterator01.stable.err
        monetdb5/modules/mal/Tests/iterator01.stable.out
        monetdb5/modules/mal/Tests/iterator02.mal
        monetdb5/modules/mal/Tests/iterator02.stable.err
        monetdb5/modules/mal/Tests/iterator02.stable.out
        monetdb5/modules/mal/Tests/iterator03.mal
        monetdb5/modules/mal/Tests/iterator03.stable.err
        monetdb5/modules/mal/Tests/iterator03.stable.out
        monetdb5/modules/mal/Tests/modulechk.mal
        monetdb5/modules/mal/Tests/modulechk.stable.err
        monetdb5/modules/mal/Tests/modulechk.stable.out
        monetdb5/modules/mal/iterator.c
        monetdb5/modules/mal/iterator.h
        monetdb5/modules/mal/iterator.mal
        monetdb5/modules/mal/language.c
        monetdb5/modules/mal/language.h
        monetdb5/modules/mal/language.mal
Removed Files:
        monetdb5/modules/mal/Tests/chopper01.mal
        monetdb5/modules/mal/Tests/chopper01.stable.err
        monetdb5/modules/mal/Tests/chopper01.stable.out
        monetdb5/modules/mal/Tests/chopper02.mal
        monetdb5/modules/mal/Tests/chopper02.stable.err
        monetdb5/modules/mal/Tests/chopper02.stable.out
        monetdb5/modules/mal/Tests/chopper03.mal
        monetdb5/modules/mal/Tests/chopper03.stable.err
        monetdb5/modules/mal/Tests/chopper03.stable.out
        monetdb5/modules/mal/chopper.c
        monetdb5/modules/mal/chopper.mal
        monetdb5/modules/mal/language.mx
Modified Files:
        monetdb5/extras/jaql/jaqlfunc.mal
        monetdb5/mal/Tests/All
        monetdb5/mal/Tests/dataflow01.mal
        monetdb5/mal/Tests/dataflow01.stable.out
        monetdb5/mal/Tests/recycle05.mal
        monetdb5/mal/Tests/recycle05.stable.out
        monetdb5/mal/Tests/recycle06.mal
        monetdb5/mal/Tests/recycle06.stable.out
        monetdb5/mal/Tests/recycle07.mal
        monetdb5/mal/Tests/recycle07.stable.out
        monetdb5/mal/Tests/recycle08.mal
        monetdb5/mal/Tests/recycle08.stable.out
        monetdb5/mal/Tests/tst1200.mal
        monetdb5/mal/Tests/tst1201.mal
        monetdb5/mal/Tests/tst1202.stable.out
        monetdb5/mal/Tests/tst1203.stable.out
        monetdb5/mal/Tests/tst1205.mal
        monetdb5/mal/Tests/tst1205.stable.out
        monetdb5/mal/Tests/tst201.mal
        monetdb5/mal/Tests/tst250.mal
        monetdb5/mal/Tests/tst250.stable.out
        monetdb5/mal/Tests/tst251.mal
        monetdb5/mal/Tests/tst251.stable.out
        monetdb5/mal/Tests/tst252.mal
        monetdb5/mal/Tests/tst252.stable.out
        monetdb5/mal/Tests/tst273.mal
        monetdb5/mal/Tests/tst273.stable.out
        monetdb5/mal/Tests/tst274.mal
        monetdb5/mal/Tests/tst274.stable.out.oid64
        monetdb5/mal/Tests/tst280.mal
        monetdb5/mal/Tests/tst280.stable.out
        monetdb5/mal/Tests/tst400.mal
        monetdb5/mal/Tests/tst400.stable.out
        monetdb5/mal/Tests/tst400a.mal
        monetdb5/mal/Tests/tst400a.stable.out
        monetdb5/mal/Tests/tst400d.mal
        monetdb5/mal/Tests/tst400d.stable.out
        monetdb5/mal/Tests/tst401.mal
        monetdb5/mal/Tests/tst401.stable.err
        monetdb5/mal/Tests/tst401.stable.out
        monetdb5/mal/Tests/tst560.mal
        monetdb5/mal/Tests/tst560.stable.out
        monetdb5/mal/Tests/tst850.stable.out
        monetdb5/mal/Tests/tst901.mal
        monetdb5/mal/Tests/tst901.stable.out
        monetdb5/mal/Tests/tst901a.mal
        monetdb5/mal/Tests/tst901a.stable.out
        monetdb5/mal/Tests/tst901b.mal
        monetdb5/mal/Tests/tst901b.stable.out
        monetdb5/mal/Tests/tst902.mal
        monetdb5/mal/Tests/tst902.stable.out
        monetdb5/mal/Tests/tst903.mal
        monetdb5/mal/Tests/tst903.stable.out
        monetdb5/mal/Tests/tst904.mal
        monetdb5/mal/Tests/tst904.stable.out
        monetdb5/mal/Tests/tst905.mal
        monetdb5/mal/Tests/tst905.stable.out
        monetdb5/mal/Tests/tst906.mal
        monetdb5/mal/Tests/tst906.stable.out
        monetdb5/mal/Tests/tst907.mal
        monetdb5/mal/Tests/tst907.stable.out
        monetdb5/mal/Tests/tst908.mal
        monetdb5/mal/Tests/tst908.stable.out
        monetdb5/mal/Tests/tst911.mal
        monetdb5/mal/Tests/tst911.stable.out
        monetdb5/mal/Tests/tst912.mal
        monetdb5/mal/Tests/tst912.stable.out
        monetdb5/mal/Tests/tst920.mal
        monetdb5/mal/Tests/tst920.stable.out
        monetdb5/mal/Tests/venks.mal
        monetdb5/mal/Tests/venks.stable.out
        monetdb5/mal/mal_function.c
        monetdb5/mal/mal_interpreter.c
        monetdb5/modules/kernel/Tests/vacuum.mal
        monetdb5/modules/kernel/Tests/vacuum.stable.out
        monetdb5/modules/mal/Makefile.ag
        monetdb5/modules/mal/Tests/All
        monetdb5/modules/mal/Tests/cluster00.mal
        monetdb5/modules/mal/Tests/cluster00.stable.out
        monetdb5/modules/mal/Tests/compress.mal
        monetdb5/modules/mal/Tests/compress.stable.out
        monetdb5/modules/mal/Tests/inspect05.stable.out
        monetdb5/modules/mal/Tests/inspect10.stable.out
        monetdb5/modules/mal/Tests/remote99.mal
        monetdb5/modules/mal/Tests/remote99.stable.out
        monetdb5/modules/mal/algebraExtensions.h
        monetdb5/modules/mal/batExtensions.c
        monetdb5/modules/mal/batExtensions.mal
        monetdb5/modules/mal/groupby.h
        monetdb5/modules/mal/mal_init.mal
        monetdb5/modules/mal/mat.mx
        monetdb5/modules/mal/mdb.c
        monetdb5/modules/mal/mdb.mal
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/transaction.c
        monetdb5/optimizer/Tests/GCexample01.mal
        monetdb5/optimizer/Tests/GCexample01.stable.out
        monetdb5/optimizer/Tests/Mexample.mal
        monetdb5/optimizer/Tests/Mexample.stable.out
        monetdb5/optimizer/Tests/emptyset01.mal
        monetdb5/optimizer/Tests/emptyset01.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/inliners.mal
        monetdb5/optimizer/Tests/remap.stable.out
        monetdb5/optimizer/Tests/reorder00.mal
        monetdb5/optimizer/Tests/reorder00.stable.out
        monetdb5/optimizer/Tests/tst4300.mal
        monetdb5/optimizer/Tests/tst4300.stable.out
        monetdb5/optimizer/Tests/tst4620.mal
        monetdb5/optimizer/Tests/tst4620.stable.out
        monetdb5/optimizer/Tests/tst4700.mal
        monetdb5/optimizer/Tests/tst4700.stable.out
        monetdb5/optimizer/Tests/tst4801.mal
        monetdb5/optimizer/Tests/tst4801.stable.out
        monetdb5/optimizer/opt_dataflow.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/scheduler/srvpool.c
        monetdb5/tests/BugReports/Tests/no.051.mal
        monetdb5/tests/BugReports/Tests/no.051.stable.out
        monetdb5/tests/gdkTests/Tests/binsearchmultijoin.mal
        monetdb5/tests/gdkTests/Tests/semijoin.mal
        monetdb5/tests/gdkTests/Tests/semijoin.stable.out
        testing/Mtest.py.in
Branch: default
Log Message:

Iterator semantics changes
The iterators over BATs and scalar ranges have been changed as part
of the de-Mx activities.
Iterators at the MAL level are concentrated in the new iterator module.
They can be used as follows to construct for i:=0 step 1 until 10:

barrier i:=0;
   redo i:= iterator.next(1,10);
exit;

and for BAT variables:

barried (h,t) := iterator.new(b);
  redo (h,t) := iterator.next(b);
exit

MAL interpreter semantics to deal with barrier statements has
been changed. Now any range can be constructed, as the barrier
is left with the control variable (the first in the target list)
is set to nil. For boolean variables, the barrier is only
entered when it is set to true.

The dataflow() returns a bit.

Most changes here reflect the carry thru of this change into
the test set. (a few requires some more testing)


diffs (truncated from 7664 to 300 lines):

diff --git a/monetdb5/extras/jaql/jaqlfunc.mal 
b/monetdb5/extras/jaql/jaqlfunc.mal
--- a/monetdb5/extras/jaql/jaqlfunc.mal
+++ b/monetdb5/extras/jaql/jaqlfunc.mal
@@ -123,19 +123,18 @@ end count;
 
 function range(start:bat[:oid,:lng], vend:bat[:oid,:lng], 
skip:bat[:oid,:lng]):bat[:oid,:lng];
        ret := bat.new(:oid,:lng);
-       barrier (b,h,t) := bat.newIterator(start);
+       barrier (h,t) := iterator.new(start);
                iend := algebra.fetch(vend, h);
                iskip := algebra.fetch(skip, h);
                # TODO: use array.series from sciql
 #              ret := array.series(t, iskip, iend, 1, 1);
                iend := calc.+(iend, 1);
-               barrier (v,i) := language.newRange(t);
+               barrier i := t;
                                ret := bat.insert(ret, h, i);
-                               redo (v,i) := language.nextElement(iskip, iend);
-               exit (v,i);
-               redo (b,h,t) := bat.hasMoreElements(start);
-       exit (b,h,t);
-
+                               redo i := iterator.next(iskip, iend);
+               exit i;
+               redo (h,t) := iterator.next(start);
+       exit (h,t);
        return ret;
 end range;
 
diff --git a/monetdb5/mal/Tests/All b/monetdb5/mal/Tests/All
--- a/monetdb5/mal/Tests/All
+++ b/monetdb5/mal/Tests/All
@@ -196,7 +196,7 @@ tst801
 tst802
 tst803
 tst804
-tst805
+#tst805 invalid, no BAT columns
 tst810
 tst819
 tst820
diff --git a/monetdb5/mal/Tests/dataflow01.mal 
b/monetdb5/mal/Tests/dataflow01.mal
--- a/monetdb5/mal/Tests/dataflow01.mal
+++ b/monetdb5/mal/Tests/dataflow01.mal
@@ -11,12 +11,12 @@ dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_u
 dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep);
 mdb.setDebug(dbgmsk_set);
 
-barrier (go,i):= language.newRange(0:lng);
+barrier i:= 0:lng;
        k:= k+1;
        l:= calc.lng(k);
        bat.insert(b,nil:oid,l);
-       redo (go,i):= language.nextElement(1:lng,1000000:lng);
-exit (go,i);
+       redo i:= iterator.next(1:lng,1000000:lng);
+exit i;
 
 mdb.setDebug(dbgmsk_restore);
 
diff --git a/monetdb5/mal/Tests/dataflow01.stable.out 
b/monetdb5/mal/Tests/dataflow01.stable.out
--- a/monetdb5/mal/Tests/dataflow01.stable.out
+++ b/monetdb5/mal/Tests/dataflow01.stable.out
@@ -21,12 +21,12 @@ function user.load():bat[:oid,:lng];
     dbgmsk_keep := calc.xor(INT_MAX,dbgmsk_unset);
     dbgmsk_set := calc.and(dbgmsk_restore,dbgmsk_keep);
     mdb.setDebug(dbgmsk_set);
-barrier (go,i) := language.newRange(0:lng);
+barrier i := 0:lng;
     k := calc.+(k,1);
     l := calc.lng(k);
     bat.insert(b,nil:oid,l);
-    redo (go,i) := language.nextElement(1:lng,1000000:lng);
-exit (go,i);
+    redo i := iterator.next(1:lng,1000000:lng);
+exit i;
     mdb.setDebug(dbgmsk_restore);
     return load := b;
 end load;
diff --git a/monetdb5/mal/Tests/recycle05.mal b/monetdb5/mal/Tests/recycle05.mal
--- a/monetdb5/mal/Tests/recycle05.mal
+++ b/monetdb5/mal/Tests/recycle05.mal
@@ -2,10 +2,10 @@
 
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
 b:= bat.new(:oid,:int);
-barrier (go,i):= language.newRange(0:int);
+barrier i:= 0:int;
        bat.append(b,i);
-       redo (go,i):= language.nextElement(1:int,1000:int);
-exit (go,i);
+       redo i:= iterator.next(1:int,1000:int);
+exit i;
 return bind:=b;
 end bind;
 
diff --git a/monetdb5/mal/Tests/recycle05.stable.out 
b/monetdb5/mal/Tests/recycle05.stable.out
--- a/monetdb5/mal/Tests/recycle05.stable.out
+++ b/monetdb5/mal/Tests/recycle05.stable.out
@@ -23,10 +23,10 @@ stdout of test 'recycle05` in directory 
 #end bind;
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
     b := bat.new(:oid,:int);
-barrier (go,i) := language.newRange(0:int);
+barrier i := 0:int;
     bat.append(b,i);
-    redo (go,i) := language.nextElement(1:int,1000:int);
-exit (go,i);
+    redo i := iterator.next(1:int,1000:int);
+exit i;
     return bind := b;
 end bind;
 #
diff --git a/monetdb5/mal/Tests/recycle06.mal b/monetdb5/mal/Tests/recycle06.mal
--- a/monetdb5/mal/Tests/recycle06.mal
+++ b/monetdb5/mal/Tests/recycle06.mal
@@ -2,10 +2,10 @@
 
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
 b:= bat.new(:oid,:int);
-barrier (go,i):= language.newRange(0:int);
+barrier i:= 0:int;
        bat.append(b,i);
-       redo (go,i):= language.nextElement(1:int,1000:int);
-exit (go,i);
+       redo i:= iterator.next(1:int,1000:int);
+exit i;
 return bind:=b;
 end bind;
 
diff --git a/monetdb5/mal/Tests/recycle06.stable.out 
b/monetdb5/mal/Tests/recycle06.stable.out
--- a/monetdb5/mal/Tests/recycle06.stable.out
+++ b/monetdb5/mal/Tests/recycle06.stable.out
@@ -23,10 +23,10 @@ stdout of test 'recycle06` in directory 
 #end bind;
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
     b := bat.new(:oid,:int);
-barrier (go,i) := language.newRange(0:int);
+barrier i := 0:int;
     bat.append(b,i);
-    redo (go,i) := language.nextElement(1:int,1000:int);
-exit (go,i);
+    redo i := iterator.next(1:int,1000:int);
+exit i;
     return bind := b;
 end bind;
 #
diff --git a/monetdb5/mal/Tests/recycle07.mal b/monetdb5/mal/Tests/recycle07.mal
--- a/monetdb5/mal/Tests/recycle07.mal
+++ b/monetdb5/mal/Tests/recycle07.mal
@@ -3,10 +3,10 @@
 
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
 b:= bat.new(:oid,:int);
-barrier (go,i):= language.newRange(0:int);
+barrier i:= 0:int;
        bat.append(b,i);
-       redo (go,i):= language.nextElement(1:int,1000:int);
-exit (go,i);
+       redo i:= iterator.next(1:int,1000:int);
+exit i;
 return bind:=b;
 end bind;
 
diff --git a/monetdb5/mal/Tests/recycle07.stable.out 
b/monetdb5/mal/Tests/recycle07.stable.out
--- a/monetdb5/mal/Tests/recycle07.stable.out
+++ b/monetdb5/mal/Tests/recycle07.stable.out
@@ -24,10 +24,10 @@ stdout of test 'recycle07` in directory 
 #end bind;
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
     b := bat.new(:oid,:int);
-barrier (go,i) := language.newRange(0:int);
+barrier i := 0:int;
     bat.append(b,i);
-    redo (go,i) := language.nextElement(1:int,1000:int);
-exit (go,i);
+    redo i := iterator.next(1:int,1000:int);
+exit i;
     return bind := b;
 end bind;
 #
diff --git a/monetdb5/mal/Tests/recycle08.mal b/monetdb5/mal/Tests/recycle08.mal
--- a/monetdb5/mal/Tests/recycle08.mal
+++ b/monetdb5/mal/Tests/recycle08.mal
@@ -3,10 +3,10 @@
 
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
 b:= bat.new(:oid,:int);
-barrier (go,i):= language.newRange(0:int);
+barrier i:= 0:int;
        bat.append(b,i);
-       redo (go,i):= language.nextElement(1:int,1000:int);
-exit (go,i);
+       redo i:= iterator.next(1:int,1000:int);
+exit i;
 return bind:=b;
 end bind;
 
diff --git a/monetdb5/mal/Tests/recycle08.stable.out 
b/monetdb5/mal/Tests/recycle08.stable.out
--- a/monetdb5/mal/Tests/recycle08.stable.out
+++ b/monetdb5/mal/Tests/recycle08.stable.out
@@ -24,10 +24,10 @@ stdout of test 'recycle08` in directory 
 #end bind;
 function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
     b := bat.new(:oid,:int);
-barrier (go,i) := language.newRange(0:int);
+barrier i := 0:int;
     bat.append(b,i);
-    redo (go,i) := language.nextElement(1:int,1000:int);
-exit (go,i);
+    redo i := iterator.next(1:int,1000:int);
+exit i;
     return bind := b;
 end bind;
 #
diff --git a/monetdb5/mal/Tests/tst1200.mal b/monetdb5/mal/Tests/tst1200.mal
--- a/monetdb5/mal/Tests/tst1200.mal
+++ b/monetdb5/mal/Tests/tst1200.mal
@@ -38,66 +38,82 @@ mtime.timezone_local(lzone);
        rule_feb:= mtime.rule("first fRiDaY on or after february 30@01:15");
 #var rule_feb := mtime.rule("first fRiDaY on or after february 30@01:15");
 # 
-       rule_bat:= bat.new(:str,:zrule,10);
+       month_bat:= bat.new(:oid,:str,10);
+       rule_bat:= bat.new(:oid,:zrule,10);
 #var rule_bat := bat.new(str,rule,10);
-       bat.insert(rule_bat,"jan",rule_jan);
-       bat.insert(rule_bat,"feb",rule_feb);
-       bat.insert(rule_bat,"mar",rule_mar);
-       bat.insert(rule_bat,"apr",rule_apr);
-#rule_bat.bat.insert("jan",rule_jan).insert("feb",rule_feb).insert("mar",rule_mar).insert("apr",rule_apr);
-       bat.insert(rule_bat,"may",rule_may);
-       bat.insert(rule_bat,"jun",rule_jun);
-       bat.insert(rule_bat,"jul",rule_jul);
-       bat.insert(rule_bat,"aug",rule_aug);
-#rule_bat.bat.insert("may",rule_may).insert("jun",rule_jun).insert("jul",rule_jul).insert("aug",rule_aug);
-       bat.insert(rule_bat,"sep",rule_sep);
-       bat.insert(rule_bat,"oct",rule_oct);
-       bat.insert(rule_bat,"nov",rule_nov);
-       bat.insert(rule_bat,"dec",rule_dec);
+       bat.append(rule_bat,rule_jan);
+       bat.append(rule_bat,rule_feb);
+       bat.append(rule_bat,rule_mar);
+       bat.append(rule_bat,rule_apr);
+#rule_bat.bat.append(rule_apr);
+       bat.append(rule_bat,rule_may);
+       bat.append(rule_bat,rule_jun);
+       bat.append(rule_bat,rule_jul);
+       bat.append(rule_bat,rule_aug);
+#rule_bat.bat.append(rule_aug);
+       bat.append(rule_bat,rule_sep);
+       bat.append(rule_bat,rule_oct);
+       bat.append(rule_bat,rule_nov);
+       bat.append(rule_bat,rule_dec);
+
+       bat.append(month_bat,"jan");
+       bat.append(month_bat,"feb");
+       bat.append(month_bat,"mar");
+       bat.append(month_bat,"apr");
+#month_bat.bat.append("jan");
+       bat.append(month_bat,"may");
+       bat.append(month_bat,"jun");
+       bat.append(month_bat,"jul");
+       bat.append(month_bat,"aug");
+#month_bat.bat.append("may");
+       bat.append(month_bat,"sep");
+       bat.append(month_bat,"oct");
+       bat.append(month_bat,"nov");
+       bat.append(month_bat,"dec");
 
#rule_bat.bat.insert("sep",rule_sep).insert("oct",rule_oct).insert("nov",rule_nov).insert("dec",rule_dec);
 #
 ## test the operations on rules
        ma_a := bat.setColumn(rule_bat,"rule");
 #io.print(rule_bat.bat.setColumn("rule"),
-       na_a:bat[:str,:int] := mal.multiplex("mtime","month",rule_bat);
+       na_a:bat[:oid,:int] := mal.multiplex("mtime","month",rule_bat);
        oa_a := bat.setColumn(na_a,"month");
 #      [month](rule_bat).bat.setColumn("month"),
-       pa_a:bat[:str,:int] := mal.multiplex("mtime","weekday",rule_bat);
+       pa_a:bat[:oid,:int] := mal.multiplex("mtime","weekday",rule_bat);
        qa_a := bat.setColumn(pa_a,"weekday");
 #      [weekday](rule_bat).bat.setColumn("weekday"),
-       ra_a:bat[:str,:int] := mal.multiplex("mtime","day",rule_bat);
+       ra_a:bat[:oid,:int] := mal.multiplex("mtime","day",rule_bat);
        sa_a := bat.setColumn(ra_a,"day");
 #      [day](rule_bat).bat.setColumn("day"),
-       ta_a:bat[:str,:int] := mal.multiplex("mtime","minutes",rule_bat);
+       ta_a:bat[:oid,:int] := mal.multiplex("mtime","minutes",rule_bat);
        ua_a := bat.setColumn(ta_a,"minutes");
 io.print("rule_bat,na_a,pa_a,ra_a,ta_a");
-       va_a := io.print(rule_bat,na_a,pa_a,ra_a,ta_a);
+       va_a := io.print(month_bat,rule_bat,na_a,pa_a,ra_a,ta_a);
 #      [minutes](rule_bat).bat.setColumn("minutes"));
 #
        bat.setColumn(rule_bat,"rule");
 #io.print(rule_bat.bat.setColumn("rule"),
-       xa_a:bat[:str,:date] := mal.multiplex("mtime","compute",rule_bat,2001);
+       xa_a:bat[:oid,:date] := mal.multiplex("mtime","compute",rule_bat,2001);
        ya_a := bat.setColumn(xa_a,"2001");
 #      [compute](rule_bat, 2001).bat.setColumn("2001"),
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to