Changeset: 265482faa751 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=265482faa751
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/mapiclient/dump.c
        clients/mapiclient/mclient.c
        clients/mapiclient/msqldump.h
        sql/backends/monet5/Tests/pyloader07.stable.out.32bit
        sql/backends/monet5/generator/90_generator.sql
        sql/backends/monet5/generator/90_generator_hge.sql
        sql/backends/monet5/generator/generator.mal
        sql/backends/monet5/generator/generator_hge.mal
        sql/test/BugTracker-2015/Tests/sql2pcre.Bug-3800.stable.out
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
Branch: default
Log Message:

Merge with Aug2018 branch.


diffs (truncated from 1081 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
@@ -10024,19 +10024,19 @@ Ready.
 [ "generator", "join", "pattern generator.join(gen:bat[:int], low:bat[:int], 
hgh:bat[:int], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
 [ "generator", "join", "pattern generator.join(gen:bat[:lng], low:bat[:lng], 
hgh:bat[:lng], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
 [ "generator", "join", "pattern generator.join(gen:bat[:sht], low:bat[:sht], 
hgh:bat[:sht], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
last:bte):bat[:bte] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
last:bte, step:bte):bat[:bte] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
last:dbl):bat[:dbl] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
last:dbl, step:dbl):bat[:dbl] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
last:flt):bat[:flt] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
last:flt, step:flt):bat[:flt] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:int, 
last:int):bat[:int] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:int, 
last:int, step:int):bat[:int] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
last:lng):bat[:lng] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
last:lng, step:lng):bat[:lng] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
last:sht):bat[:sht] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
last:sht, step:sht):bat[:sht] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:timestamp, 
last:timestamp, step:lng):bat[:timestamp] ",     "VLTgenerator_noop;",   
"Retain the table definition, but don't materialize"    ]
+[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
limit:bte):bat[:bte] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
limit:bte, step:bte):bat[:bte] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
limit:dbl):bat[:dbl] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
limit:dbl, step:dbl):bat[:dbl] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
limit:flt):bat[:flt] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
limit:flt, step:flt):bat[:flt] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:int, 
limit:int):bat[:int] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:int, 
limit:int, step:int):bat[:int] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
limit:lng):bat[:lng] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
limit:lng, step:lng):bat[:lng] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
limit:sht):bat[:sht] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
limit:sht, step:sht):bat[:sht] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:timestamp, 
limit:timestamp, step:lng):bat[:timestamp] ",    "VLTgenerator_noop;",   
"Retain the table definition, but don't materialize"    ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:bte]):bat[:bte] ", "VLTgenerator_projection;",     ""      ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:dbl]):bat[:dbl] ", "VLTgenerator_projection;",     ""      ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:flt]):bat[:flt] ", "VLTgenerator_projection;",     ""      ]
@@ -10058,19 +10058,19 @@ Ready.
 [ "generator", "select",       "pattern generator.select(b:bat[:sht], low:sht, 
high:sht, li:bit, hi:bit, anti:bit):bat[:oid] ",        
"VLTgenerator_subselect;",      ""      ]
 [ "generator", "select",       "pattern generator.select(b:bat[:timestamp], 
cand:bat[:oid], low:timestamp, high:timestamp, li:bit, hi:bit, 
anti:bit):bat[:oid] ",      "VLTgenerator_subselect;",      "Overloaded 
selection routine"  ]
 [ "generator", "select",       "pattern generator.select(b:bat[:timestamp], 
low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ",      
"VLTgenerator_subselect;",      "Overloaded selection routine"  ]
-[ "generator", "series",       "pattern generator.series(first:bte, 
last:bte):bat[:bte] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:bte, last:bte, 
step:bte):bat[:bte] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:dbl, 
last:dbl):bat[:dbl] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:dbl, last:dbl, 
step:dbl):bat[:dbl] ",   "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
-[ "generator", "series",       "pattern generator.series(first:flt, 
last:flt):bat[:flt] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:flt, last:flt, 
step:flt):bat[:flt] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:int, 
last:int):bat[:int] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:int, last:int, 
step:int):bat[:int] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:lng, 
last:lng):bat[:lng] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:lng, last:lng, 
step:lng):bat[:lng] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:sht, 
last:sht):bat[:sht] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:sht, last:sht, 
step:sht):bat[:sht] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:timestamp, 
last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:bte, 
limit:bte):bat[:bte] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:bte, limit:bte, 
step:bte):bat[:bte] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:dbl, 
limit:dbl):bat[:dbl] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:dbl, limit:dbl, 
step:dbl):bat[:dbl] ",  "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
+[ "generator", "series",       "pattern generator.series(first:flt, 
limit:flt):bat[:flt] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:flt, limit:flt, 
step:flt):bat[:flt] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:int, 
limit:int):bat[:int] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:int, limit:int, 
step:int):bat[:int] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:lng, 
limit:lng):bat[:lng] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:lng, limit:lng, 
step:lng):bat[:lng] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:sht, 
limit:sht):bat[:sht] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:sht, limit:sht, 
step:sht):bat[:sht] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:timestamp, 
limit:timestamp, step:lng):bat[:timestamp] ",        "VLTgenerator_table;",  "" 
     ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:bte], 
