Changeset: 330787e5b698 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=330787e5b698
Modified Files:
buildtools/autogen/scripts/mal2h.py
buildtools/autogen/scripts/sql2h.py
monetdb5/mal/mal_import.c
monetdb5/modules/atoms/batxml.mal.h
monetdb5/modules/atoms/blob.mal.h
monetdb5/modules/atoms/color.mal.h
monetdb5/modules/atoms/identifier.mal.h
monetdb5/modules/atoms/inet.mal.h
monetdb5/modules/atoms/json.mal.h
monetdb5/modules/atoms/mtime.mal.h
monetdb5/modules/atoms/str.mal.h
monetdb5/modules/atoms/streams.mal.h
monetdb5/modules/atoms/url.mal.h
monetdb5/modules/atoms/uuid.mal.h
monetdb5/modules/atoms/xml.mal.h
monetdb5/modules/kernel/00_aggr_hge.mal.h
monetdb5/modules/kernel/aggr.mal.h
monetdb5/modules/kernel/alarm.mal.h
monetdb5/modules/kernel/algebra.mal.h
monetdb5/modules/kernel/bat5.mal.h
monetdb5/modules/kernel/batcolor.mal.h
monetdb5/modules/kernel/batstr.mal.h
monetdb5/modules/kernel/logger.mal.h
monetdb5/modules/kernel/microbenchmark.mal.h
monetdb5/modules/kernel/mmath.mal.h
monetdb5/modules/kernel/status.mal.h
monetdb5/modules/mal/00_batcalc_hge.mal.h
monetdb5/modules/mal/00_calc_hge.mal.h
monetdb5/modules/mal/00_mal_mapi_hge.mal.h
monetdb5/modules/mal/00_mkey_hge.mal.h
monetdb5/modules/mal/01_batcalc.mal.h
monetdb5/modules/mal/01_calc.mal.h
monetdb5/modules/mal/batExtensions.mal.h
monetdb5/modules/mal/batmtime.mal.h
monetdb5/modules/mal/bbp.mal.h
monetdb5/modules/mal/clients.mal.h
monetdb5/modules/mal/factories.mal.h
monetdb5/modules/mal/groupby.mal.h
monetdb5/modules/mal/inspect.mal.h
monetdb5/modules/mal/iterator.mal.h
monetdb5/modules/mal/json_util.mal.h
monetdb5/modules/mal/language.mal.h
monetdb5/modules/mal/mal_io.mal.h
monetdb5/modules/mal/mal_mapi.mal.h
monetdb5/modules/mal/manual.mal.h
monetdb5/modules/mal/mat.mal.h
monetdb5/modules/mal/mdb.mal.h
monetdb5/modules/mal/mkey.mal.h
monetdb5/modules/mal/oltp.mal.h
monetdb5/modules/mal/orderidx.mal.h
monetdb5/modules/mal/pcre.mal.h
monetdb5/modules/mal/profiler.mal.h
monetdb5/modules/mal/querylog.mal.h
monetdb5/modules/mal/remote.mal.h
monetdb5/modules/mal/sabaoth.mal.h
monetdb5/modules/mal/sample.mal.h
monetdb5/modules/mal/sysmon.mal.h
monetdb5/modules/mal/tokenizer.mal.h
monetdb5/modules/mal/transaction.mal.h
monetdb5/modules/mal/txtsim.mal.h
monetdb5/modules/mal/wlc.mal.h
monetdb5/optimizer/optimizer.mal.h
monetdb5/scheduler/run_adder.mal.h
monetdb5/scheduler/run_isolate.mal.h
monetdb5/scheduler/run_memo.mal.h
sql/backends/monet5/generator/generator.mal.h
sql/backends/monet5/generator/generator_hge.mal.h
sql/backends/monet5/sql.mal.h
sql/backends/monet5/sql_decimal.mal.h
sql/backends/monet5/sql_decimal_hge.mal.h
sql/backends/monet5/sql_hge.mal.h
sql/backends/monet5/sql_rank.mal.h
sql/backends/monet5/sql_rank_hge.mal.h
sql/backends/monet5/sql_transaction.mal.h
sql/backends/monet5/sqlcatalog.mal.h
sql/backends/monet5/wlr.mal.h
Branch: translate-scripts
Log Message:
Add option to keep MAL command's comment when translating to C header files.
The comments are used by some modules, so we will keep them.
diffs (truncated from 894 to 300 lines):
diff --git a/buildtools/autogen/scripts/mal2h.py
b/buildtools/autogen/scripts/mal2h.py
--- a/buildtools/autogen/scripts/mal2h.py
+++ b/buildtools/autogen/scripts/mal2h.py
@@ -13,6 +13,7 @@ import argparse
parser = argparse.ArgumentParser(description='Convert MonetDB MAL scripts to C
header files to be inlined')
parser.add_argument('file', metavar='F', type=str, help='The MAL file to
convert')
parser.add_argument('-t', '--trim', dest='trim', action='store_true',
help='trim whitespaces')
+parser.add_argument('-r', '--rcomments', dest='rcom', action='store_true',
help='remove comments')
# check arguments and veracity of the input file first
args = parser.parse_args()
@@ -56,8 +57,10 @@ insert1 = (
mal_h_output_file.write(insert1)
# Let's remove comments from the mal script with a Markov chain :) Bugs might
still be there
-# STATES 0 - OK, 1 in # comment, 2 between comment keyword and comment block,
3 inside address comment block,
-# 4 inside ' string, 5 inside " string, 6 inside whitespaces
+# STATES 0 - OK, 1 in # comment, 2 between comment keyword and comment block
(removing comments),
+# 3 inside address comment block (removing comments),
+# 4 between comment keyword and comment block (not removing comments),
+# 5 inside address comment block (not removing comments), 6 inside " string, 7
inside whitespaces
CACHE_SIZE = file_stat.st_blksize # we will set the cache size to the
filesystem blocksize
buffer = ['\0'] * CACHE_SIZE
@@ -79,17 +82,17 @@ def write_to_buffer(input_c):
while i < endloop:
c = mal_content[i]
- if cur_state == 1:
+ if cur_state == 1: # inside an hashtag comment
if c == '\n':
cur_state = 0
i += 1
continue
- elif cur_state == 2:
+ elif cur_state == 2: # before entering a MAL comment, and removing it
if c == '"':
cur_state = 3
i += 1
continue
- elif cur_state == 3:
+ elif cur_state == 3: # inside a MAL comment, and removing it
if c == '\\':
i += 2
elif c == '"':
@@ -98,7 +101,40 @@ while i < endloop:
else:
i += 1
continue
- elif cur_state == 4:
+ elif cur_state == 4: # before entering a MAL comment, but not removing it
+ if c == '"':
+ write_to_buffer('\\')
+ write_to_buffer('"')
+ cur_state = 5
+ i += 1
+ continue
+ elif cur_state == 5: # inside a MAL comment, but not removing it
+ if c == '\\' and i + 1 < endloop:
+ write_to_buffer('\\')
+ write_to_buffer('\\')
+ write_to_buffer('\\')
+ write_to_buffer('\\')
+ write_to_buffer('\\')
+ write_to_buffer(mal_content[i + 1])
+ i += 2
+ elif c == '\n':
+ write_to_buffer('\\')
+ write_to_buffer('n')
+ i += 1
+ elif c == '\t':
+ write_to_buffer('\\')
+ write_to_buffer('t')
+ i += 1
+ else:
+ if c == '"':
+ write_to_buffer('\\')
+ write_to_buffer('\"')
+ cur_state = 0
+ else:
+ write_to_buffer(c)
+ i += 1
+ continue
+ elif cur_state == 6: # inside a string
if c == '\\' and i + 1 < endloop:
write_to_buffer('\\')
write_to_buffer('\\')
@@ -109,22 +145,9 @@ while i < endloop:
write_to_buffer('\\')
write_to_buffer('n')
i += 1
- else:
- if c == '\'':
- cur_state = 0
- write_to_buffer(c)
- i += 1
- continue
- elif cur_state == 5:
- if c == '\\' and i + 1 < endloop:
+ elif c == '\t':
write_to_buffer('\\')
- write_to_buffer('\\')
- write_to_buffer('\\')
- write_to_buffer(mal_content[i + 1])
- i += 2
- elif c == '\n':
- write_to_buffer('\\')
- write_to_buffer('n')
+ write_to_buffer('t')
i += 1
else:
if c == '"':
@@ -133,7 +156,7 @@ while i < endloop:
write_to_buffer(c)
i += 1
continue
- elif cur_state == 6:
+ elif cur_state == 7: # inside whitespaces
if c not in (' ', '\t', '\n'):
cur_state = 0
continue
@@ -144,14 +167,14 @@ while i < endloop:
cur_state = 1
i += 1
continue
- elif c == '\'':
- write_to_buffer(c)
- cur_state = 4
- i += 1
- continue
elif c == 'c':
- if i + 7 < endloop and mal_content[i:i+8] == 'comment ':
- cur_state = 2
+ if i + 8 < endloop and mal_content[i:i+8] == 'comment ':
+ if args.rcom:
+ cur_state = 2
+ else:
+ for mchar in 'comment ':
+ write_to_buffer(mchar)
+ cur_state = 4
i += 7
else:
write_to_buffer('c')
@@ -160,7 +183,7 @@ while i < endloop:
elif c == '"':
write_to_buffer('\\')
write_to_buffer(c)
- cur_state = 5
+ cur_state = 6
i += 1
continue
elif c in (' ', '\t', '\n'):
@@ -173,7 +196,7 @@ while i < endloop:
else:
write_to_buffer(c)
if args.trim:
- cur_state = 6
+ cur_state = 7
i += 1
continue
diff --git a/buildtools/autogen/scripts/sql2h.py
b/buildtools/autogen/scripts/sql2h.py
--- a/buildtools/autogen/scripts/sql2h.py
+++ b/buildtools/autogen/scripts/sql2h.py
@@ -106,6 +106,10 @@ while i < endloop:
write_to_buffer('\\')
write_to_buffer('n')
i += 1
+ elif c == '\t':
+ write_to_buffer('\\')
+ write_to_buffer('t')
+ i += 1
else:
if c == '\'':
cur_state = 0
@@ -123,6 +127,10 @@ while i < endloop:
write_to_buffer('\\')
write_to_buffer('n')
i += 1
+ elif c == '\t':
+ write_to_buffer('\\')
+ write_to_buffer('t')
+ i += 1
else:
if c == '"':
cur_state = 0
diff --git a/monetdb5/mal/mal_import.c b/monetdb5/mal/mal_import.c
--- a/monetdb5/mal/mal_import.c
+++ b/monetdb5/mal/mal_import.c
@@ -172,38 +172,6 @@ malInclude(Client c, str name, int listi
c->listing = listing;
c->fdin = NULL;
-#ifdef HAVE_EMBEDDED
- (void) filename;
- (void) p;
- {
- size_t mal_init_len = strlen(mal_init_inline);
- buffer* mal_init_buf;
- stream* mal_init_stream;
-
- if ((mal_init_buf = GDKmalloc(sizeof(buffer))) == NULL)
- throw(MAL, "malInclude", MAL_MALLOC_FAIL);
- if ((mal_init_stream = buffer_rastream(mal_init_buf, name)) ==
NULL) {
- GDKfree(mal_init_buf);
- throw(MAL, "malInclude", MAL_MALLOC_FAIL);
- }
- buffer_init(mal_init_buf, mal_init_inline, mal_init_len);
- c->srcFile = name;
- c->yycur = 0;
- c->bak = NULL;
- if ((c->fdin = bstream_create(mal_init_stream, mal_init_len))
== NULL) {
- mnstr_destroy(mal_init_stream);
- GDKfree(mal_init_buf);
- throw(MAL, "malInclude", MAL_MALLOC_FAIL);
- }
- bstream_next(c->fdin);
- parseMAL(c, c->curprg, 1, INT_MAX);
- free(mal_init_buf);
- free(mal_init_stream);
- free(c->fdin);
- c->fdin = NULL;
- GDKfree(mal_init_buf);
- }
-#else
if ((filename = malResolveFile(name)) != NULL) {
name = filename;
do {
@@ -227,7 +195,7 @@ malInclude(Client c, str name, int listi
GDKfree(name);
c->fdin = NULL;
}
-#endif
+
restoreClient;
return msg;
}
diff --git a/monetdb5/modules/atoms/batxml.mal.h
b/monetdb5/modules/atoms/batxml.mal.h
--- a/monetdb5/modules/atoms/batxml.mal.h
+++ b/monetdb5/modules/atoms/batxml.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "batxml", "\nmodule batxml;\n\ncommand
batxml.xml(src:bat[:str]):bat[:xml]\naddress BATXMLstr2xml\n;\n\ncommand
batxml.str(src:bat[:xml]):bat[:str]\naddress BATXMLxml2str\n;\n\ncommand
batxml.document(src:bat[:str]):bat[:xml]\naddress BATXMLdocument\n;\n\ncommand
batxml.content(src:bat[:str]):bat[:xml]\naddress BATXMLcontent\n;\n\ncommand
batxml.comment(val:bat[:str]):bat[:xml]\naddress BATXMLcomment\n;\n\ncommand
batxml.parse(doccont:str,val:bat[:str],option:str):bat[:xml]\naddress
BATXMLparse\n;\n\ncommand batxml.serialize(val:bat[:xml]):bat[:str]\naddress
BATXMLxml2str\n;\n\ncommand batxml.text(val:bat[:xml]):bat[:str]\naddress
BATXMLxmltext\n;\n\ncommand
batxml.xquery(val:bat[:str],expr:str):bat[:xml]\naddress
BATXMLxquery\n;\n\n\ncommand batxml.pi(target:str,
val:bat[:xml]):bat[:xml]\naddress BATXMLpi\n;\n\ncommand
batxml.attribute(name:str, val:bat[:str]):bat[:xml]\naddress
BATXMLattribute\n;\n\ncommand batxml.element(name:str, s:bat[:xml])
:bat[:xml]\naddress BATXMLelementS
mall\n; \n\ncommand batxml.options(tag:str,
option:str,left:bat[:xml]):bat[:xml]\naddress BATXMLoptions\n;\n\ncommand
batxml.element(name:str, ns:xml, attr:xml, s:bat[:xml]):bat[:xml]\naddress
BATXMLelement\n;\n\ncommand batxml.concat(left:bat[:xml],right:bat[:xml]
):bat[:xml]\naddress BATXMLconcat\n;\n\npattern
batxml.forest(val:bat[:xml]...):bat[:xml]\naddress BATXMLforest\n;\n\ncommand
batxml.root(val:bat[:xml], version:str, standalone:str):bat[:xml]\naddress
BATXMLroot\n;\n\ncommand batxml.isdocument(val:bat[:str]):bat[:bit]\naddress
BATXMLisdocument\n;\n\ncommand xml.aggr(val:bat[:xml]):xml\naddress
BATXMLgroup\n;\n\ncommand xml.subaggr(val:bat[:xml],g:bat[:oid],e:bat[:any_1],
skip_nils:bit) :bat[:xml]\naddress AGGRsubxml\n;\n\ncommand
xml.subaggr(val:bat[:xml],g:bat[:oid],e:bat[:any_1],s:bat[:oid], skip_nils:bit)
:bat[:xml]\naddress AGGRsubxmlcand\n;\n\nmodule batcalc;\ncommand
xml(src:bat[:str]):bat[:xml] address BATXMLstr2xml;" },
+{ "batxml", "\nmodule batxml;\n\ncommand
batxml.xml(src:bat[:str]):bat[:xml]\naddress BATXMLstr2xml\ncomment \"Cast the
string to an xml compliant string.\";\n\ncommand
batxml.str(src:bat[:xml]):bat[:str]\naddress BATXMLxml2str\ncomment \"Cast the
xml to a string.\";\n\ncommand
batxml.document(src:bat[:str]):bat[:xml]\naddress BATXMLdocument\ncomment
\"Parse the string as an XML document.\";\n\ncommand
batxml.content(src:bat[:str]):bat[:xml]\naddress BATXMLcontent\ncomment \"Parse
the string as XML element content.\";\n\ncommand
batxml.comment(val:bat[:str]):bat[:xml]\naddress BATXMLcomment\ncomment
\"Create an XML comment element.\";\n\ncommand
batxml.parse(doccont:str,val:bat[:str],option:str):bat[:xml]\naddress
BATXMLparse\ncomment \"Parse the XML document or element string
values.\";\n\ncommand batxml.serialize(val:bat[:xml]):bat[:str]\naddress
BATXMLxml2str\ncomment \"Serialize the XML object to a string.\";\n\ncommand
batxml.text(val:bat[:xml]):bat[:str]\naddress BATXMLxmltext
\ncomment \"Serialize the XML object to a string.\";\n\ncommand
batxml.xquery(val:bat[:str],expr:str):bat[:xml]\naddress BATXMLxquery\ncomment
\"Execute the XQuery against the elements.\";\n\n\ncommand
batxml.pi(target:str, val:bat[:xml]):bat[:xml]\naddress BATXMLpi\ncomment
\"Construct a processing instruction.\";\n\ncommand batxml.attribute(name:str,
val:bat[:str]):bat[:xml]\naddress BATXMLattribute\ncomment \"Construct an
attribute value pair.\";\n\ncommand batxml.element(name:str, s:bat[:xml])
:bat[:xml]\naddress BATXMLelementSmall\ncomment \"The basic building block for
XML elements are namespaces, attributes and a sequence of XML elements. The
name space and the attributes may be left unspecified.\"; \n\ncommand
batxml.options(tag:str, option:str,left:bat[:xml]):bat[:xml]\naddress
BATXMLoptions\ncomment \"Create the components including NULL
conversions.\";\n\ncommand batxml.element(name:str, ns:xml, attr:xml,
s:bat[:xml]):bat[:xml]\naddress BATXMLelement\ncomment \"The basic
building block for XML elements are namespaces, attributes and a sequence of
XML elements. The name space and the attributes may be left
unspecified(=nil).\";\n\ncommand batxml.concat(left:bat[:xml],right:bat[:xml]
):bat[:xml]\naddress BATXMLconcat\ncomment \"Concatenate the XML
values.\";\n\npattern batxml.forest(val:bat[:xml]...):bat[:xml]\naddress
BATXMLforest\ncomment \"Construct an element list.\";\n\ncommand
batxml.root(val:bat[:xml], version:str, standalone:str):bat[:xml]\naddress
BATXMLroot\ncomment \"Contruct the root nodes.\";\n\ncommand
batxml.isdocument(val:bat[:str]):bat[:bit]\naddress BATXMLisdocument\ncomment
\"Validate the string as a XML document.\";\n\ncommand
xml.aggr(val:bat[:xml]):xml\naddress BATXMLgroup\ncomment \"Aggregate the XML
values.\";\n\ncommand xml.subaggr(val:bat[:xml],g:bat[:oid],e:bat[:any_1],
skip_nils:bit) :bat[:xml]\naddress AGGRsubxml\ncomment \"Grouped aggregation of
XML values.\";\n\ncommand xml.subaggr(val:bat[:xml],g:bat[:oid],e:bat[:any_1]
,s:bat[:oid], skip_nils:bit) :bat[:xml]\naddress AGGRsubxmlcand\ncomment
\"Grouped aggregation of XML values with candidates list.\";\n\nmodule
batcalc;\ncommand xml(src:bat[:str]):bat[:xml] address BATXMLstr2xml;" },
diff --git a/monetdb5/modules/atoms/blob.mal.h
b/monetdb5/modules/atoms/blob.mal.h
--- a/monetdb5/modules/atoms/blob.mal.h
+++ b/monetdb5/modules/atoms/blob.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "blob", "\nmodule blob;\n\natom blob;\n\ncommand tostr() address
BLOBtostr;\ncommand fromstr() address BLOBfromstr;\ncommand cmp() address
BLOBcmp;\ncommand hash() address BLOBhash;\ncommand null() address
BLOBnull;\ncommand read() address BLOBread;\ncommand write() address
BLOBwrite;\ncommand put() address BLOBput;\ncommand del() address
BLOBdel;\ncommand length() address BLOBlength;\ncommand heap() address
BLOBheap;\n\ncommand blob(s:blob):blob\naddress BLOBblob_blob\n;\n\ncommand
blob(s:str):blob\naddress BLOBblob_fromstr;\n\ncommand toblob(v:str)
:blob\naddress BLOBtoblob\n;\ncommand nitems(b:blob):int\naddress
BLOBnitems\n;\n\ncommand prelude() :void\naddress
BLOBprelude;\n\nblob.prelude();\n\nmodule calc;\n\ncommand blob(b:blob):blob
address BLOBblob_blob;\ncommand blob(s:str):blob address BLOBblob_fromstr;" },
+{ "blob", "\nmodule blob;\n\natom blob;\n\ncommand tostr() address
BLOBtostr;\ncommand fromstr() address BLOBfromstr;\ncommand cmp() address
BLOBcmp;\ncommand hash() address BLOBhash;\ncommand null() address
BLOBnull;\ncommand read() address BLOBread;\ncommand write() address
BLOBwrite;\ncommand put() address BLOBput;\ncommand del() address
BLOBdel;\ncommand length() address BLOBlength;\ncommand heap() address
BLOBheap;\n\ncommand blob(s:blob):blob\naddress BLOBblob_blob\ncomment \"Noop
routine.\";\n\ncommand blob(s:str):blob\naddress BLOBblob_fromstr;\n\ncommand
toblob(v:str) :blob\naddress BLOBtoblob\ncomment \"store a string as a
blob.\";\ncommand nitems(b:blob):int\naddress BLOBnitems\ncomment \"get the
number of bytes in this blob.\";\n\ncommand prelude() :void\naddress
BLOBprelude;\n\nblob.prelude();\n\nmodule calc;\n\ncommand blob(b:blob):blob
address BLOBblob_blob;\ncommand blob(s:str):blob address BLOBblob_fromstr;" },
diff --git a/monetdb5/modules/atoms/color.mal.h
b/monetdb5/modules/atoms/color.mal.h
--- a/monetdb5/modules/atoms/color.mal.h
+++ b/monetdb5/modules/atoms/color.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "color", "\nmodule color;\n\natom color:int;\n\ncommand tostr() address
color_tostr;\ncommand fromstr() address color_fromstr;\n\ncommand
str(s:color):str\naddress CLRstr\n;\n\ncommand color(s:str):color\naddress
CLRcolor\n;\n\ncommand rgb(r:int, g:int, b:int):color\naddress
CLRrgb\ncomment\t\"Converts an RGB triplets to a color atom\";\n\ncommand red
(c:color) :int\naddress CLRred\ncomment\t\"Extracts red component from a color
atom\";\n\ncommand green(c:color) :int\naddress CLRgreen\ncomment\t\"Extracts
green component from a color atom\";\n\ncommand blue (c:color) :int\naddress
CLRblue\ncomment\t\"Extracts blue component from a color atom\";\n\ncommand
hue(c:color) :int\naddress CLRhueInt\ncomment\t\"Extracts hue component from a
color atom\";\n\ncommand saturation(c:color) :int\naddress
CLRsaturationInt\ncomment\t\"Extracts saturation component from a color
atom\";\n\ncommand value(c:color) :int\naddress
CLRvalueInt\ncomment\t\"Extracts value component from a color atom\";\n\
ncommand hsv(h:flt,s:flt, v:flt) :color\naddress CLRhsv\ncomment\t\"Converts
an HSV triplets to a color atom\";\n\ncommand hue(c:color) :flt\naddress
CLRhue\ncomment\t\"Extracts hue component from a color atom\";\n\ncommand
saturation(c:color) :flt\naddress CLRsaturation\ncomment\t\"Extracts saturation
component from a color atom\";\n\ncommand value(c:color) :flt\naddress
CLRvalue\ncomment\t\"Extracts value component from a color atom\";\n\ncommand
ycc(y:int,cr:int,cb:int) :color\naddress CLRycc\ncomment\t\"Converts an YCC
triplets to a color atom\";\n\ncommand luminance (c:color) :int\naddress
CLRluminance\ncomment\t\"Extracts Y(luminance) component from a color
atom\";\n\ncommand cr(c:color) :int\naddress CLRcr\ncomment\t\"Extracts Cr(red
color) component from a color atom\";\n\ncommand cb(c:color) :int\naddress
CLRcb\ncomment\t\"Extracts Cb(blue color) component from a color atom\";\n" },
+{ "color", "\nmodule color;\n\natom color:int;\n\ncommand tostr() address
color_tostr;\ncommand fromstr() address color_fromstr;\n\ncommand
str(s:color):str\naddress CLRstr\ncomment \"Converts color to string
\";\n\ncommand color(s:str):color\naddress CLRcolor\ncomment \"Converts string
to color\";\n\ncommand rgb(r:int, g:int, b:int):color\naddress
CLRrgb\ncomment\t\"Converts an RGB triplets to a color atom\";\n\ncommand red
(c:color) :int\naddress CLRred\ncomment\t\"Extracts red component from a color
atom\";\n\ncommand green(c:color) :int\naddress CLRgreen\ncomment\t\"Extracts
green component from a color atom\";\n\ncommand blue (c:color) :int\naddress
CLRblue\ncomment\t\"Extracts blue component from a color atom\";\n\ncommand
hue(c:color) :int\naddress CLRhueInt\ncomment\t\"Extracts hue component from a
color atom\";\n\ncommand saturation(c:color) :int\naddress
CLRsaturationInt\ncomment\t\"Extracts saturation component from a color
atom\";\n\ncommand value(c:color) :int\naddress
CLRvalueInt\ncomment\t\"Extracts value component from a color
atom\";\n\ncommand hsv(h:flt,s:flt, v:flt) :color\naddress
CLRhsv\ncomment\t\"Converts an HSV triplets to a color atom\";\n\ncommand
hue(c:color) :flt\naddress CLRhue\ncomment\t\"Extracts hue component from a
color atom\";\n\ncommand saturation(c:color) :flt\naddress
CLRsaturation\ncomment\t\"Extracts saturation component from a color
atom\";\n\ncommand value(c:color) :flt\naddress CLRvalue\ncomment\t\"Extracts
value component from a color atom\";\n\ncommand ycc(y:int,cr:int,cb:int)
:color\naddress CLRycc\ncomment\t\"Converts an YCC triplets to a color
atom\";\n\ncommand luminance (c:color) :int\naddress
CLRluminance\ncomment\t\"Extracts Y(luminance) component from a color
atom\";\n\ncommand cr(c:color) :int\naddress CLRcr\ncomment\t\"Extracts Cr(red
color) component from a color atom\";\n\ncommand cb(c:color) :int\naddress
CLRcb\ncomment\t\"Extracts Cb(blue color) component from a color atom\";\n" },
diff --git a/monetdb5/modules/atoms/identifier.mal.h
b/monetdb5/modules/atoms/identifier.mal.h
--- a/monetdb5/modules/atoms/identifier.mal.h
+++ b/monetdb5/modules/atoms/identifier.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "identifier", "\natom identifier:str;\n\ncommand fromstr()\naddress
IDfromString\n;\n\ncommand tostr()\naddress IDtoString\n;\n\ncommand
identifier(s:str):identifier\naddress IDentifier\n;\n\ncommand
prelude():void\naddress IDprelude\n;\n\nidentifier.prelude();\n" },
+{ "identifier", "\natom identifier:str;\n\ncommand fromstr()\naddress
IDfromString\ncomment \"Convert a string to an identifier without any
check\";\n\ncommand tostr()\naddress IDtoString\ncomment \"Convert identifier
to string equivalent\";\n\ncommand identifier(s:str):identifier\naddress
IDentifier\ncomment \"Cast a string to an identifer \";\n\ncommand
prelude():void\naddress IDprelude\ncomment \"Initialize the
module\";\n\nidentifier.prelude();\n" },
diff --git a/monetdb5/modules/atoms/inet.mal.h
b/monetdb5/modules/atoms/inet.mal.h
--- a/monetdb5/modules/atoms/inet.mal.h
+++ b/monetdb5/modules/atoms/inet.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "inet", "\natom inet:lng;\n\ncommand null()\naddress INETnull;\ncommand
cmp()\naddress INETcompare;\ncommand fromstr()\naddress
INETfromString\n;\ncommand tostr()\naddress INETtoString\n;\ncommand
new(s:str):inet\naddress INETnew\n;\ncommand isnil(v:inet):bit\naddress
INET_isnil\n;\ncommand =(v:inet,w:inet):bit\naddress INET_comp_EQ\n;\ncommand
!=(v:inet,w:inet):bit\naddress INET_comp_NEQ\n;\ncommand
<(v:inet,w:inet):bit\naddress INET_comp_LT\n;\ncommand
>(v:inet,w:inet):bit\naddress INET_comp_GT\n;\ncommand
<=(v:inet,w:inet):bit\naddress INET_comp_LE\n;\ncommand
>=(v:inet,w:inet):bit\naddress INET_comp_GE\n;\ncommand
<<(v:inet,w:inet):bit\naddress INET_comp_CW\n;\ncommand
<<=(v:inet,w:inet):bit\naddress INET_comp_CWE\n;\ncommand
>>(v:inet,w:inet):bit\naddress INET_comp_CS\n;\ncommand
>>=(v:inet,w:inet):bit\naddress INET_comp_CSE\n;\ncommand
broadcast(:inet):inet\naddress INETbroadcast\n;\ncommand
host(:inet):str\naddress INEThost\n;\ncommand masklen(:inet):int\naddress
INETmaskle
n\n;\ncommand setmasklen(:inet,:int):inet\naddress INETsetmasklen\n;\ncommand
netmask(:inet):inet\naddress INETnetmask\n;\ncommand
hostmask(:inet):inet\naddress INEThostmask\n;\ncommand
network(:inet):inet\naddress INETnetwork\n;\ncommand text(:inet):str\naddress
INETtext\n;\ncommand abbrev(:inet):str\naddress INETabbrev\n;\n\nmodule
calc;\n\ncommand inet(s:inet):inet\naddress INET_inet\n;\n\ncommand
inet(s:str):inet\naddress INET_fromstr\n;\n\ncommand
==(v:inet,w:inet):bit\naddress INET_comp_EQ\n;\n\ncommand
!=(v:inet,w:inet):bit\naddress INET_comp_NEQ\n;\n\ncommand
<(v:inet,w:inet):bit\naddress INET_comp_LT\n;\n\ncommand
>(v:inet,w:inet):bit\naddress INET_comp_GT\n;\n\ncommand
<=(v:inet,w:inet):bit\naddress INET_comp_LE\n;\n\ncommand
>=(v:inet,w:inet):bit\naddress INET_comp_GE\n;" },
+{ "inet", "\natom inet:lng;\n\ncommand null()\naddress INETnull;\ncommand
cmp()\naddress INETcompare;\ncommand fromstr()\naddress INETfromString\ncomment
\"Convert a string to an inet\";\ncommand tostr()\naddress
INETtoString\ncomment \"Convert inet to string equivalent\";\ncommand
new(s:str):inet\naddress INETnew\ncomment \"Create an inet from a string
literal\";\ncommand isnil(v:inet):bit\naddress INET_isnil\ncomment \"Nil test
for inet value\";\ncommand =(v:inet,w:inet):bit\naddress INET_comp_EQ\ncomment
\"Equality of two inets\";\ncommand !=(v:inet,w:inet):bit\naddress
INET_comp_NEQ\ncomment \"Inequality of two inets\";\ncommand
<(v:inet,w:inet):bit\naddress INET_comp_LT\ncomment \"Whether v is less than
w\";\ncommand >(v:inet,w:inet):bit\naddress INET_comp_GT\ncomment \"Whether v
is greater than w\";\ncommand <=(v:inet,w:inet):bit\naddress
INET_comp_LE\ncomment \"Whether v is less than or equal to w\";\ncommand
>=(v:inet,w:inet):bit\naddress INET_comp_GE\ncomment \"Whether v is
equal to or greater than w\";\ncommand <<(v:inet,w:inet):bit\naddress
INET_comp_CW\ncomment \"Whether v is contained within w\";\ncommand
<<=(v:inet,w:inet):bit\naddress INET_comp_CWE\ncomment \"Whether v is contained
within or is equal to w\";\ncommand >>(v:inet,w:inet):bit\naddress
INET_comp_CS\ncomment \"Whether v contains w\";\ncommand
>>=(v:inet,w:inet):bit\naddress INET_comp_CSE\ncomment \"Whether v contains or
is equal to w\";\ncommand broadcast(:inet):inet\naddress INETbroadcast\ncomment
\"Returns the broadcast address for network\";\ncommand
host(:inet):str\naddress INEThost\ncomment \"Extract IP address as
text\";\ncommand masklen(:inet):int\naddress INETmasklen\ncomment \"Extract
netmask length\";\ncommand setmasklen(:inet,:int):inet\naddress
INETsetmasklen\ncomment \"Set netmask length for inet value\";\ncommand
netmask(:inet):inet\naddress INETnetmask\ncomment \"Construct netmask for
network\";\ncommand hostmask(:inet):inet\naddress INEThostmask\ncomment
\"Construct ho
st mask for network\";\ncommand network(:inet):inet\naddress
INETnetwork\ncomment \"Extract network part of address\";\ncommand
text(:inet):str\naddress INETtext\ncomment \"Extract IP address and netmask
length as text\";\ncommand abbrev(:inet):str\naddress INETabbrev\ncomment
\"Abbreviated display format as text\";\n\nmodule calc;\n\ncommand
inet(s:inet):inet\naddress INET_inet\ncomment \"Convert a inet to an
inet\";\n\ncommand inet(s:str):inet\naddress INET_fromstr\ncomment \"Convert a
string to an inet\";\n\ncommand ==(v:inet,w:inet):bit\naddress
INET_comp_EQ\ncomment \"Equality of two inets\";\n\ncommand
!=(v:inet,w:inet):bit\naddress INET_comp_NEQ\ncomment \"Inequality of two
inets\";\n\ncommand <(v:inet,w:inet):bit\naddress INET_comp_LT\ncomment
\"Whether v is less than w\";\n\ncommand >(v:inet,w:inet):bit\naddress
INET_comp_GT\ncomment \"Whether v is greater than w\";\n\ncommand
<=(v:inet,w:inet):bit\naddress INET_comp_LE\ncomment \"Whether v is less than
or equal to w\";\n\n
command >=(v:inet,w:inet):bit\naddress INET_comp_GE\ncomment \"Whether v is
equal to or greater than w\";" },
diff --git a/monetdb5/modules/atoms/json.mal.h
b/monetdb5/modules/atoms/json.mal.h
--- a/monetdb5/modules/atoms/json.mal.h
+++ b/monetdb5/modules/atoms/json.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "json", "\natom json:str;\n\ncommand fromstr()\naddress
JSONfromString\n;\n\ncommand tostr()\naddress JSONtoString\n;\n\ncommand
new(j:str):json\naddress JSONstr2json\n;\n\ncommand
calc.json(j:str):json\naddress JSONstr2json\n;\n\ncommand
calc.json(j:json):json\naddress JSONstr2json\n;\n\ncommand
str(j:json):str\naddress JSONjson2str\n;\n\ncommand text(j:json):str\naddress
JSONjson2text\n;\n\ncommand text(j:json,s:str):str\naddress
JSONjson2textSeparator\n;\n\ncommand number(j:json):dbl\naddress
JSONjson2number\n;\n\ncommand integer(j:json):lng\naddress
JSONjson2integer\n;\n\ncommand dump(j:json):void\naddress JSONdump;\n\ncommand
filter(name:json, pathexpr:str) :json\naddress JSONfilter\n;\n\ncommand
filter(name:json, idx:bte) :json\naddress JSONfilterArray_bte;\ncommand
filter(name:json, idx:bte,other:str) :json\naddress
JSONfilterArrayDefault_bte;\ncommand filter(name:json, idx:sht) :json\naddress
JSONfilterArray_sht;\ncommand filter(name:json, idx:sht,other:str)
:json\naddress
JSONfilterArrayDefault_sht;\ncommand filter(name:json, idx:int)
:json\naddress JSONfilterArray_int;\ncommand filter(name:json, idx:int,
other:str) :json\naddress JSONfilterArrayDefault_int;\ncommand
filter(name:json, idx:lng) :json\naddress JSONfilterArray_lng;\ncommand
filter(name:json, idx:lng, other:str) :json\naddress
JSONfilterArrayDefault_lng\n;\n\ncommand isvalid(val:json):bit\naddress
JSONisvalid\n;\n\ncommand isobject(val:json):bit\naddress
JSONisobject\n;\n\ncommand isarray(val:json):bit\naddress
JSONisarray\n;\n\ncommand isvalid(val:str):bit\naddress
JSONisvalid\n;\n\ncommand isobject(val:str):bit\naddress
JSONisobject\n;\n\ncommand isarray(val:str):bit\naddress
JSONisarray\n;\n\ncommand length(val:json):int\naddress
JSONlength\n;\n\npattern unfold(val:json)(k:bat[:str],v:bat[:json])\naddress
JSONunfold\n;\n\npattern
unfold(val:json)(o:bat[:oid],k:bat[:str],v:bat[:json])\naddress
JSONunfold\n;\n\npattern
fold(o:bat[:oid],k:bat[:str],v:bat[:any]):json\naddress JSONfold\n;
\n\npattern fold(k:bat[:str],v:bat[:any]):json\naddress JSONfold\n;\n\npattern
fold(v:bat[:any]):json\naddress JSONfold\n;\n\ncommand
keyarray(val:json):json\naddress JSONkeyArray\n;\n\ncommand
valuearray(val:json):json\naddress JSONvalueArray\n;\n\ncommand
keys(val:json):bat[:str]\naddress JSONkeyTable\n;\n\ncommand
values(val:json):bat[:json]\naddress JSONvalueTable\n;\n\ncommand
output(b:bat[:any_1]):str\naddress JSONtextString\n;\n\ncommand
suboutput(b:bat[:any_1], gid:bat[:oid], ext:bat[:lng],
flg:bit):bat[:str]\naddress JSONtextGrouped\n;\n\ncommand prelude()\naddress
JSONprelude;\n\npattern renderobject(val:any...):json\naddress
JSONrenderobject;\n\npattern renderarray(val:any...):json\naddress
JSONrenderarray;\n\ncommand aggr.jsonaggr(val:bat[:str]):str\naddress
JSONgroupStr\n;\n\ncommand aggr.jsonaggr(val:bat[:dbl]):str\naddress
JSONgroupStr\n;\n\ncommand
aggr.subjsonaggr(val:bat[:str],g:bat[:oid],e:bat[:any_1], skip_nils:bit)
:bat[:str]\naddress JSONsubjson\n;\n\ncommand a
ggr.subjsonaggr(val:bat[:dbl],g:bat[:oid],e:bat[:any_1], skip_nils:bit)
:bat[:str]\naddress JSONsubjson\n;\n\ncommand
aggr.subjsonaggr(val:bat[:str],g:bat[:oid],e:bat[:any_1],s:bat[:oid],
skip_nils:bit) :bat[:str]\naddress JSONsubjsoncand\n;\n\ncommand
aggr.subjsonaggr(val:bat[:dbl],g:bat[:oid],e:bat[:any_1],s:bat[:oid],
skip_nils:bit) :bat[:str]\naddress JSONsubjsoncand\n;\n\nmodule
calc;\n\npattern ==(l:json,r:json):bit\naddress CMDvarEQ\n;\n\npattern
==(l:json,r:json,nil_matches:bit):bit\naddress CMDvarEQ\n;\n\npattern
!=(l:json,r:json):bit\naddress CMDvarNE\n;\n\npattern
!=(l:json,r:json,nil_matches:bit):bit\naddress CMDvarNE\n;\n\npattern
<(l:json,r:json):bit\naddress CMDvarLT\n;\n\npattern
<=(l:json,r:json):bit\naddress CMDvarLE\n;\n\npattern
>(l:json,r:json):bit\naddress CMDvarGT\n;\n\npattern
>=(l:json,r:json):bit\naddress CMDvarGE\n;\n\nmodule batcalc;\n\npattern
==(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress CMDbatEQ\n;\n\npattern
==(b1:bat[:json],b2:bat[:json],nil_ma
tches:bit) :bat[:bit]\naddress CMDbatEQ\n;\n\npattern
!=(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress CMDbatNE\n;\n\npattern
!=(b1:bat[:json],b2:bat[:json],nil_matches:bit) :bat[:bit]\naddress
CMDbatNE\n;\n\npattern <(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress
CMDbatLT\n;\n\npattern <=(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress
CMDbatLE\n;\n\npattern >(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress
CMDbatGT\n;\n\npattern >=(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress
CMDbatGE\n;\n\njson.prelude();" },
+{ "json", "\natom json:str;\n\ncommand fromstr()\naddress
JSONfromString\ncomment \"Validate a string to be JSON compliant. A NOOP if
valid json, NULL otherwise.\";\n\ncommand tostr()\naddress
JSONtoString\ncomment \"Convert JSON to its string equivalent. Dealing with
escape characters\";\n\ncommand new(j:str):json\naddress JSONstr2json\ncomment
\"Convert string to its JSON. Dealing with escape characters\";\n\ncommand
calc.json(j:str):json\naddress JSONstr2json\ncomment \"Convert string to its
JSON. Dealing with escape characters\";\n\ncommand
calc.json(j:json):json\naddress JSONstr2json\ncomment \"Convert JSON to JSON.
Dealing with escape characters\";\n\ncommand str(j:json):str\naddress
JSONjson2str\ncomment \"Convert JSON to its string equivalent. Dealing with
escape characters\";\n\ncommand text(j:json):str\naddress
JSONjson2text\ncomment \"Convert JSON values to their plain string
equivalent.\";\n\ncommand text(j:json,s:str):str\naddress
JSONjson2textSeparator\ncomment \"Conve
rt JSON values to their plain string equivalent, injecting a
separator.\";\n\ncommand number(j:json):dbl\naddress JSONjson2number\ncomment
\"Convert simple JSON values to a double, return nil upon error.\";\n\ncommand
integer(j:json):lng\naddress JSONjson2integer\ncomment \"Convert simple JSON
values to an integer, return nil upon error.\";\n\ncommand
dump(j:json):void\naddress JSONdump;\n\ncommand filter(name:json, pathexpr:str)
:json\naddress JSONfilter\ncomment \"Filter all members of an object by a path
expression, returning an array.\nNon-matching elements are
skipped.\";\n\ncommand filter(name:json, idx:bte) :json\naddress
JSONfilterArray_bte;\ncommand filter(name:json, idx:bte,other:str)
:json\naddress JSONfilterArrayDefault_bte;\ncommand filter(name:json, idx:sht)
:json\naddress JSONfilterArray_sht;\ncommand filter(name:json,
idx:sht,other:str) :json\naddress JSONfilterArrayDefault_sht;\ncommand
filter(name:json, idx:int) :json\naddress JSONfilterArray_int;\ncommand filter(n
ame:json, idx:int, other:str) :json\naddress
JSONfilterArrayDefault_int;\ncommand filter(name:json, idx:lng) :json\naddress
JSONfilterArray_lng;\ncommand filter(name:json, idx:lng, other:str)
:json\naddress JSONfilterArrayDefault_lng\ncomment \"Extract a single array
element\";\n\ncommand isvalid(val:json):bit\naddress JSONisvalid\ncomment
\"Validate the string as a valid JSON document\";\n\ncommand
isobject(val:json):bit\naddress JSONisobject\ncomment \"Validate the string as
a valid JSON object\";\n\ncommand isarray(val:json):bit\naddress
JSONisarray\ncomment \"Validate the string as a valid JSON array\";\n\ncommand
isvalid(val:str):bit\naddress JSONisvalid\ncomment \"Validate the string as a
valid JSON document\";\n\ncommand isobject(val:str):bit\naddress
JSONisobject\ncomment \"Validate the string as a valid JSON
object\";\n\ncommand isarray(val:str):bit\naddress JSONisarray\ncomment
\"Validate the string as a valid JSON array\";\n\ncommand
length(val:json):int\naddress JSONleng
th\ncomment \"Returns the number of elements in the outermost JSON
object.\";\n\npattern unfold(val:json)(k:bat[:str],v:bat[:json])\naddress
JSONunfold\ncomment \"Expands the outermost JSON object into key-value
pairs.\";\n\npattern
unfold(val:json)(o:bat[:oid],k:bat[:str],v:bat[:json])\naddress
JSONunfold\ncomment \"Expands the outermost JSON object into key-value
pairs.\";\n\npattern fold(o:bat[:oid],k:bat[:str],v:bat[:any]):json\naddress
JSONfold\ncomment \"Combine the key-value pairs into a single json object
list.\";\n\npattern fold(k:bat[:str],v:bat[:any]):json\naddress
JSONfold\ncomment \"Combine the key-value pairs into a single json object
list.\";\n\npattern fold(v:bat[:any]):json\naddress JSONfold\ncomment \"Combine
the value list into a single json array object.\";\n\ncommand
keyarray(val:json):json\naddress JSONkeyArray\ncomment \"Expands the outermost
JSON object keys into a JSON value array.\";\n\ncommand
valuearray(val:json):json\naddress JSONvalueArray\ncomment \"Ex
pands the outermost JSON object values into a JSON value array.\";\n\ncommand
keys(val:json):bat[:str]\naddress JSONkeyTable\ncomment \"Expands the outermost
JSON object names.\";\n\ncommand values(val:json):bat[:json]\naddress
JSONvalueTable\ncomment \"Expands the outermost JSON values.\";\n\ncommand
output(b:bat[:any_1]):str\naddress JSONtextString\ncomment \"Pack the values
into a single json structure\";\n\ncommand suboutput(b:bat[:any_1],
gid:bat[:oid], ext:bat[:lng], flg:bit):bat[:str]\naddress
JSONtextGrouped\ncomment \"Pack the values into a json structure\";\n\ncommand
prelude()\naddress JSONprelude;\n\npattern
renderobject(val:any...):json\naddress JSONrenderobject;\n\npattern
renderarray(val:any...):json\naddress JSONrenderarray;\n\ncommand
aggr.jsonaggr(val:bat[:str]):str\naddress JSONgroupStr\ncomment \"Aggregate the
string values to array.\";\n\ncommand aggr.jsonaggr(val:bat[:dbl]):str\naddress
JSONgroupStr\ncomment \"Aggregate the double values to array.\";\n\ncommand
aggr.subjsonaggr(val:bat[:str],g:bat[:oid],e:bat[:any_1], skip_nils:bit)
:bat[:str]\naddress JSONsubjson\ncomment \"Grouped aggregation of
values.\";\n\ncommand aggr.subjsonaggr(val:bat[:dbl],g:bat[:oid],e:bat[:any_1],
skip_nils:bit) :bat[:str]\naddress JSONsubjson\ncomment \"Grouped aggregation
of values.\";\n\ncommand
aggr.subjsonaggr(val:bat[:str],g:bat[:oid],e:bat[:any_1],s:bat[:oid],
skip_nils:bit) :bat[:str]\naddress JSONsubjsoncand\ncomment \"Grouped
aggregation of values with candidates list.\";\n\ncommand
aggr.subjsonaggr(val:bat[:dbl],g:bat[:oid],e:bat[:any_1],s:bat[:oid],
skip_nils:bit) :bat[:str]\naddress JSONsubjsoncand\ncomment \"Grouped
aggregation of values with candidates list.\";\n\nmodule calc;\n\npattern
==(l:json,r:json):bit\naddress CMDvarEQ\ncomment \"Return V1 ==
V2\";\n\npattern ==(l:json,r:json,nil_matches:bit):bit\naddress
CMDvarEQ\ncomment \"Return V1 == V2\";\n\npattern
!=(l:json,r:json):bit\naddress CMDvarNE\ncomment \"Return V1 !=
V2\";\n\npattern !=(
l:json,r:json,nil_matches:bit):bit\naddress CMDvarNE\ncomment \"Return V1 !=
V2\";\n\npattern <(l:json,r:json):bit\naddress CMDvarLT\ncomment \"Return V1 <
V2\";\n\npattern <=(l:json,r:json):bit\naddress CMDvarLE\ncomment \"Return V1
<= V2\";\n\npattern >(l:json,r:json):bit\naddress CMDvarGT\ncomment \"Return V1
> V2\";\n\npattern >=(l:json,r:json):bit\naddress CMDvarGE\ncomment \"Return V1
>= V2\";\n\nmodule batcalc;\n\npattern ==(b1:bat[:json],b2:bat[:json])
:bat[:bit]\naddress CMDbatEQ\ncomment \"Return B1 == B2\";\n\npattern
==(b1:bat[:json],b2:bat[:json],nil_matches:bit) :bat[:bit]\naddress
CMDbatEQ\ncomment \"Return B1 == B2\";\n\npattern
!=(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress CMDbatNE\ncomment \"Return
B1 != B2\";\n\npattern !=(b1:bat[:json],b2:bat[:json],nil_matches:bit)
:bat[:bit]\naddress CMDbatNE\ncomment \"Return B1 != B2\";\n\npattern
<(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress CMDbatLT\ncomment \"Return
B1 < B2\";\n\npattern <=(b1:bat[:json],b2:bat[
:json]) :bat[:bit]\naddress CMDbatLE\ncomment \"Return B1 <= B2\";\n\npattern
>(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress CMDbatGT\ncomment \"Return
B1 > B2\";\n\npattern >=(b1:bat[:json],b2:bat[:json]) :bat[:bit]\naddress
CMDbatGE\ncomment \"Return B1 >= B2\";\n\njson.prelude();" },
diff --git a/monetdb5/modules/atoms/mtime.mal.h
b/monetdb5/modules/atoms/mtime.mal.h
--- a/monetdb5/modules/atoms/mtime.mal.h
+++ b/monetdb5/modules/atoms/mtime.mal.h
@@ -7,4 +7,4 @@
*/
// This file was generated automatically with mal2h.py. Do not edit this file
directly.
-{ "mtime", "\natom date :int;\ncommand date(s:date):date\naddress
MTIMEdate_date\n;\n\ncommand fromstr()\naddress date_fromstr;\ncommand
tostr()\naddress date_tostr;\n\n\npattern ==(v:date,w:date):bit\naddress
CMDvarEQ\n;\npattern ==(v:date,w:date,nil_matches:bit):bit\naddress
CMDvarEQ\n;\npattern !=(v:date,w:date):bit\naddress CMDvarNE\n;\npattern
!=(v:date,w:date,nil_matches:bit):bit\naddress CMDvarNE\n;\npattern
<(v:date,w:date):bit\naddress CMDvarLT\n;\npattern
<=(v:date,w:date):bit\naddress CMDvarLE\n;\npattern
>(v:date,w:date):bit\naddress CMDvarGT\n;\npattern
>=(v:date,w:date):bit\naddress CMDvarGE\n;\npattern isnil(v:date):bit\naddress
CMDvarISNIL\n;\n\nmodule mtime;\npattern calc.==(v:date,w:date):bit\naddress
CMDvarEQ\n;\npattern calc.==(v:date,w:date,nil_matches:bit):bit\naddress
CMDvarEQ\n;\npattern calc.!=(v:date,w:date):bit\naddress CMDvarNE\n;\npattern
calc.!=(v:date,w:date,nil_matches:bit):bit\naddress CMDvarNE\n;\npattern
calc.<(v:date,w:date):bit\naddress CMDvarLT\
n;\npattern calc.<=(v:date,w:date):bit\naddress CMDvarLE\n;\npattern
calc.>(v:date,w:date):bit\naddress CMDvarGT\n;\npattern
calc.>=(v:date,w:date):bit\naddress CMDvarGE\n;\n\n\n\natom daytime
:int;\ncommand fromstr()\naddress daytime_tz_fromstr;\ncommand tostr()\naddress
daytime_tostr;\n\n\npattern ==(v:daytime,w:daytime):bit\naddress
CMDvarEQ\n;\npattern ==(v:daytime,w:daytime,nil_matches:bit):bit\naddress
CMDvarEQ\n;\npattern !=(v:daytime,w:daytime):bit\naddress CMDvarNE\n;\npattern
!=(v:daytime,w:daytime,nil_matches:bit):bit\naddress CMDvarNE\n;\npattern
<(v:daytime,w:daytime):bit\naddress CMDvarLT\n;\npattern
<=(v:daytime,w:daytime):bit\naddress CMDvarLE\n;\npattern
>(v:daytime,w:daytime):bit\naddress CMDvarGT\n;\npattern
>=(v:daytime,w:daytime):bit\naddress CMDvarGE\n;\npattern
isnil(v:daytime):bit\naddress CMDvarISNIL\n;\n\nmodule mtime;\npattern
calc.==(v:daytime,w:daytime):bit\naddress CMDvarEQ\n;\npattern
calc.==(v:daytime,w:daytime,nil_matches:bit):bit\naddress CMDvarEQ\n
;\npattern calc.!=(v:daytime,w:daytime):bit\naddress CMDvarNE\n;\npattern
calc.!=(v:daytime,w:daytime,nil_matches:bit):bit\naddress CMDvarNE\n;\npattern
calc.<(v:daytime,w:daytime):bit\naddress CMDvarLT\n;\npattern
calc.<=(v:daytime,w:daytime):bit\naddress CMDvarLE\n;\npattern
calc.>(v:daytime,w:daytime):bit\naddress CMDvarGT\n;\npattern
calc.>=(v:daytime,w:daytime):bit\naddress CMDvarGE\n;\n\n\n\n\natom timestamp
:lng;\ncommand fromstr()\naddress timestamp_fromstr;\n\ncommand
tostr()\naddress timestamp_tostr;\n\nunsafe command
unix_epoch():timestamp\naddress MTIMEunix_epoch\n;\nunsafe command
epoch():timestamp\naddress MTIMEcurrent_timestamp\n;\n\ncommand
epoch(t:timestamp):int\naddress MTIMEepoch2int\n;\n\ncommand
epoch(t:int):timestamp\naddress MTIMEtimestamp\n;\ncommand
epoch(t:lng):timestamp\naddress MTIMEtimestamplng\n;\n\n\npattern
==(v:timestamp,w:timestamp):bit\naddress CMDvarEQ\n;\npattern
==(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress CMDvarEQ\n;\npattern
!=(v:t
imestamp,w:timestamp):bit\naddress CMDvarNE\n;\npattern
!=(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress CMDvarNE\n;\npattern
<(v:timestamp,w:timestamp):bit\naddress CMDvarLT\n;\npattern
<=(v:timestamp,w:timestamp):bit\naddress CMDvarLE\n;\npattern
>(v:timestamp,w:timestamp):bit\naddress CMDvarGT\n;\npattern
>=(v:timestamp,w:timestamp):bit\naddress CMDvarGE\n;\npattern
isnil(v:timestamp):bit\naddress CMDvarISNIL\n;\n\nmodule mtime;\npattern
calc.==(v:timestamp,w:timestamp):bit\naddress CMDvarEQ\n;\npattern
calc.==(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress
CMDvarEQ\n;\npattern calc.!=(v:timestamp,w:timestamp):bit\naddress
CMDvarNE\n;\npattern
calc.!=(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress
CMDvarNE\n;\npattern calc.<(v:timestamp,w:timestamp):bit\naddress
CMDvarLT\n;\npattern calc.<=(v:timestamp,w:timestamp):bit\naddress
CMDvarLE\n;\npattern calc.>(v:timestamp,w:timestamp):bit\naddress
CMDvarGT\n;\npattern calc.>=(v:timestamp,w:timestamp):bit\naddress
CMDvarGE\n;\n\n\n\n\natom timezone :lng;\ncommand fromstr()\naddress
tzone_fromstr;\ncommand tostr()\naddress tzone_tostr;\ncommand
str(z:timezone):str\naddress MTIMEtzone_tostr;\ncommand
timestamp(s:str):timestamp\naddress MTIMEtimestamp_fromstr;\ncommand
timestamp(secs:int):timestamp\naddress MTIMEtimestamp\n;\n\natom zrule
:int;\ncommand fromstr()\naddress rule_fromstr;\ncommand tostr()\naddress
rule_tostr;\ncommand define(m:int,d:int,w:int,h:int,min:int):zrule\naddress
MTIMEruleDef0\n;\ncommand
define(m:int,d:str,w:int,h:int,min:int):zrule\naddress
MTIMEruleDef1\n;\ncommand define(m:int,d:str,w:int,min:int):zrule\naddress
MTIMEruleDef2\n;\n\n\nmodule batmtime;\nmodule mtime;\ncommand
date_sub_sec_interval(t:date,s:int):date\naddress
MTIMEdate_sub_sec_interval_wrap\n;\ncommand
date_sub_msec_interval(t:date,ms:lng):date\naddress
MTIMEdate_sub_msec_interval_lng_wrap;\n\ncommand
date_add_sec_interval(t:date,s:int):date\naddress
MTIMEdate_add_sec_interval_wrap\n;\ncommand date_add_m
sec_interval(t:date,ms:lng):date\naddress
MTIMEdate_add_msec_interval_lng_wrap;\n\ncommand
timestamp_sub_msec_interval(t:timestamp,ms:lng):timestamp\naddress
MTIMEtimestamp_sub_msec_interval_lng_wrap;\ncommand
timestamp_add_msec_interval(t:timestamp,ms:lng):timestamp\naddress
MTIMEtimestamp_add;\n\ncommand
timestamp_sub_month_interval(t:timestamp,s:int):timestamp\naddress
MTIMEtimestamp_sub_month_interval_wrap\n;\n\ncommand
timestamp_sub_month_interval(t:timestamp,s:lng):timestamp\naddress
MTIMEtimestamp_sub_month_interval_lng_wrap\n;\n\ncommand
timestamp_add_month_interval(t:timestamp,s:int):timestamp\naddress
MTIMEtimestamp_add_month_interval_wrap\n;\n\ncommand
timestamp_add_month_interval(t:timestamp,s:lng):timestamp\naddress
MTIMEtimestamp_add_month_interval_lng_wrap\n;\n\ncommand
timestamp(t:timestamp):timestamp\naddress MTIMEtimestamp2timestamp;\n\ncommand
time_sub_msec_interval(t:daytime,ms:lng):daytime\naddress
MTIMEtime_sub_msec_interval_wrap\n;\ncommand time_add_msec_inter
val(t:daytime,ms:lng):daytime\naddress
MTIMEtime_add_msec_interval_wrap\n;\n\ncommand diff(val1:daytime, val2:daytime)
:lng\naddress MTIMEdaytime_diff\n;\n\ncommand
date_add_month_interval(t:date,s:int):date\naddress
MTIMEdate_addmonths\n;\n\ncommand
date_sub_month_interval(t:date,s:int):date\naddress
MTIMEdate_submonths\n;\n\ncommand date(:date):date\naddress
MTIMEdate2date\n;\ncommand date(:void):date\naddress
MTIMEnil2date\n;\n\ncommand local_timezone():lng\naddress
MTIMElocal_timezone\n;\n\ncommand timezone_local(t:timezone):void\naddress
MTIMEtzone_set_local\n;\ncommand timezone_local() :timezone\naddress
MTIMEtzone_get_local\n;\n\ncommand date(s:str):date\naddress
MTIMEdate_fromstr\n;\n\ncommand date(yr:int, mo:int, day:int):date\naddress
MTIMEdate_create\n;\n\ncommand daytime(s:str):daytime\naddress
MTIMEdaytime_fromstr\n;\ncommand daytime(:daytime):daytime\naddress
MTIMEdaytime2daytime;\ncommand daytime(:lng):daytime\naddress
MTIMEsecs2daytime;\n\ncommand daytime(h:int,m:int
,s:int,mi:int)\n\t\t:daytime\naddress MTIMEdaytime_create\n;\ncommand
timestamp(d:date,dt:daytime,t:timezone) :timestamp\naddress
MTIMEtimestamp_create\n;\ncommand timestamp(d:date,dt:daytime)
:timestamp\naddress MTIMEtimestamp_create_default\n;\ncommand timestamp(d:date)
:timestamp\naddress MTIMEtimestamp_create_from_date\n;\n\ncommand
rule(s:str):zrule\naddress MTIMErule_fromstr\n;\ncommand rule
(mo:int,d:int,wkday:int,mi:int) :zrule\naddress MTIMErule_create\n;\n\ncommand
timezone(s:str):timezone\naddress MTIMEtzone_fromstr\n;\ncommand
timezone(s:int):timezone\naddress MTIMEtzone_create\n;\ncommand
timezone(s:lng):timezone\naddress MTIMEtzone_create_lng\n;\ncommand
timezone(mi:int,s:zrule,erule:zrule):timezone\naddress
MTIMEtzone_create_dst\n;\n\ncommand year(d:date) :int\naddress
MTIMEdate_extract_year\n;\ncommand
batmtime.year(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_year_bulk;\n\ncommand quarter(d:date) :int\naddress
MTIMEdate_extract_quarter\n;\ncommand batmtime.qua
rter(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_quarter_bulk;\n\ncommand month(d:date) :int\naddress
MTIMEdate_extract_month\n;\ncommand
batmtime.month(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_month_bulk;\n\ncommand day(d:date) :int\naddress
MTIMEdate_extract_day\n;\ncommand batmtime.day(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_day_bulk;\n\ncommand hours(h:daytime) :int\naddress
MTIMEdaytime_extract_hours\n;\ncommand
batmtime.hours(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_hours_bulk;\n\ncommand minutes(d:daytime) :int\naddress
MTIMEdaytime_extract_minutes\n;\ncommand
batmtime.minutes(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_minutes_bulk;\n\ncommand seconds(d:daytime) :int\naddress
MTIMEdaytime_extract_seconds\n;\ncommand
batmtime.seconds(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_seconds_bulk;\n\ncommand sql_seconds(d:daytime)
:int\naddress MTIMEdaytime_extract_sql_seconds\n;\ncommand
batmtime.sql_seconds(d:ba
t[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_sql_seconds_bulk;\n\ncommand milliseconds(d:daytime)
:int\naddress MTIMEdaytime_extract_milliseconds\n;\ncommand
batmtime.milliseconds(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_milliseconds_bulk;\n\ncommand daytime(t:timestamp)
:daytime\naddress MTIMEtimestamp_extract_daytime_default\n;\ncommand
daytime(t:timestamp, v:timezone) :daytime\naddress
MTIMEtimestamp_extract_daytime\n;\n\ncommand date(t:timestamp) :date\naddress
MTIMEtimestamp_extract_date_default\n;\ncommand date(t:timestamp,v:timezone)
:date\naddress MTIMEtimestamp_extract_date\n;\n\ncommand
setTimezone(name:str):timezone\naddress MTIMEtimezone\n;\n\ncommand
start_dst(t:timezone) :zrule\naddress MTIMEtzone_extract_start\n;\ncommand
end_dst(t:timezone) :zrule\naddress MTIMEtzone_extract_end\n;\ncommand
minutes(t:timezone) :int\naddress MTIMEtzone_extract_minutes\n;\n\ncommand
month(t:zrule) :int\naddress MTIMErule_extract_month\n;\ncommand day(t:zrule) :i
nt\naddress MTIMErule_extract_day\n;\ncommand weekday(t:zrule) :int\naddress
MTIMErule_extract_weekday\n;\ncommand minutes(t:zrule) :int\naddress
MTIMErule_extract_minutes\n;\n\ncommand addyears(value:date, years:int)
:date\naddress MTIMEdate_addyears\n;\ncommand addmonths(value:date, months:int)
:date\naddress MTIMEdate_addmonths\n;\ncommand adddays(value:date, days:int)
:date\naddress MTIMEdate_adddays\n;\ncommand diff(val1:date, val2:date)
:int\naddress MTIMEdate_diff\n;\n\ncommand dayofyear(d:date) :int\naddress
MTIMEdate_extract_dayofyear\n;\ncommand weekofyear(d:date) :int\naddress
MTIMEdate_extract_weekofyear\n;\ncommand week(d:date) :int\naddress
MTIMEdate_extract_weekofyear\n;\ncommand dayofweek(d:date) :int\naddress
MTIMEdate_extract_dayofweek\n;\n\ncommand add(v:timestamp, msecs:lng)
:timestamp\naddress MTIMEtimestamp_add\n;\ncommand diff(val1:timestamp,
val2:timestamp) :lng\naddress MTIMEtimestamp_diff\n;\n\ncommand
dst(t:timestamp,v:timezone) :bit\naddress MTIMEtimestam
p_inside_dst\n;\n\ncommand compute(r:zrule, year:int) :date\naddress
MTIMEcompute_rule_foryear\n;\n\ncommand monthnum(month:str) :int\naddress
MTIMEmonth_from_str\n;\ncommand monthname(month:int) :str\naddress
MTIMEmonth_to_str\n;\ncommand daynum(day:str) :int\naddress
MTIMEday_from_str\n;\ncommand dayname(day:int) :str\naddress
MTIMEday_to_str\n;\n\ncommand time_synonyms(allow:bit)\naddress
MTIMEsynonyms\n;\n\ncommand str_to_date(s:str, format:str) :date\naddress
MTIMEstr_to_date\n;\n\ncommand date_to_str(d:date, format:str) :str\naddress
MTIMEdate_to_str\n;\n\ncommand str_to_time(s:str, format:str) :daytime\naddress
MTIMEstr_to_time\n;\n\ncommand time_to_str(d:daytime, format:str) :str\naddress
MTIMEtime_to_str\n;\n\ncommand str_to_timestamp(s:str, format:str)
:timestamp\naddress MTIMEstr_to_timestamp\n;\n\ncommand
timestamp_to_str(d:timestamp, format:str) :str\naddress
MTIMEtimestamp_to_str\n;\n\n\ncommand
msecs(d:int,h:int,m:int,s:int,ms:int):lng\naddress MTIMEmsecs\n;\n\ncomman
d daytime(h:int):daytime\naddress MTIMEdaytime1\n;\ncommand
daytime(h:int,m:int):daytime\naddress MTIMEdaytime2\n;\ncommand
daytime(h:int,m:int,s:int):daytime\naddress MTIMEdaytime3\n;\n\ncommand
current_timestamp():timestamp\naddress MTIMEcurrent_timestamp;\ncommand
current_date():date\naddress MTIMEcurrent_date;\ncommand
current_time():daytime\naddress MTIMEcurrent_time;\n\ncommand
year(t:timestamp):int\naddress MTIMEtimestamp_year;\ncommand
quarter(t:timestamp):int\naddress MTIMEtimestamp_quarter;\ncommand
month(t:timestamp):int\naddress MTIMEtimestamp_month;\ncommand
day(t:timestamp):int\naddress MTIMEtimestamp_day;\ncommand
hours(t:timestamp):int\naddress MTIMEtimestamp_hours;\ncommand
minutes(t:timestamp):int\naddress MTIMEtimestamp_minutes;\ncommand
seconds(t:timestamp):int\naddress MTIMEtimestamp_seconds;\ncommand
sql_seconds(t:timestamp):int\naddress MTIMEtimestamp_sql_seconds;\ncommand
milliseconds(t:timestamp):int\naddress MTIMEtimestamp_milliseconds;\n\ncommand
year(mont
hs:int):int\naddress MTIMEsql_year;\ncommand month(months:int):int\naddress
MTIMEsql_month;\ncommand day(msecs:lng):lng\naddress MTIMEsql_day;\ncommand
hours(msecs:lng):int\naddress MTIMEsql_hours;\ncommand
minutes(msecs:lng):int\naddress MTIMEsql_minutes;\ncommand
seconds(msecs:lng):int\naddress MTIMEsql_seconds;\n\nunsafe command
msec():lng\naddress MTIMEmsec\n;\n\ncommand prelude() :void\naddress
MTIMEprelude;\n\ncommand epilogue() :void\naddress
MTIMEepilogue;\n\nmtime.prelude();\n\nmodule calc;\n\ncommand date(s:str):date
address MTIMEdate_fromstr;\ncommand date(d:date):date address
MTIMEdate_date;\ncommand date(t:timestamp) :date address
MTIMEtimestamp_extract_date_default;\n\ncommand timestamp(s:str):timestamp
address MTIMEtimestamp_fromstr;\ncommand timestamp(t:timestamp):timestamp
address MTIMEtimestamp2timestamp;\ncommand timestamp(d:date) :timestamp address
MTIMEtimestamp_create_from_date;\ncommand timestamp(secs:int):timestamp address
MTIMEtimestamp;\ncommand timestamp(m
secs:lng):timestamp address MTIMEtimestamp_lng;\n\ncommand
daytime(s:str):daytime address MTIMEdaytime_fromstr;\ncommand
daytime(d:daytime):daytime address MTIMEdaytime2daytime;\ncommand
daytime(s:lng):daytime address MTIMEsecs2daytime;\ncommand daytime(t:timestamp)
:daytime address MTIMEtimestamp_extract_daytime_default;\n\nmodule
batcalc;\n\ncommand date(t:bat[:timestamp]) :bat[:date]\naddress
MTIMEtimestamp_extract_date_default_bulk;\n\ncommand timestamp(d:bat[:date])
:bat[:timestamp]\naddress MTIMEtimestamp_create_from_date_bulk;\ncommand
timestamp(secs:bat[:int]) :bat[:timestamp]\naddress
MTIMEtimestamp_bulk;\ncommand timestamp(msecs:bat[:lng])
:bat[:timestamp]\naddress MTIMEtimestamp_lng_bulk;\n\ncommand
daytime(s:bat[:lng]) :bat[:daytime]\naddress MTIMEsecs2daytime_bulk;\ncommand
daytime(t:bat[:timestamp]) :bat[:daytime]\naddress
MTIMEtimestamp_extract_daytime_default_bulk;" },
+{ "mtime", "\natom date :int;\ncommand date(s:date):date\naddress
MTIMEdate_date\ncomment \"Noop routine.\";\n\ncommand fromstr()\naddress
date_fromstr;\ncommand tostr()\naddress date_tostr;\n\n\npattern
==(v:date,w:date):bit\naddress CMDvarEQ\ncomment \"Equality of two
dates\";\npattern ==(v:date,w:date,nil_matches:bit):bit\naddress
CMDvarEQ\ncomment \"Equality of two dates\";\npattern
!=(v:date,w:date):bit\naddress CMDvarNE\ncomment \"Equality of two
dates\";\npattern !=(v:date,w:date,nil_matches:bit):bit\naddress
CMDvarNE\ncomment \"Equality of two dates\";\npattern
<(v:date,w:date):bit\naddress CMDvarLT\ncomment \"Equality of two
dates\";\npattern <=(v:date,w:date):bit\naddress CMDvarLE\ncomment \"Equality
of two dates\";\npattern >(v:date,w:date):bit\naddress CMDvarGT\ncomment
\"Equality of two dates\";\npattern >=(v:date,w:date):bit\naddress
CMDvarGE\ncomment \"Equality of two dates\";\npattern
isnil(v:date):bit\naddress CMDvarISNIL\ncomment \"Nil test for date
value\";\n\nmod
ule mtime;\npattern calc.==(v:date,w:date):bit\naddress CMDvarEQ\ncomment
\"Equality of two dates\";\npattern
calc.==(v:date,w:date,nil_matches:bit):bit\naddress CMDvarEQ\ncomment
\"Equality of two dates\";\npattern calc.!=(v:date,w:date):bit\naddress
CMDvarNE\ncomment \"Equality of two dates\";\npattern
calc.!=(v:date,w:date,nil_matches:bit):bit\naddress CMDvarNE\ncomment
\"Equality of two dates\";\npattern calc.<(v:date,w:date):bit\naddress
CMDvarLT\ncomment \"Equality of two dates\";\npattern
calc.<=(v:date,w:date):bit\naddress CMDvarLE\ncomment \"Equality of two
dates\";\npattern calc.>(v:date,w:date):bit\naddress CMDvarGT\ncomment
\"Equality of two dates\";\npattern calc.>=(v:date,w:date):bit\naddress
CMDvarGE\ncomment \"Equality of two dates\";\n\n\n\natom daytime :int;\ncommand
fromstr()\naddress daytime_tz_fromstr;\ncommand tostr()\naddress
daytime_tostr;\n\n\npattern ==(v:daytime,w:daytime):bit\naddress
CMDvarEQ\ncomment \"Equality of two daytimes\";\npattern ==(v:daytime,w
:daytime,nil_matches:bit):bit\naddress CMDvarEQ\ncomment \"Equality of two
daytimes\";\npattern !=(v:daytime,w:daytime):bit\naddress CMDvarNE\ncomment
\"Equality of two daytimes\";\npattern
!=(v:daytime,w:daytime,nil_matches:bit):bit\naddress CMDvarNE\ncomment
\"Equality of two daytimes\";\npattern <(v:daytime,w:daytime):bit\naddress
CMDvarLT\ncomment \"Equality of two daytimes\";\npattern
<=(v:daytime,w:daytime):bit\naddress CMDvarLE\ncomment \"Equality of two
daytimes\";\npattern >(v:daytime,w:daytime):bit\naddress CMDvarGT\ncomment
\"Equality of two daytimes\";\npattern >=(v:daytime,w:daytime):bit\naddress
CMDvarGE\ncomment \"Equality of two daytimes\";\npattern
isnil(v:daytime):bit\naddress CMDvarISNIL\ncomment \"Nil test for daytime
value\";\n\nmodule mtime;\npattern calc.==(v:daytime,w:daytime):bit\naddress
CMDvarEQ\ncomment \"Equality of two daytimes\";\npattern
calc.==(v:daytime,w:daytime,nil_matches:bit):bit\naddress CMDvarEQ\ncomment
\"Equality of two daytimes\";\npattern
calc.!=(v:daytime,w:daytime):bit\naddress CMDvarNE\ncomment \"Equality of two
daytimes\";\npattern calc.!=(v:daytime,w:daytime,nil_matches:bit):bit\naddress
CMDvarNE\ncomment \"Equality of two daytimes\";\npattern
calc.<(v:daytime,w:daytime):bit\naddress CMDvarLT\ncomment \"Equality of two
daytimes\";\npattern calc.<=(v:daytime,w:daytime):bit\naddress
CMDvarLE\ncomment \"Equality of two daytimes\";\npattern
calc.>(v:daytime,w:daytime):bit\naddress CMDvarGT\ncomment \"Equality of two
daytimes\";\npattern calc.>=(v:daytime,w:daytime):bit\naddress
CMDvarGE\ncomment \"Equality of two daytimes\";\n\n\n\n\natom timestamp
:lng;\ncommand fromstr()\naddress timestamp_fromstr;\n\ncommand
tostr()\naddress timestamp_tostr;\n\nunsafe command
unix_epoch():timestamp\naddress MTIMEunix_epoch\ncomment \"The Unix epoch time
(00:00:00 UTC on January 1, 1970)\";\nunsafe command epoch():timestamp\naddress
MTIMEcurrent_timestamp\ncomment \"unix-time (epoch) support: seconds since the
Unix epoch\";\n\ncom
mand epoch(t:timestamp):int\naddress MTIMEepoch2int\ncomment \"unix-time
(epoch) support: seconds since epoch\";\n\ncommand
epoch(t:int):timestamp\naddress MTIMEtimestamp\ncomment \"convert seconds since
epoch into a timestamp\";\ncommand epoch(t:lng):timestamp\naddress
MTIMEtimestamplng\ncomment \"convert milli seconds since epoch into a
timestamp\";\n\n\npattern ==(v:timestamp,w:timestamp):bit\naddress
CMDvarEQ\ncomment \"Equality of two timestamps\";\npattern
==(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress CMDvarEQ\ncomment
\"Equality of two timestamps\";\npattern
!=(v:timestamp,w:timestamp):bit\naddress CMDvarNE\ncomment \"Equality of two
timestamps\";\npattern !=(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress
CMDvarNE\ncomment \"Equality of two timestamps\";\npattern
<(v:timestamp,w:timestamp):bit\naddress CMDvarLT\ncomment \"Equality of two
timestamps\";\npattern <=(v:timestamp,w:timestamp):bit\naddress
CMDvarLE\ncomment \"Equality of two timestamps\";\npattern
>(v:timestamp,w:timestamp):bit\naddress CMDvarGT\ncomment \"Equality of two
timestamps\";\npattern >=(v:timestamp,w:timestamp):bit\naddress
CMDvarGE\ncomment \"Equality of two timestamps\";\npattern
isnil(v:timestamp):bit\naddress CMDvarISNIL\ncomment \"Nil test for timestamp
value\";\n\nmodule mtime;\npattern
calc.==(v:timestamp,w:timestamp):bit\naddress CMDvarEQ\ncomment \"Equality of
two timestamps\";\npattern
calc.==(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress CMDvarEQ\ncomment
\"Equality of two timestamps\";\npattern
calc.!=(v:timestamp,w:timestamp):bit\naddress CMDvarNE\ncomment \"Equality of
two timestamps\";\npattern
calc.!=(v:timestamp,w:timestamp,nil_matches:bit):bit\naddress CMDvarNE\ncomment
\"Equality of two timestamps\";\npattern
calc.<(v:timestamp,w:timestamp):bit\naddress CMDvarLT\ncomment \"Equality of
two timestamps\";\npattern calc.<=(v:timestamp,w:timestamp):bit\naddress
CMDvarLE\ncomment \"Equality of two timestamps\";\npattern
calc.>(v:timestamp,w:ti
mestamp):bit\naddress CMDvarGT\ncomment \"Equality of two
timestamps\";\npattern calc.>=(v:timestamp,w:timestamp):bit\naddress
CMDvarGE\ncomment \"Equality of two timestamps\";\n\n\n\n\natom timezone
:lng;\ncommand fromstr()\naddress tzone_fromstr;\ncommand tostr()\naddress
tzone_tostr;\ncommand str(z:timezone):str\naddress MTIMEtzone_tostr;\ncommand
timestamp(s:str):timestamp\naddress MTIMEtimestamp_fromstr;\ncommand
timestamp(secs:int):timestamp\naddress MTIMEtimestamp\ncomment \"Utility
function to create a timestamp from a number of seconds since the Unix
epoch\";\n\natom zrule :int;\ncommand fromstr()\naddress rule_fromstr;\ncommand
tostr()\naddress rule_tostr;\ncommand
define(m:int,d:int,w:int,h:int,min:int):zrule\naddress MTIMEruleDef0\ncomment
\"Introduce a synomym timezone rule.\";\ncommand
define(m:int,d:str,w:int,h:int,min:int):zrule\naddress MTIMEruleDef1\ncomment
\"Introduce a synomym timezone rule.\";\ncommand
define(m:int,d:str,w:int,min:int):zrule\naddress MTIMEruleD
ef2\ncomment \"Introduce a synomym timezone rule.\";\n\n\nmodule
batmtime;\nmodule mtime;\ncommand
date_sub_sec_interval(t:date,s:int):date\naddress
MTIMEdate_sub_sec_interval_wrap\ncomment \"Subtract seconds from a
date\";\ncommand date_sub_msec_interval(t:date,ms:lng):date\naddress
MTIMEdate_sub_msec_interval_lng_wrap;\n\ncommand
date_add_sec_interval(t:date,s:int):date\naddress
MTIMEdate_add_sec_interval_wrap\ncomment \"Add seconds to a date\";\ncommand
date_add_msec_interval(t:date,ms:lng):date\naddress
MTIMEdate_add_msec_interval_lng_wrap;\n\ncommand
timestamp_sub_msec_interval(t:timestamp,ms:lng):timestamp\naddress
MTIMEtimestamp_sub_msec_interval_lng_wrap;\ncommand
timestamp_add_msec_interval(t:timestamp,ms:lng):timestamp\naddress
MTIMEtimestamp_add;\n\ncommand
timestamp_sub_month_interval(t:timestamp,s:int):timestamp\naddress
MTIMEtimestamp_sub_month_interval_wrap\ncomment \"Subtract months from a
timestamp\";\n\ncommand timestamp_sub_month_interval(t:timestamp,s:lng):timest
amp\naddress MTIMEtimestamp_sub_month_interval_lng_wrap\ncomment \"Subtract
months from a timestamp\";\n\ncommand
timestamp_add_month_interval(t:timestamp,s:int):timestamp\naddress
MTIMEtimestamp_add_month_interval_wrap\ncomment \"Add months to a
timestamp\";\n\ncommand
timestamp_add_month_interval(t:timestamp,s:lng):timestamp\naddress
MTIMEtimestamp_add_month_interval_lng_wrap\ncomment \"Add months to a
timestamp\";\n\ncommand timestamp(t:timestamp):timestamp\naddress
MTIMEtimestamp2timestamp;\n\ncommand
time_sub_msec_interval(t:daytime,ms:lng):daytime\naddress
MTIMEtime_sub_msec_interval_wrap\ncomment \"Subtract seconds from a
time\";\ncommand time_add_msec_interval(t:daytime,ms:lng):daytime\naddress
MTIMEtime_add_msec_interval_wrap\ncomment \"Add seconds to a time\";\n\ncommand
diff(val1:daytime, val2:daytime) :lng\naddress MTIMEdaytime_diff\ncomment
\"returns the number of msec between 'val1' and 'val2'.\";\n\ncommand
date_add_month_interval(t:date,s:int):date\naddress MTIMEdate
_addmonths\ncomment \"Add months to a date\";\n\ncommand
date_sub_month_interval(t:date,s:int):date\naddress
MTIMEdate_submonths\ncomment \"Subtract months from a date\";\n\ncommand
date(:date):date\naddress MTIMEdate2date\ncomment \"generate the nil
date\";\ncommand date(:void):date\naddress MTIMEnil2date\ncomment \"generate
the nil date\";\n\ncommand local_timezone():lng\naddress
MTIMElocal_timezone\ncomment \"get the local timezone in seconds\";\n\ncommand
timezone_local(t:timezone):void\naddress MTIMEtzone_set_local\ncomment \"set
the local timezone; which is used for printing timestamps\";\ncommand
timezone_local() :timezone\naddress MTIMEtzone_get_local\ncomment \"get the
local timezone; which is used for printing timestamps\";\n\ncommand
date(s:str):date\naddress MTIMEdate_fromstr\ncomment \"convert the string to a
type date value\";\n\ncommand date(yr:int, mo:int, day:int):date\naddress
MTIMEdate_create\ncomment \"creates a date from (year,month,day).\";\n\ncommand
daytime(s
:str):daytime\naddress MTIMEdaytime_fromstr\ncomment \"convert the string to a
daytime value.\";\ncommand daytime(:daytime):daytime\naddress
MTIMEdaytime2daytime;\ncommand daytime(:lng):daytime\naddress
MTIMEsecs2daytime;\n\ncommand
daytime(h:int,m:int,s:int,mi:int)\n\t\t:daytime\naddress
MTIMEdaytime_create\ncomment \"creates a time from
(hours,minutes,\n\tseconds,milliseconds) parameters.\";\ncommand
timestamp(d:date,dt:daytime,t:timezone) :timestamp\naddress
MTIMEtimestamp_create\ncomment \"creates a timestamp from (date,
daytime,timezone) parameters.\";\ncommand timestamp(d:date,dt:daytime)
:timestamp\naddress MTIMEtimestamp_create_default\ncomment \"creates a
timestamp from (d,dt) parameters (in the local timezone).\";\ncommand
timestamp(d:date) :timestamp\naddress MTIMEtimestamp_create_from_date\ncomment
\"creates a timestamp from (d,00:00:00) parameters (in the local
timezone).\";\n\ncommand rule(s:str):zrule\naddress MTIMErule_fromstr\ncomment
\"create a rule from a string.
\";\ncommand rule (mo:int,d:int,wkday:int,mi:int) :zrule\naddress
MTIMErule_create\ncomment \"create a DST start/end date rule.\";\n\ncommand
timezone(s:str):timezone\naddress MTIMEtzone_fromstr\ncomment \"Convert the
string to a timezone.\";\ncommand timezone(s:int):timezone\naddress
MTIMEtzone_create\ncomment \"Convert the int to a timezone.\";\ncommand
timezone(s:lng):timezone\naddress MTIMEtzone_create_lng\ncomment \"Convert the
int to a timezone.\";\ncommand
timezone(mi:int,s:zrule,erule:zrule):timezone\naddress
MTIMEtzone_create_dst\ncomment \"create a timezone as an hour
difference\n\tfrom GMT and a DST.\";\n\ncommand year(d:date) :int\naddress
MTIMEdate_extract_year\ncomment \"extracts year from date (nonzero\n\tvalue
between -5867411 and +5867411).\";\ncommand
batmtime.year(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_year_bulk;\n\ncommand quarter(d:date) :int\naddress
MTIMEdate_extract_quarter\ncomment \"extracts quarter from date\";\ncommand
batmtime.quarter(d:bat[:
date]):bat[:int]\naddress MTIMEdate_extract_quarter_bulk;\n\ncommand
month(d:date) :int\naddress MTIMEdate_extract_month\ncomment \"extracts month
from date\";\ncommand batmtime.month(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_month_bulk;\n\ncommand day(d:date) :int\naddress
MTIMEdate_extract_day\ncomment \"extracts day from date \";\ncommand
batmtime.day(d:bat[:date]):bat[:int]\naddress
MTIMEdate_extract_day_bulk;\n\ncommand hours(h:daytime) :int\naddress
MTIMEdaytime_extract_hours\ncomment \"extracts hour from daytime\";\ncommand
batmtime.hours(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_hours_bulk;\n\ncommand minutes(d:daytime) :int\naddress
MTIMEdaytime_extract_minutes\ncomment \"extracts minutes from
daytime\";\ncommand batmtime.minutes(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_minutes_bulk;\n\ncommand seconds(d:daytime) :int\naddress
MTIMEdaytime_extract_seconds\ncomment \"extracts seconds from
daytime\";\ncommand batmtime.seconds(d:bat[:day
time]):bat[:int]\naddress MTIMEdaytime_extract_seconds_bulk;\n\ncommand
sql_seconds(d:daytime) :int\naddress MTIMEdaytime_extract_sql_seconds\ncomment
\"extracts seconds (with fractional milliseconds) from daytime\";\ncommand
batmtime.sql_seconds(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_sql_seconds_bulk;\n\ncommand milliseconds(d:daytime)
:int\naddress MTIMEdaytime_extract_milliseconds\ncomment \"extracts
milliseconds from daytime\";\ncommand
batmtime.milliseconds(d:bat[:daytime]):bat[:int]\naddress
MTIMEdaytime_extract_milliseconds_bulk;\n\ncommand daytime(t:timestamp)
:daytime\naddress MTIMEtimestamp_extract_daytime_default\ncomment \"extracts
daytime from timestamp\n\tin the local timezone.\";\ncommand
daytime(t:timestamp, v:timezone) :daytime\naddress
MTIMEtimestamp_extract_daytime\ncomment \"extracts daytime from timestamp\n\tin
a specific timezone.\";\n\ncommand date(t:timestamp) :date\naddress
MTIMEtimestamp_extract_date_default\ncomment \"extracts date from t
imestamp\n\tin the local timezone.\";\ncommand date(t:timestamp,v:timezone)
:date\naddress MTIMEtimestamp_extract_date\ncomment \"extracts date from
timestamp in a\n\tspecific timezone.\";\n\ncommand
setTimezone(name:str):timezone\naddress MTIMEtimezone\ncomment \"Test and set
the timezone.\";\n\ncommand start_dst(t:timezone) :zrule\naddress
MTIMEtzone_extract_start\ncomment \"extract rule that determines\n\tstart of
DST from timezone.\";\ncommand end_dst(t:timezone) :zrule\naddress
MTIMEtzone_extract_end\ncomment \"extract rule that determines\n\tend of DST
from timezone.\";\ncommand minutes(t:timezone) :int\naddress
MTIMEtzone_extract_minutes\ncomment \"extract number of minutes that\n\ttime
zone is offset wrt GMT.\";\n\ncommand month(t:zrule) :int\naddress
MTIMErule_extract_month\ncomment \"extract month from rule.\";\ncommand
day(t:zrule) :int\naddress MTIMErule_extract_day\ncomment \"extract day from
rule.\";\ncommand weekday(t:zrule) :int\naddress MTIMErule_extract_weekday\nco
mment \"extract weekday from rule.\";\ncommand minutes(t:zrule) :int\naddress
MTIMErule_extract_minutes\ncomment \"extract minutes from rule.\";\n\ncommand
addyears(value:date, years:int) :date\naddress MTIMEdate_addyears\ncomment
\"returns the date after a number\n\tof years (possibly negative).\";\ncommand
addmonths(value:date, months:int) :date\naddress MTIMEdate_addmonths\ncomment
\"returns the date after a number of\n\tmonths (possibly negative).\";\ncommand
adddays(value:date, days:int) :date\naddress MTIMEdate_adddays\ncomment
\"returns the date after a number\n\tof days (possibly negative).\";\ncommand
diff(val1:date, val2:date) :int\naddress MTIMEdate_diff\ncomment \"returns the
number of days\n\tbetween 'val1' and 'val2'.\";\n\ncommand dayofyear(d:date)
:int\naddress MTIMEdate_extract_dayofyear\ncomment \"Returns N where d is the
Nth day\n\tof the year (january 1 returns 1)\";\ncommand weekofyear(d:date)
:int\naddress MTIMEdate_extract_weekofyear\ncomment \"Returns the wee
k number in the year.\";\ncommand week(d:date) :int\naddress
MTIMEdate_extract_weekofyear\ncomment \"Returns the week number in the
year.\";\ncommand dayofweek(d:date) :int\naddress
MTIMEdate_extract_dayofweek\ncomment \"Returns the current day of the
week\n\twhere 1=monday, .., 7=sunday\";\n\ncommand add(v:timestamp, msecs:lng)
:timestamp\naddress MTIMEtimestamp_add\ncomment \"returns the timestamp that
comes 'msecs'\n\t(possibly negative) after 'value'.\";\ncommand
diff(val1:timestamp, val2:timestamp) :lng\naddress MTIMEtimestamp_diff\ncomment
\"returns the number of milliseconds\n\tbetween 'val1' and
'val2'.\";\n\ncommand dst(t:timestamp,v:timezone) :bit\naddress
MTIMEtimestamp_inside_dst\ncomment \"return whether DST holds in
the\n\ttimezone at a certain point of time.\";\n\ncommand compute(r:zrule,
year:int) :date\naddress MTIMEcompute_rule_foryear\ncomment \"compute the date
from a rule in a given year\";\n\ncommand monthnum(month:str) :int\naddress
MTIMEmonth_from_str\ncommen
t \"Returns month number [1-12] from a string\n\t or nil if does not match
any.\";\ncommand monthname(month:int) :str\naddress MTIMEmonth_to_str\ncomment
\"Returns month name from a number\n\tbetween [1-12], str(nil)
otherwise.\";\ncommand daynum(day:str) :int\naddress MTIMEday_from_str\ncomment
\"Returns number of day [1-7] from a\n\tstring or nil if does not match
any.\";\ncommand dayname(day:int) :str\naddress MTIMEday_to_str\ncomment
\"Returns day name from a number\n\tbetween [1-7], str(nil)
otherwise.\";\n\ncommand time_synonyms(allow:bit)\naddress
MTIMEsynonyms\ncomment \"Allow synonyms for the parse format
of\n\tdate/timestamp.\";\n\ncommand str_to_date(s:str, format:str)
:date\naddress MTIMEstr_to_date\ncomment \"create a date from the string, using
the specified format (see man strptime)\";\n\ncommand date_to_str(d:date,
format:str) :str\naddress MTIMEdate_to_str\ncomment \"create a string from the
date, using the specified format (see man strftime)\";\n\ncommand str_to_ti
me(s:str, format:str) :daytime\naddress MTIMEstr_to_time\ncomment \"create a
time from the string, using the specified format (see man
strptime)\";\n\ncommand time_to_str(d:daytime, format:str) :str\naddress
MTIMEtime_to_str\ncomment \"create a string from the time, using the specified
format (see man strftime)\";\n\ncommand str_to_timestamp(s:str, format:str)
:timestamp\naddress MTIMEstr_to_timestamp\ncomment \"create a timestamp from
the string, using the specified format (see man strptime)\";\n\ncommand
timestamp_to_str(d:timestamp, format:str) :str\naddress
MTIMEtimestamp_to_str\ncomment \"create a string from the time, using the
specified format (see man strftime)\";\n\n\ncommand
msecs(d:int,h:int,m:int,s:int,ms:int):lng\naddress MTIMEmsecs\ncomment
\"convert date components to milliseconds\";\n\ncommand
daytime(h:int):daytime\naddress MTIMEdaytime1\ncomment \"default time with
zeroed components\";\ncommand daytime(h:int,m:int):daytime\naddress
MTIMEdaytime2\ncomment \"default
time with zeroed components\";\ncommand
daytime(h:int,m:int,s:int):daytime\naddress MTIMEdaytime3\ncomment \"default
time with zeroed components\";\n\ncommand
current_timestamp():timestamp\naddress MTIMEcurrent_timestamp;\ncommand
current_date():date\naddress MTIMEcurrent_date;\ncommand
current_time():daytime\naddress MTIMEcurrent_time;\n\ncommand
year(t:timestamp):int\naddress MTIMEtimestamp_year;\ncommand
quarter(t:timestamp):int\naddress MTIMEtimestamp_quarter;\ncommand
month(t:timestamp):int\naddress MTIMEtimestamp_month;\ncommand
day(t:timestamp):int\naddress MTIMEtimestamp_day;\ncommand
hours(t:timestamp):int\naddress MTIMEtimestamp_hours;\ncommand
minutes(t:timestamp):int\naddress MTIMEtimestamp_minutes;\ncommand
seconds(t:timestamp):int\naddress MTIMEtimestamp_seconds;\ncommand
sql_seconds(t:timestamp):int\naddress MTIMEtimestamp_sql_seconds;\ncommand
milliseconds(t:timestamp):int\naddress MTIMEtimestamp_milliseconds;\n\ncommand
year(months:int):int\naddress MTIMEsql_year;\n
command month(months:int):int\naddress MTIMEsql_month;\ncommand
day(msecs:lng):lng\naddress MTIMEsql_day;\ncommand
hours(msecs:lng):int\naddress MTIMEsql_hours;\ncommand
minutes(msecs:lng):int\naddress MTIMEsql_minutes;\ncommand
seconds(msecs:lng):int\naddress MTIMEsql_seconds;\n\nunsafe command
msec():lng\naddress MTIMEmsec\ncomment \"get time of day in msec since
1-1-1970.\";\n\ncommand prelude() :void\naddress MTIMEprelude;\n\ncommand
epilogue() :void\naddress MTIMEepilogue;\n\nmtime.prelude();\n\nmodule
calc;\n\ncommand date(s:str):date address MTIMEdate_fromstr;\ncommand
date(d:date):date address MTIMEdate_date;\ncommand date(t:timestamp) :date
address MTIMEtimestamp_extract_date_default;\n\ncommand
timestamp(s:str):timestamp address MTIMEtimestamp_fromstr;\ncommand
timestamp(t:timestamp):timestamp address MTIMEtimestamp2timestamp;\ncommand
timestamp(d:date) :timestamp address MTIMEtimestamp_create_from_date;\ncommand
timestamp(secs:int):timestamp address MTIMEtimestamp;\ncomma
nd timestamp(msecs:lng):timestamp address MTIMEtimestamp_lng;\n\ncommand
daytime(s:str):daytime address MTIMEdaytime_fromstr;\ncommand
daytime(d:daytime):daytime address MTIMEdaytime2daytime;\ncommand
daytime(s:lng):daytime address MTIMEsecs2daytime;\ncommand daytime(t:timestamp)
:daytime address MTIMEtimestamp_extract_daytime_default;\n\nmodule
batcalc;\n\ncommand date(t:bat[:timestamp]) :bat[:date]\naddress
MTIMEtimestamp_extract_date_default_bulk;\n\ncommand timestamp(d:bat[:date])
:bat[:timestamp]\naddress MTIMEtimestamp_create_from_date_bulk;\ncommand
timestamp(secs:bat[:int]) :bat[:timestamp]\naddress
MTIMEtimestamp_bulk;\ncommand timestamp(msecs:bat[:lng])
:bat[:timestamp]\naddress MTIMEtimestamp_lng_bulk;\n\ncommand
daytime(s:bat[:lng]) :bat[:daytime]\naddress MTIMEsecs2daytime_bulk;\ncommand
daytime(t:bat[:timestamp]) :bat[:daytime]\naddress
MTIMEtimestamp_extract_daytime_default_bulk;" },
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list