Changeset: 6b9b22059ac8 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6b9b22059ac8 Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures_gsl.stable.out clients/Tests/MAL-signatures_nocfitsio.stable.out clients/Tests/MAL-signatures_sphinxclient.stable.out clients/Tests/SQL-dump.stable.out clients/Tests/SQL-dump.stable.out.64bit.oid32 clients/Tests/SQL-dump_gsl.stable.out clients/Tests/SQL-dump_gsl.stable.out.oid32 clients/Tests/SQL-dump_nogeom.stable.out clients/Tests/exports.stable.out sql/test/leaks/Tests/check1.stable.out sql/test/leaks/Tests/check1_gsl.stable.out sql/test/leaks/Tests/check1_nogeom.stable.out sql/test/leaks/Tests/check2.stable.out sql/test/leaks/Tests/check2_gsl.stable.out sql/test/leaks/Tests/check2_nogeom.stable.out sql/test/leaks/Tests/check3.stable.out sql/test/leaks/Tests/check3_gsl.stable.out sql/test/leaks/Tests/check3_nogeom.stable.out sql/test/leaks/Tests/check4.stable.out sql/test/leaks/Tests/check4_gsl.stable.out sql/test/leaks/Tests/check4_nogeom.stable.out sql/test/leaks/Tests/check5.stable.out sql/test/leaks/Tests/check5_gsl.stable.out sql/test/leaks/Tests/check5_nogeom.stable.out Branch: default Log Message:
Approvals. diffs (truncated from 23662 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 @@ -25056,6 +25056,18 @@ command batcalc.int(v:bat[:oid,:flt],dig address batflt_num2dec_int; comment cast number to decimal(int) and check for overflow +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:int] +address BATSTRindex_int; +comment Return the offsets as an index bat + +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:sht] +address BATSTRindex_sht; +comment Return the offsets as an index bat + +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:bte] +address BATSTRindex_bte; +comment Return the offsets as an index bat + command batcalc.int(v:bat[:oid,:str],digits:int,scale:int):bat[:oid,:int] address batstr_2dec_int; comment cast to dec(int) and check for overflow @@ -29696,6 +29708,10 @@ command batcalc.sht(v:bat[:oid,:flt],dig address batflt_num2dec_sht; comment cast number to decimal(sht) and check for overflow +command batcalc.strings(v:bat[:oid,:str]):bat[:oid,:str] +address BATSTRstrings; +comment Return the strings + pattern batcalc.str(eclass:int,d1:int,s1:int,has_tz:int,v:bat[:oid,:any_1],digits:int):bat[:oid,:str] address SQLbatstr_cast; comment cast to string and check for overflow @@ -36539,6 +36555,18 @@ command calc.int(v:flt,digits:int,scale: address flt_num2dec_int; comment cast number to decimal(int) and check for overflow +command calc.index(v:str,u:bit):int +address STRindex_int; +comment Return the offsets as an index bat + +command calc.index(v:str,u:bit):sht +address STRindex_sht; +comment Return the offsets as an index bat + +command calc.index(v:str,u:bit):bte +address STRindex_bte; +comment Return the offsets as an index bat + command calc.int(v:str,digits:int,scale:int):int address str_2dec_int; comment cast to dec(int) and check for overflow @@ -37917,6 +37945,10 @@ command calc.sht(v:flt,digits:int,scale: address flt_num2dec_sht; comment cast number to decimal(sht) and check for overflow +command calc.strings(v:str):str +address STRstrings; +comment Return the strings + command calc.second_interval(v:daytime,ek:int,sk:int):lng address second_interval_daytime; comment cast daytime to a second_interval and check for overflow @@ -39412,70 +39444,8 @@ command iterator.new(b:bat[:oid,:any_2], address ITRnewChunk; comment Create an iterator with fixed granule size. The result is a view. -function jaqlfunc.avg(v:bat[:oid,:dbl]):bat[:oid,:dbl]; -function jaqlfunc.avg(v:bat[:oid,:lng]):bat[:oid,:dbl]; -function jaqlfunc.arrayToRecord(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str],kindv:bat[:oid,:bte],stringv:bat[:oid,:str],integerv:bat[:oid,:lng],doublev:bat[:oid,:dbl],arrayv:bat[:oid,:oid],objectv:bat[:oid,:oid],namev:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.count(v:bat[:oid,:any]):bat[:oid,:lng]; -function jaqlfunc.drop(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.gettrace() (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.info(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.info(d1:bat[:oid,:bte],d2:bat[:oid,:str],d3:bat[:oid,:lng],d4:bat[:oid,:dbl],d5:bat[:oid,:oid],d6:bat[:oid,:oid],d7:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.list() (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.load(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.pairwise(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str],kindv:bat[:oid,:bte],stringv:bat[:oid,:str],integerv:bat[:oid,:lng],doublev:bat[:oid,:dbl],arrayv:bat[:oid,:oid],objectv:bat[:oid,:oid],namev:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.range(size:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.range(start:bat[:oid,:lng],vend:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.range(start:bat[:oid,:lng],vend:bat[:oid,:lng],skip:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.sum(v:bat[:oid,:dbl]):bat[:oid,:dbl]; -function jaqlfunc.sum(v:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.store(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.shred(uri:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -pattern jaql.batconcat(l:bat[:oid,:str],r:bat[:oid,:str]):bat[:oid,:str] -address JAQLbatconcat; -comment Return the string concatenation of the tails of both input BATs - -pattern jaql.cast(b:bat[:oid,:any],t:any_1):bat[:oid,:any_1] -address JAQLcast; -comment Return BAT b as BAT with tail type of t, if the BAT tail in reality is of that type - -command jaql.epilogue():void -address JAQLepilogue; -pattern jaql.execute(jaql:str):void -address JAQLexecute; -comment Parse and run the given JAQL query - -pattern jaql.getVar(nme:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JAQLgetVar; -comment Retrieve value of JSON variable - -command jaql.prelude():void -address JAQLprelude; -pattern jaql.printTimings(execute:lng,transport:lng):void -address JAQLprintTimings; -comment Print timing breakdown information to stdout stream - -pattern jaql.setVar(nme:str,kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]):void -address JAQLsetVar; -comment Set or overwrite value of JSON variable - -pattern jaql.x(jaql:str):void -address JAQLexecute; -comment execute() alias for the lazy - -command json.drop(nme:str):void -address JSONdrop; -comment Drop the JSON object name from the database - command json.dump(j:json):void address JSONdump; -command json.extract(k:bat[:oid,:bte],s:bat[:oid,:str],i:bat[:oid,:lng],d:bat[:oid,:dbl],a:bat[:oid,:oid],o:bat[:oid,:oid],n:bat[:oid,:str],elems:bat[:oid,:oid],start:oid) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JSONextract; -comment Extract the given elems (kind id) from the given JSON object - -command json.exportResult(o:streams,kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],start:oid):void -address JSONexportResult; -comment Serialise the given JSON pointer into JSON format, respecting the MAPI protocol - pattern json.fold(k:bat[:oid,:any]):json address JSONfold; comment Combine the value list into a single json array object. @@ -39550,18 +39520,10 @@ command json.keyarray(val:json):json address JSONkeyArray; comment Expands the outermost JSON object keys into a JSON value array. -command json.load(nme:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JSONload; -comment Load the JSON object name from the database - command json.length(val:json):int address JSONlength; comment Returns the number of elements in the outermost JSON object. -command json.nextid(kind:bat[:oid,:bte]):oid -address JSONnextid; -comment Returns the next free id for the kind BAT - command json.number(j:json):dbl address JSONjson2number; comment Convert sinple JSON values to a double, return nil upon error. @@ -39570,11 +39532,6 @@ command json.new(j:str):json address JSONstr2json; comment Convert string to its JSON. Dealing with escape characters -function json.print(o:streams,kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]):void; -command json.print(o:streams,kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],start:oid,pretty:bit):void -address JSONprint; -comment Serialise the given JSON pointer into JSON format - command json.prelude():void address JSONprelude; command json.resultSet(u:bat[:oid,:uuid],rev:bat[:oid,:lng],js:bat[:oid,:json]):json @@ -39585,18 +39542,6 @@ pattern json.renderarray(val:any...):jso address JSONrenderarray; pattern json.renderobject(val:any...):json address JSONrenderobject; -command json.store(nme:str,kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]):void -address JSONstore; -comment Store the JSON object in the database as name - -command json.shreduri(uri:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JSONshredstream; -comment Parse the JSON object from URI into internal shredded representation - -command json.shred(json:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JSONshred; -comment Parse the given JSON object into internal shredded representation - command json.str(j:json):str address JSONjson2str; comment Convert JSON to its string equivalent. Dealing with escape characters @@ -39613,14 +39558,6 @@ command json.#tostr():str address JSONtoString; comment Convert JSON to its string equivalent. Dealing with escape characters -pattern json.unwrap(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],arrid:oid,tpe:any_1):bat[:oid,:any_1] -address JSONunwrap; -comment Return the JSON array with oid arrid elements as BAT with tail type tpe performing the necessary casts - -pattern json.unwraptype(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],arrid:oid):str -address JSONunwrap; -comment Retrieve the type necessary to unwrap the given JSON array to - pattern json.unfold(val:json) (o:bat[:oid,:oid],k:bat[:oid,:str],v:bat[:oid,:json]) address JSONunfold; comment Expands the outermost JSON object into key-value pairs. @@ -39637,10 +39574,6 @@ command json.valuearray(val:json):json address JSONvalueArray; comment Expands the outermost JSON object values into a JSON value array. -command json.wrap(elems:bat[:oid,:any]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]) -address JSONwrap; -comment Wrap the given BAT inside a JSON array - pattern language.assert(v:any_1,pname:str,oper:str,val:any_2):void address MALassertTriple; comment Assertion test. diff --git a/clients/Tests/MAL-signatures_gsl.stable.out b/clients/Tests/MAL-signatures_gsl.stable.out --- a/clients/Tests/MAL-signatures_gsl.stable.out +++ b/clients/Tests/MAL-signatures_gsl.stable.out @@ -25068,6 +25068,18 @@ command batcalc.int(v:bat[:oid,:flt],dig address batflt_num2dec_int; comment cast number to decimal(int) and check for overflow +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:int] +address BATSTRindex_int; +comment Return the offsets as an index bat + +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:sht] +address BATSTRindex_sht; +comment Return the offsets as an index bat + +command batcalc.index(v:bat[:oid,:str],u:bit):bat[:oid,:bte] +address BATSTRindex_bte; +comment Return the offsets as an index bat + command batcalc.int(v:bat[:oid,:str],digits:int,scale:int):bat[:oid,:int] address batstr_2dec_int; comment cast to dec(int) and check for overflow @@ -29708,6 +29720,10 @@ command batcalc.sht(v:bat[:oid,:flt],dig address batflt_num2dec_sht; comment cast number to decimal(sht) and check for overflow +command batcalc.strings(v:bat[:oid,:str]):bat[:oid,:str] +address BATSTRstrings; +comment Return the strings + pattern batcalc.str(eclass:int,d1:int,s1:int,has_tz:int,v:bat[:oid,:any_1],digits:int):bat[:oid,:str] address SQLbatstr_cast; comment cast to string and check for overflow @@ -36551,6 +36567,18 @@ command calc.int(v:flt,digits:int,scale: address flt_num2dec_int; comment cast number to decimal(int) and check for overflow +command calc.index(v:str,u:bit):int +address STRindex_int; +comment Return the offsets as an index bat + +command calc.index(v:str,u:bit):sht +address STRindex_sht; +comment Return the offsets as an index bat + +command calc.index(v:str,u:bit):bte +address STRindex_bte; +comment Return the offsets as an index bat + command calc.int(v:str,digits:int,scale:int):int address str_2dec_int; comment cast to dec(int) and check for overflow @@ -37929,6 +37957,10 @@ command calc.sht(v:flt,digits:int,scale: address flt_num2dec_sht; comment cast number to decimal(sht) and check for overflow +command calc.strings(v:str):str +address STRstrings; +comment Return the strings + command calc.second_interval(v:daytime,ek:int,sk:int):lng address second_interval_daytime; comment cast daytime to a second_interval and check for overflow @@ -39428,70 +39460,8 @@ command iterator.new(b:bat[:oid,:any_2], address ITRnewChunk; comment Create an iterator with fixed granule size. The result is a view. -function jaqlfunc.avg(v:bat[:oid,:dbl]):bat[:oid,:dbl]; -function jaqlfunc.avg(v:bat[:oid,:lng]):bat[:oid,:dbl]; -function jaqlfunc.arrayToRecord(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str],kindv:bat[:oid,:bte],stringv:bat[:oid,:str],integerv:bat[:oid,:lng],doublev:bat[:oid,:dbl],arrayv:bat[:oid,:oid],objectv:bat[:oid,:oid],namev:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.count(v:bat[:oid,:any]):bat[:oid,:lng]; -function jaqlfunc.drop(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.gettrace() (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.info(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.info(d1:bat[:oid,:bte],d2:bat[:oid,:str],d3:bat[:oid,:lng],d4:bat[:oid,:dbl],d5:bat[:oid,:oid],d6:bat[:oid,:oid],d7:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.list() (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.load(docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.pairwise(kindn:bat[:oid,:bte],stringn:bat[:oid,:str],integern:bat[:oid,:lng],doublen:bat[:oid,:dbl],arrayn:bat[:oid,:oid],objectn:bat[:oid,:oid],namen:bat[:oid,:str],kindv:bat[:oid,:bte],stringv:bat[:oid,:str],integerv:bat[:oid,:lng],doublev:bat[:oid,:dbl],arrayv:bat[:oid,:oid],objectv:bat[:oid,:oid],namev:bat[:oid,:str]) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.range(size:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.range(start:bat[:oid,:lng],vend:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.range(start:bat[:oid,:lng],vend:bat[:oid,:lng],skip:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.sum(v:bat[:oid,:dbl]):bat[:oid,:dbl]; -function jaqlfunc.sum(v:bat[:oid,:lng]):bat[:oid,:lng]; -function jaqlfunc.store(kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str],docname:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -function jaqlfunc.shred(uri:str) (kind:bat[:oid,:bte],string:bat[:oid,:str],integer:bat[:oid,:lng],double:bat[:oid,:dbl],array:bat[:oid,:oid],object:bat[:oid,:oid],name:bat[:oid,:str]); -pattern jaql.batconcat(l:bat[:oid,:str],r:bat[:oid,:str]):bat[:oid,:str] -address JAQLbatconcat; -comment Return the string concatenation of the tails of both input BATs - -pattern jaql.cast(b:bat[:oid,:any],t:any_1):bat[:oid,:any_1] _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list