cnd:bat[:oid], low:bte, oper:str):bat[:oid] ",      
"VLTgenerator_thetasubselect;", ""      ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:bte], 
low:bte, oper:str):bat[:oid] ",     "VLTgenerator_thetasubselect;", ""      ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:dbl], 
cnd:bat[:oid], low:dbl, oper:str):bat[:oid] ",      
"VLTgenerator_thetasubselect;", ""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -14220,21 +14220,21 @@ Ready.
 [ "generator", "join", "pattern generator.join(gen:bat[:int], low:bat[:int], 
hgh:bat[:int], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
 [ "generator", "join", "pattern generator.join(gen:bat[:lng], low:bat[:lng], 
hgh:bat[:lng], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
 [ "generator", "join", "pattern generator.join(gen:bat[:sht], low:bat[:sht], 
hgh:bat[:sht], li:bit, ri:bit) (l:bat[:oid], r:bat[:oid]) ",      
"VLTgenerator_rangejoin;",      ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
last:bte):bat[:bte] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
last:bte, step:bte):bat[:bte] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
last:dbl):bat[:dbl] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
last:dbl, step:dbl):bat[:dbl] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
last:flt):bat[:flt] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
last:flt, step:flt):bat[:flt] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:hge, 
last:hge):bat[:hge] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:hge, 
last:hge, step:hge):bat[:hge] ",       "VLTgenerator_noop;",   "Retain the 
table definition, but don't materialize"    ]
-[ "generator", "parameters",   "pattern generator.parameters(first:int, 
last:int):bat[:int] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:int, 
last:int, step:int):bat[:int] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
last:lng):bat[:lng] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
last:lng, step:lng):bat[:lng] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
last:sht):bat[:sht] ", "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
last:sht, step:sht):bat[:sht] ",       "VLTgenerator_noop;",   ""      ]
-[ "generator", "parameters",   "pattern generator.parameters(first:timestamp, 
last:timestamp, step:lng):bat[:timestamp] ",     "VLTgenerator_noop;",   
"Retain the table definition, but don't materialize"    ]
+[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
limit:bte):bat[:bte] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:bte, 
limit:bte, step:bte):bat[:bte] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
limit:dbl):bat[:dbl] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:dbl, 
limit:dbl, step:dbl):bat[:dbl] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
limit:flt):bat[:flt] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:flt, 
limit:flt, step:flt):bat[:flt] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:hge, 
limit:hge):bat[:hge] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:hge, 
limit:hge, step:hge):bat[:hge] ",      "VLTgenerator_noop;",   "Retain the 
table definition, but don't materialize"    ]
+[ "generator", "parameters",   "pattern generator.parameters(first:int, 
limit:int):bat[:int] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:int, 
limit:int, step:int):bat[:int] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
limit:lng):bat[:lng] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:lng, 
limit:lng, step:lng):bat[:lng] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
limit:sht):bat[:sht] ",        "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:sht, 
limit:sht, step:sht):bat[:sht] ",      "VLTgenerator_noop;",   ""      ]
+[ "generator", "parameters",   "pattern generator.parameters(first:timestamp, 
limit:timestamp, step:lng):bat[:timestamp] ",    "VLTgenerator_noop;",   
"Retain the table definition, but don't materialize"    ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:bte]):bat[:bte] ", "VLTgenerator_projection;",     ""      ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:dbl]):bat[:dbl] ", "VLTgenerator_projection;",     ""      ]
 [ "generator", "projection",   "pattern generator.projection(b:bat[:oid], 
cand:bat[:flt]):bat[:flt] ", "VLTgenerator_projection;",     ""      ]
@@ -14259,21 +14259,21 @@ Ready.
 [ "generator", "select",       "pattern generator.select(b:bat[:sht], low:sht, 
high:sht, li:bit, hi:bit, anti:bit):bat[:oid] ",        
"VLTgenerator_subselect;",      ""      ]
 [ "generator", "select",       "pattern generator.select(b:bat[:timestamp], 
cand:bat[:oid], low:timestamp, high:timestamp, li:bit, hi:bit, 
anti:bit):bat[:oid] ",      "VLTgenerator_subselect;",      "Overloaded 
selection routine"  ]
 [ "generator", "select",       "pattern generator.select(b:bat[:timestamp], 
low:timestamp, high:timestamp, li:bit, hi:bit, anti:bit):bat[:oid] ",      
"VLTgenerator_subselect;",      "Overloaded selection routine"  ]
-[ "generator", "series",       "pattern generator.series(first:bte, 
last:bte):bat[:bte] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:bte, last:bte, 
step:bte):bat[:bte] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:dbl, 
last:dbl):bat[:dbl] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:dbl, last:dbl, 
step:dbl):bat[:dbl] ",   "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
-[ "generator", "series",       "pattern generator.series(first:flt, 
last:flt):bat[:flt] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:flt, last:flt, 
step:flt):bat[:flt] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:hge, 
last:hge):bat[:hge] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:hge, last:hge, 
step:hge):bat[:hge] ",   "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
-[ "generator", "series",       "pattern generator.series(first:int, 
last:int):bat[:int] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:int, last:int, 
step:int):bat[:int] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:lng, 
last:lng):bat[:lng] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:lng, last:lng, 
step:lng):bat[:lng] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:sht, 
last:sht):bat[:sht] ",     "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:sht, last:sht, 
step:sht):bat[:sht] ",   "VLTgenerator_table;",  ""      ]
-[ "generator", "series",       "pattern generator.series(first:timestamp, 
last:timestamp, step:lng):bat[:timestamp] ", "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:bte, 
limit:bte):bat[:bte] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:bte, limit:bte, 
step:bte):bat[:bte] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:dbl, 
limit:dbl):bat[:dbl] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:dbl, limit:dbl, 
step:dbl):bat[:dbl] ",  "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
+[ "generator", "series",       "pattern generator.series(first:flt, 
limit:flt):bat[:flt] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:flt, limit:flt, 
step:flt):bat[:flt] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:hge, 
limit:hge):bat[:hge] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:hge, limit:hge, 
step:hge):bat[:hge] ",  "VLTgenerator_table;",  "Create and materialize a 
generator table"      ]
+[ "generator", "series",       "pattern generator.series(first:int, 
limit:int):bat[:int] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:int, limit:int, 
step:int):bat[:int] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:lng, 
limit:lng):bat[:lng] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:lng, limit:lng, 
step:lng):bat[:lng] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:sht, 
limit:sht):bat[:sht] ",    "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:sht, limit:sht, 
step:sht):bat[:sht] ",  "VLTgenerator_table;",  ""      ]
+[ "generator", "series",       "pattern generator.series(first:timestamp, 
limit:timestamp, step:lng):bat[:timestamp] ",        "VLTgenerator_table;",  "" 
     ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:bte], 
cnd:bat[:oid], low:bte, oper:str):bat[:oid] ",      
"VLTgenerator_thetasubselect;", ""      ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:bte], 
low:bte, oper:str):bat[:oid] ",     "VLTgenerator_thetasubselect;", ""      ]
 [ "generator", "thetaselect",  "pattern generator.thetaselect(b:bat[:dbl], 
cnd:bat[:oid], low:dbl, oper:str):bat[:oid] ",      
"VLTgenerator_thetasubselect;", ""      ]
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -16,13 +16,74 @@
 #include "msqldump.h"
 
 static const char *
-get_compat_clause(Mapi mid)
+get_with_comments_as_clause(Mapi mid)
 {
-       static const char *compat_clause = NULL;
-       if (!compat_clause) {
-               compat_clause = get_with_comments_as_clause(mid);
+       const char *query = /* check whether sys.comments exists */
+               "SELECT t.id "
+               "FROM sys._tables t JOIN sys.schemas s ON t.schema_id = s.id "
+               "WHERE s.name = 'sys' AND t.name = 'comments'";
+       const char *new_clause =
+               "WITH comments AS (SELECT * FROM sys.comments), "
+                    "function_types AS (SELECT * FROM sys.function_types), "
+                    "function_languages AS (SELECT * FROM 
sys.function_languages)";
+       const char *old_clause =
+               "WITH comments AS ("
+                       "SELECT 42 AS id, 'no comment' AS remark WHERE FALSE"
+                    "), "
+                    "function_types AS ("
+                       "SELECT function_type_id, function_type_name, 
function_type_keyword "
+                       "FROM sys.function_types, "
+                            "(VALUES "
+                               "(1, 'FUNCTION'),  "
+                               "(2, 'PROCEDURE'), "
+                               "(3, 'AGGREGATE'), "
+                               "(4, 'FILTER FUNCTION'), "
+                               "(5, 'FUNCTION'),  "
+                               "(6, 'FUNCTION'),  "
+                               "(7, 'LOADER')) AS (id, function_type_keyword) "
+                       "WHERE id = function_type_id"
+                    "), "
+                    "function_languages AS ("
+                       "SELECT language_id, language_name, language_keyword "
+                       "FROM sys.function_languages, (VALUES "
+                               "(3, 'R'), "
+                               "(4, 'C', 'C'), "
+                               "(6, 'PYTHON'), "
+                               "(7, 'PYTHON_MAP'), "
+                               "(8, 'PYTHON2'), "
+                               "(9, 'PYTHON2_MAP'), "
+                               "(10, 'PYTHON3'), "
+                               "(11, 'PYTHON3_MAP'), "
+                               "(12, 'C++', 'CPP')) AS (id, language_keyword) "
+                       "WHERE id = language_id"
+                    ")";
+
+       MapiHdl hdl;
+       const char *comments_clause;
+
+       hdl = mapi_query(mid, query);
+       if (mapi_error(mid)) {
+               if (hdl) {
+                       mapi_explain_result(hdl, stderr);
+                       mapi_close_handle(hdl);
+               } else
+                       mapi_explain(mid, stderr);
+               return NULL;
        }
-       return compat_clause;
+       comments_clause = mapi_fetch_row(hdl) ? new_clause : old_clause;
+       mapi_close_handle(hdl);
+
+       return comments_clause;
+}
+
+const char *
+get_comments_clause(Mapi mid)
+{
+       static const char *comments_clause = NULL;
+       if (comments_clause == NULL) {
+               comments_clause = get_with_comments_as_clause(mid);
+       }
+       return comments_clause;
 }
 
 static int
@@ -824,6 +885,10 @@ describe_table(Mapi mid, const char *sch
        size_t maxquerylen;
        char *sname = NULL;
        bool hashge;
+       const char *comments_clause = get_comments_clause(mid);
+
+       if (comments_clause == NULL)
+               return 1;
 
        if (schema == NULL) {
                if ((sname = strchr(tname, '.')) != NULL) {
@@ -851,7 +916,7 @@ describe_table(Mapi mid, const char *sch
                 "WHERE s.name = '%s' AND "
                       "t.schema_id = s.id AND "
                       "t.name = '%s'",
-                get_compat_clause(mid),
+                comments_clause,
                 schema, tname);
 
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
@@ -1055,7 +1120,7 @@ describe_table(Mapi mid, const char *sch
                         "WHERE i.id = c.id "
                           "AND i.table_id = (SELECT id FROM sys._tables WHERE 
schema_id = (select id FROM sys.schemas WHERE name = '%s') AND name = '%s') "
                         "ORDER BY i.name",
-                        get_compat_clause(mid),
+                        comments_clause,
                         schema, tname);
                if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
                        goto bailout;
@@ -1075,7 +1140,7 @@ describe_table(Mapi mid, const char *sch
                 "WHERE col.id = com.id "
                   "AND col.table_id = (SELECT id FROM sys._tables WHERE 
schema_id = (SELECT id FROM sys.schemas WHERE name = '%s') AND name = '%s') "
                 "ORDER BY number",
-                get_compat_clause(mid),
+                comments_clause,
                 schema, tname);
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
                goto bailout;
@@ -1126,6 +1191,10 @@ describe_sequence(Mapi mid, const char *
        char *query;
        size_t maxquerylen;
        char *sname = NULL;
+       const char *comments_clause = get_comments_clause(mid);
+
+       if (comments_clause == NULL)
+               return 1;
 
        if (schema == NULL) {
                if ((sname = strchr(tname, '.')) != NULL) {
@@ -1160,7 +1229,7 @@ describe_sequence(Mapi mid, const char *
                      "s.name = '%s' AND "
                      "seq.name = '%s' "
                "ORDER BY s.name, seq.name",
-               get_compat_clause(mid),
+               comments_clause,
                schema, tname);
 
        if ((hdl = mapi_query(mid, query)) == NULL || mapi_error(mid))
@@ -1224,6 +1293,10 @@ describe_schema(Mapi mid, const char *sn
 {
        MapiHdl hdl = NULL;
        char schemas[5120];
+       const char *comments_clause = get_comments_clause(mid);
+
+       if (comments_clause == NULL)
+               return 1;
 
        snprintf(schemas, sizeof(schemas),
                "%s "
@@ -1233,7 +1306,7 @@ describe_schema(Mapi mid, const char *sn
                "WHERE s.\"authorization\" = a.id AND "
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to