Changeset: 467c44ce6099 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/467c44ce6099
Modified Files:
clients/Tests/MAL-signatures.stable.out
clients/Tests/MAL-signatures.stable.out.int128
gdk/gdk_aggr.c
gdk/gdk_string.c
monetdb5/modules/atoms/json.c
monetdb5/modules/mal/pcre.c
monetdb5/optimizer/opt_mergetable.c
monetdb5/optimizer/opt_remap.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql.h
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_rank.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
sql/backends/monet5/sql_subquery.c
sql/server/rel_optimizer.c
sql/test/SQLancer/Tests/sqlancer18.test
Branch: pushcands
Log Message:
Merged with default
diffs (truncated from 3565 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
@@ -5004,6 +5004,7 @@ stdout of test 'MAL-signatures` in direc
[ "batmtime", "year", "pattern batmtime.year(X_0:bat[:timestamp],
X_1:bat[:oid]):bat[:int] ", "MTIMEtimestamp_year_bulk;", "" ]
[ "batpcre", "replace", "command batpcre.replace(X_0:bat[:str],
X_1:str, X_2:str, X_3:str):bat[:str] ", "PCREreplace_bat_wrap;", ""
]
[ "batpcre", "replace_first", "command
batpcre.replace_first(X_0:bat[:str], X_1:str, X_2:str, X_3:str):bat[:str] ",
"PCREreplacefirst_bat_wrap;", "" ]
+[ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:lng, X_1:ptr,
X_2:str):any... ", "PYAPI3PyAPIevalStd;", "Execute a simple Python script
value" ]
[ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "PYAPI3PyAPIevalStd;", "Execute a simple Python script
value" ]
[ "batpyapi3", "eval_aggr", "unsafe pattern batpyapi3.eval_aggr(X_0:ptr,
X_1:str, X_2:any...):any... ", "PYAPI3PyAPIevalAggr;", "grouped aggregates
through Python" ]
[ "batpyapi3", "eval_loader", "unsafe pattern batpyapi3.eval_loader(X_0:ptr,
X_1:str):any... ", "PYAPI3PyAPIevalLoader;", "loader functions
through Python" ]
@@ -5012,6 +5013,7 @@ stdout of test 'MAL-signatures` in direc
[ "batpyapi3map", "eval", "pattern batpyapi3map.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "PYAPI3PyAPIevalStdMap;", "Execute a simple
Python script value" ]
[ "batpyapi3map", "eval_aggr", "pattern
batpyapi3map.eval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ",
"PYAPI3PyAPIevalAggrMap;", "grouped aggregates through Python" ]
[ "batpyapi3map", "subeval_aggr", "pattern
batpyapi3map.subeval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ",
"PYAPI3PyAPIevalAggrMap;", "grouped aggregates through Python" ]
+[ "batrapi", "eval", "pattern batrapi.eval(X_0:lng, X_1:ptr, X_2:str):any...
", "RAPIevalStd;", "Execute a simple R script value" ]
[ "batrapi", "eval", "pattern batrapi.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalStd;", "Execute a simple R script value"
]
[ "batrapi", "eval_aggr", "pattern batrapi.eval_aggr(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalAggr;", "grouped aggregates through
R" ]
[ "batrapi", "subeval_aggr", "pattern batrapi.subeval_aggr(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R"
]
@@ -5103,9 +5105,6 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "diff", "pattern batsql.diff(X_0:bat[:bit],
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "diff", "pattern batsql.diff(X_0:bit,
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "first_value", "pattern batsql.first_value(X_0:bat[:any_1],
X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:any_1] ",
"SQLfirst_value;", "return the first value of groups" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current
value of sequences" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value of the
sequence" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of sequences" ]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:any,
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "return
the value in the previous 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:bat[:any],
X_2:any_1, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "return the
value in the previous 'l' row in the partition or 'd' if non existent" ]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:bat[:any],
X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlag;", "return the value in
the previous 'l' row in the partition or NULL if non existent" ]
@@ -5131,9 +5130,7 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "lead", "pattern batsql.lead(X_0:bat[:any_1], X_1:bat[:any],
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;",
"return the value in the next 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "max", "pattern batsql.max(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmax;", "return the
maximum of groups" ]
[ "batsql", "min", "pattern batsql.min(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmin;", "return the
minimum of groups" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_next_value;", "return the next value of the
sequence" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
+[ "batsql", "next_value", "unsafe pattern batsql.next_value(X_0:lng,
X_1:str, X_2:str):bat[:lng] ", "mvc_next_value_bulk;", "return the next
value of the sequence" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:any_1,
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:lng, X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
@@ -5150,13 +5147,6 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:lng], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "rank", "pattern batsql.rank(X_0:bat[:any_1], X_1:any_2,
X_2:any_3):bat[:int] ", "SQLrank;", "return the ranked groups" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the sequence
with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
[ "batsql", "row_number", "pattern batsql.row_number(X_0:bat[:any_1],
X_1:any_2, X_2:any_3):bat[:int] ", "SQLrow_number;", "return the
row_numer-ed groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:bte], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:dbl], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
@@ -7147,7 +7137,7 @@ stdout of test 'MAL-signatures` in direc
[ "fits", "listdir", "unsafe pattern fits.listdir(X_0:str):void ",
"FITSdir;", "Attach all FITS files in the directory" ]
[ "fits", "listdirpattern", "unsafe pattern
fits.listdirpattern(X_0:str, X_1:str):void ", "FITSdirpat;", "Attach all
FITS file in the directory, giving a pattern" ]
[ "fits", "load", "unsafe pattern fits.load(X_0:str):void ",
"FITSloadTable;", "Load a FITS table from an attached file" ]
-[ "for", "compress", "pattern for.compress(X_0:str, X_1:str,
X_2:str):void ", "FORcompress_col;", "compress a sql column"]
+[ "for", "compress", "pattern for.compress(X_0:str, X_1:str,
X_2:str):void ", "FORcompress_col;", "compress a sql column" ]
[ "for", "decompress", "pattern for.decompress(X_0:bat[:any],
X_1:any_1):bat[:any_1] ", "FORdecompress;", "decompress a for
compressed (sub)column" ]
[ "generator", "join", "pattern generator.join(X_0:bat[:bte], X_1:bat[:bte])
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;", "" ]
[ "generator", "join", "pattern generator.join(X_0:bat[:dbl], X_1:bat[:dbl])
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;", "Overloaded join
operation" ]
@@ -7530,6 +7520,8 @@ stdout of test 'MAL-signatures` in direc
[ "logging", "setflushlevel", "unsafe command
logging.setflushlevel(X_0:str):void ", "TRACERset_flush_level;", "Sets
the flush level" ]
[ "logging", "setlayerlevel", "unsafe command
logging.setlayerlevel(X_0:str, X_1:str):void ", "TRACERset_layer_level;",
"Sets the log level for a specific layer" ]
[ "mal", "manifold", "pattern mal.manifold(X_0:str, X_1:str,
X_2:any...):bat[:any] ", "MANIFOLDevaluate;", "" ]
+[ "mal", "multiplex", "pattern mal.multiplex(X_0:lng, X_1:str,
X_2:str):any... ", "MANIFOLDremapMultiplex;", "" ]
+[ "mal", "multiplex", "pattern mal.multiplex(X_0:lng, X_1:str,
X_2:str, X_3:any...):any... ", "MANIFOLDremapMultiplex;", "" ]
[ "mal", "multiplex", "pattern mal.multiplex(X_0:str, X_1:str,
X_2:any...):any... ", "MANIFOLDremapMultiplex;", "" ]
[ "manual", "functions", "pattern manual.functions() (X_0:bat[:str],
X_1:bat[:str], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str]) ",
"MANUALcreateOverview;", "Produces a table with all MAL functions known"
]
[ "mapi", "bind", "pattern mapi.bind(X_0:int, X_1:str):bat[:any_2] ",
"SERVERbindBAT;", "Bind a remote variable to a local one." ]
@@ -8049,7 +8041,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "ms_trunc", "command sql.ms_trunc(X_0:dbl, X_1:int):dbl ",
"dbl_trunc_wrap;", "truncate the floating point v to r digits behind the
dot (if r < 0, before the dot)" ]
[ "sql", "ms_trunc", "command sql.ms_trunc(X_0:flt, X_1:int):flt ",
"flt_trunc_wrap;", "truncate the floating point v to r digits behind the
dot (if r < 0, before the dot)" ]
[ "sql", "mvc", "pattern sql.mvc():int ", "SQLmvc;", "Get
the multiversion catalog context. \nNeeded for correct statement
dependencies\n(ie sql.update, should be after sql.bind in concurrent
execution)" ]
-[ "sql", "next_value", "pattern sql.next_value(X_0:str, X_1:str):lng
", "mvc_next_value;", "return the next value of the sequence" ]
+[ "sql", "next_value", "unsafe pattern sql.next_value(X_0:str,
X_1:str):lng ", "mvc_next_value;", "return the next value of the sequence"
]
[ "sql", "nth_value", "pattern sql.nth_value(X_0:any_1, X_1:lng,
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ", "SQLnth_value;",
"return the nth value of each group" ]
[ "sql", "ntile", "pattern sql.ntile(X_0:any, X_1:any_1, X_2:bit,
X_3:bit):any_1 ", "SQLntile;", "return the groups divided as equally
as possible" ]
[ "sql", "optimizer_updates", "pattern sql.optimizer_updates():void
", "SQLoptimizersUpdate;", "" ]
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
@@ -7132,6 +7132,7 @@ stdout of test 'MAL-signatures` in direc
[ "batmtime", "year", "pattern batmtime.year(X_0:bat[:timestamp],
X_1:bat[:oid]):bat[:int] ", "MTIMEtimestamp_year_bulk;", "" ]
[ "batpcre", "replace", "command batpcre.replace(X_0:bat[:str],
X_1:str, X_2:str, X_3:str):bat[:str] ", "PCREreplace_bat_wrap;", ""
]
[ "batpcre", "replace_first", "command
batpcre.replace_first(X_0:bat[:str], X_1:str, X_2:str, X_3:str):bat[:str] ",
"PCREreplacefirst_bat_wrap;", "" ]
+[ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:lng, X_1:ptr,
X_2:str):any... ", "PYAPI3PyAPIevalStd;", "Execute a simple Python script
value" ]
[ "batpyapi3", "eval", "unsafe pattern batpyapi3.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "PYAPI3PyAPIevalStd;", "Execute a simple Python script
value" ]
[ "batpyapi3", "eval_aggr", "unsafe pattern batpyapi3.eval_aggr(X_0:ptr,
X_1:str, X_2:any...):any... ", "PYAPI3PyAPIevalAggr;", "grouped aggregates
through Python" ]
[ "batpyapi3", "eval_loader", "unsafe pattern batpyapi3.eval_loader(X_0:ptr,
X_1:str):any... ", "PYAPI3PyAPIevalLoader;", "loader functions
through Python" ]
@@ -7140,6 +7141,7 @@ stdout of test 'MAL-signatures` in direc
[ "batpyapi3map", "eval", "pattern batpyapi3map.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "PYAPI3PyAPIevalStdMap;", "Execute a simple
Python script value" ]
[ "batpyapi3map", "eval_aggr", "pattern
batpyapi3map.eval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ",
"PYAPI3PyAPIevalAggrMap;", "grouped aggregates through Python" ]
[ "batpyapi3map", "subeval_aggr", "pattern
batpyapi3map.subeval_aggr(X_0:ptr, X_1:str, X_2:any...):any... ",
"PYAPI3PyAPIevalAggrMap;", "grouped aggregates through Python" ]
+[ "batrapi", "eval", "pattern batrapi.eval(X_0:lng, X_1:ptr, X_2:str):any...
", "RAPIevalStd;", "Execute a simple R script value" ]
[ "batrapi", "eval", "pattern batrapi.eval(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalStd;", "Execute a simple R script value"
]
[ "batrapi", "eval_aggr", "pattern batrapi.eval_aggr(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalAggr;", "grouped aggregates through
R" ]
[ "batrapi", "subeval_aggr", "pattern batrapi.subeval_aggr(X_0:ptr, X_1:str,
X_2:any...):any... ", "RAPIevalAggr;", "grouped aggregates through R"
]
@@ -7242,9 +7244,6 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "diff", "pattern batsql.diff(X_0:bat[:bit],
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "diff", "pattern batsql.diff(X_0:bit,
X_1:bat[:any_1]):bat[:bit] ", "SQLdiff;", "return true if cur != prev
row" ]
[ "batsql", "first_value", "pattern batsql.first_value(X_0:bat[:any_1],
X_1:any, X_2:any, X_3:int, X_4:any, X_5:any):bat[:any_1] ",
"SQLfirst_value;", "return the first value of groups" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current
value of sequences" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_get_value;", "return the current value of the
sequence" ]
-[ "batsql", "get_value", "pattern batsql.get_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "return the current value
of sequences" ]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:any,
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "return
the value in the previous 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:bat[:any],
X_2:any_1, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "return the
value in the previous 'l' row in the partition or 'd' if non existent" ]
[ "batsql", "lag", "pattern batsql.lag(X_0:any_1, X_1:bat[:any],
X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlag;", "return the value in
the previous 'l' row in the partition or NULL if non existent" ]
@@ -7270,9 +7269,7 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "lead", "pattern batsql.lead(X_0:bat[:any_1], X_1:bat[:any],
X_2:bat[:any_1], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;",
"return the value in the next 'l' row in the partition or 'd' if non existent"
]
[ "batsql", "max", "pattern batsql.max(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmax;", "return the
maximum of groups" ]
[ "batsql", "min", "pattern batsql.min(X_0:bat[:any_1], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:any_1] ", "SQLmin;", "return the
minimum of groups" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:bat[:str],
X_1:str):bat[:lng] ", "mvc_bat_next_value;", "return the next value of the
sequence" ]
-[ "batsql", "next_value", "pattern batsql.next_value(X_0:str,
X_1:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "return the next value of
sequences" ]
+[ "batsql", "next_value", "unsafe pattern batsql.next_value(X_0:lng,
X_1:str, X_2:str):bat[:lng] ", "mvc_next_value_bulk;", "return the next
value of the sequence" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:any_1,
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:bat[:lng], X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
[ "batsql", "nth_value", "pattern batsql.nth_value(X_0:bat[:any_1],
X_1:lng, X_2:any, X_3:any, X_4:int, X_5:any, X_6:any):bat[:any_1] ",
"SQLnth_value;", "return the nth value of each group" ]
@@ -7294,13 +7291,6 @@ stdout of test 'MAL-signatures` in direc
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:hge] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "prod", "pattern batsql.prod(X_0:bat[:sht], X_1:any, X_2:any,
X_3:int, X_4:any, X_5:any):bat[:lng] ", "SQLprod;", "return the product
of groups" ]
[ "batsql", "rank", "pattern batsql.rank(X_0:bat[:any_1], X_1:any_2,
X_2:any_3):bat[:int] ", "SQLrank;", "return the ranked groups" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:bat[:str],
X_1:str, X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the sequence
with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;",
"restart the sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:bat[:str], X_2:lng):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
-[ "batsql", "restart", "unsafe pattern batsql.restart(X_0:str,
X_1:str, X_2:bat[:lng]):bat[:lng] ", "mvc_bat_restart_seq;", "restart the
sequence with value start" ]
[ "batsql", "row_number", "pattern batsql.row_number(X_0:bat[:any_1],
X_1:any_2, X_2:any_3):bat[:int] ", "SQLrow_number;", "return the
row_numer-ed groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:bte], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
[ "batsql", "stdev", "pattern batsql.stdev(X_0:bat[:dbl], X_1:any,
X_2:any, X_3:int, X_4:any, X_5:any):bat[:dbl] ", "SQLstddev_samp;",
"return the standard deviation sample of groups" ]
@@ -10026,10 +10016,10 @@ stdout of test 'MAL-signatures` in direc
[ "fits", "attach", "unsafe pattern fits.attach(X_0:str):void ",
"FITSattach;", "Open a FITS file and return catalog of the table HDUs" ]
[ "fits", "export", "pattern fits.export(X_0:str):void ",
"FITSexportTable;", "Export a table to a FITS file" ]
[ "fits", "fitstest", "command fits.fitstest(X_0:str):int ",
"FITStest;", "Returns the type of first extension in the FITS file filename"
]
-[ "fits", "listdir", "pattern fits.listdir(X_0:str):void ",
"FITSdir;", "Attach all FITS files in the directory" ]
-[ "fits", "listdirpattern", "pattern fits.listdirpattern(X_0:str,
X_1:str):void ", "FITSdirpat;", "Attach all FITS file in the directory,
giving a pattern" ]
-[ "fits", "load", "pattern fits.load(X_0:str):void ",
"FITSloadTable;", "Load a FITS table from an attached file" ]
-[ "for", "compress", "pattern for.compress(X_0:str, X_1:str,
X_2:str):void ", "FORcompress_col;", "compress a sql column"]
+[ "fits", "listdir", "unsafe pattern fits.listdir(X_0:str):void ",
"FITSdir;", "Attach all FITS files in the directory" ]
+[ "fits", "listdirpattern", "unsafe pattern
fits.listdirpattern(X_0:str, X_1:str):void ", "FITSdirpat;", "Attach all
FITS file in the directory, giving a pattern" ]
+[ "fits", "load", "unsafe pattern fits.load(X_0:str):void ",
"FITSloadTable;", "Load a FITS table from an attached file" ]
+[ "for", "compress", "pattern for.compress(X_0:str, X_1:str,
X_2:str):void ", "FORcompress_col;", "compress a sql column" ]
[ "for", "decompress", "pattern for.decompress(X_0:bat[:any],
X_1:any_1):bat[:any_1] ", "FORdecompress;", "decompress a for
compressed (sub)column" ]
[ "generator", "join", "pattern generator.join(X_0:bat[:bte], X_1:bat[:bte])
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;", "" ]
[ "generator", "join", "pattern generator.join(X_0:bat[:dbl], X_1:bat[:dbl])
(X_2:bat[:oid], X_3:bat[:oid]) ", "VLTgenerator_join;", "Overloaded join
operation" ]
@@ -10425,6 +10415,8 @@ stdout of test 'MAL-signatures` in direc
[ "logging", "setflushlevel", "unsafe command
logging.setflushlevel(X_0:str):void ", "TRACERset_flush_level;", "Sets
the flush level" ]
[ "logging", "setlayerlevel", "unsafe command
logging.setlayerlevel(X_0:str, X_1:str):void ", "TRACERset_layer_level;",
"Sets the log level for a specific layer" ]
[ "mal", "manifold", "pattern mal.manifold(X_0:str, X_1:str,
X_2:any...):bat[:any] ", "MANIFOLDevaluate;", "" ]
+[ "mal", "multiplex", "pattern mal.multiplex(X_0:lng, X_1:str,
X_2:str):any... ", "MANIFOLDremapMultiplex;", "" ]
+[ "mal", "multiplex", "pattern mal.multiplex(X_0:lng, X_1:str,
X_2:str, X_3:any...):any... ", "MANIFOLDremapMultiplex;", "" ]
[ "mal", "multiplex", "pattern mal.multiplex(X_0:str, X_1:str,
X_2:any...):any... ", "MANIFOLDremapMultiplex;", "" ]
[ "manual", "functions", "pattern manual.functions() (X_0:bat[:str],
X_1:bat[:str], X_2:bat[:str], X_3:bat[:str], X_4:bat[:str]) ",
"MANUALcreateOverview;", "Produces a table with all MAL functions known"
]
[ "mapi", "bind", "pattern mapi.bind(X_0:int, X_1:str):bat[:any_2] ",
"SERVERbindBAT;", "Bind a remote variable to a local one." ]
@@ -10950,7 +10942,7 @@ stdout of test 'MAL-signatures` in direc
[ "sql", "ms_trunc", "command sql.ms_trunc(X_0:dbl, X_1:int):dbl ",
"dbl_trunc_wrap;", "truncate the floating point v to r digits behind the
dot (if r < 0, before the dot)" ]
[ "sql", "ms_trunc", "command sql.ms_trunc(X_0:flt, X_1:int):flt ",
"flt_trunc_wrap;", "truncate the floating point v to r digits behind the
dot (if r < 0, before the dot)" ]
[ "sql", "mvc", "pattern sql.mvc():int ", "SQLmvc;", "Get
the multiversion catalog context. \nNeeded for correct statement
dependencies\n(ie sql.update, should be after sql.bind in concurrent
execution)" ]
-[ "sql", "next_value", "pattern sql.next_value(X_0:str, X_1:str):lng
", "mvc_next_value;", "return the next value of the sequence" ]
+[ "sql", "next_value", "unsafe pattern sql.next_value(X_0:str,
X_1:str):lng ", "mvc_next_value;", "return the next value of the sequence"
]
[ "sql", "nth_value", "pattern sql.nth_value(X_0:any_1, X_1:lng,
X_2:bit, X_3:bit, X_4:int, X_5:oid, X_6:oid):any_1 ", "SQLnth_value;",
"return the nth value of each group" ]
[ "sql", "ntile", "pattern sql.ntile(X_0:any, X_1:any_1, X_2:bit,
X_3:bit):any_1 ", "SQLntile;", "return the groups divided as equally
as possible" ]
[ "sql", "optimizer_updates", "pattern sql.optimizer_updates():void
", "SQLoptimizersUpdate;", "" ]
diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -3297,9 +3297,10 @@ BATgroupsize(BAT *b, BAT *g, BAT *e, BAT
i = canditer_next(ci) - hseq; \
if (!skip_nils || \
!is_##TYPE##_nil(vals[i])) { \
- oids[gid++] = i + hseq; \
+ oids[gid] = i + hseq; \
nils--; \
} \
+ gid++; \
} \
TIMEOUT_CHECK(timeoffset, \
TIMEOUT_HANDLER(BUN_NONE)); \
@@ -3419,9 +3420,10 @@ do_groupmin(oid *restrict oids, BATiter
i = canditer_next(ci) - hseq;
if (!skip_nils ||
(*atomcmp)(BUNtail(*bi, i), nil) != 0) {
- oids[gid++] = i + hseq;
+ oids[gid] = i + hseq;
nils--;
}
+ gid++;
}
TIMEOUT_CHECK(timeoffset,
TIMEOUT_HANDLER(BUN_NONE));
@@ -3549,9 +3551,10 @@ do_groupmax(oid *restrict oids, BATiter
i = canditer_next(ci) - hseq;
if (!skip_nils ||
(*atomcmp)(BUNtail(*bi, i), nil) != 0) {
- oids[gid++] = i + hseq;
+ oids[gid] = i + hseq;
nils--;
}
+ gid++;
}
TIMEOUT_CHECK(timeoffset,
TIMEOUT_HANDLER(BUN_NONE));
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -1091,9 +1091,12 @@ BATstr_group_concat(ValPtr res, BAT *b,
BUN ncand;
struct canditer ci1 = {0}, ci2 = {0};
oid bhseq = b->hseqbase, shseq = sep ? sep->hseqbase : 0;
+ gdk_return r = GDK_SUCCEED;
+ bool free_nseparator = false;
+ char *nseparator = (char *)separator;
(void) abort_on_error;
- assert((separator && !sep) || (!separator && sep)); /* only one of them
must be set */
+ assert((nseparator && !sep) || (!nseparator && sep)); /* only one of
them must be set */
res->vtype = TYPE_str;
ncand = canditer_init(&ci1, b, s1);
@@ -1107,20 +1110,28 @@ BATstr_group_concat(ValPtr res, BAT *b,
if (ncand2 == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
BUN p = canditer_next(&ci2) - shseq;
- separator = BUNtvar(bi, p);
+ nseparator = GDKstrdup(BUNtvar(bi, p));
bat_iterator_end(&bi);
+ if (!nseparator)
+ return GDK_FAIL;
+ free_nseparator = true;
sep = NULL;
}
}
- if (ncand == 0 || (separator && strNil(separator))) {
+ if (ncand == 0 || (nseparator && strNil(nseparator))) {
if (VALinit(res, TYPE_str, nil_if_empty ? str_nil : "") == NULL)
- return GDK_FAIL;
- return GDK_SUCCEED;
+ r = GDK_FAIL;
+ if (free_nseparator)
+ GDKfree(nseparator);
+ return r;
}
- return concat_strings(NULL, res, b, bhseq, 1, &ci1, &ci2, ncand, NULL,
0, 0,
- skip_nils, sep, shseq, separator, NULL);
+ r = concat_strings(NULL, res, b, bhseq, 1, &ci1, &ci2, ncand, NULL, 0,
0,
+ skip_nils, sep, shseq, nseparator, NULL);
+ if (free_nseparator)
+ GDKfree(nseparator);
+ return r;
}
BAT *
@@ -1133,8 +1144,10 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
struct canditer ci1 = {0}, ci2 = {0};
const char *err;
gdk_return res;
+ bool free_nseparator = false;
+ char *nseparator = (char *)separator;
- assert((separator && !sep) || (!separator && sep)); /* only one of them
must be set */
+ assert((nseparator && !sep) || (!nseparator && sep)); /* only one of
them must be set */
(void) skip_nils;
if ((err = BATgroupaggrinit(b, g, e, s1, &min, &max, &ngrp,
@@ -1151,8 +1164,11 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
if (ncand2 == 1) { /* Only one element in sep */
BATiter bi = bat_iterator(sep);
BUN p = canditer_next(&ci2) - shseq;
- separator = BUNtvar(bi, p);
+ nseparator = GDKstrdup(BUNtvar(bi, p));
bat_iterator_end(&bi);
+ if (!nseparator)
+ return GDK_FAIL;
+ free_nseparator = true;
sep = NULL;
}
} else if (g == NULL) {
@@ -1160,24 +1176,29 @@ BATgroupstr_group_concat(BAT *b, BAT *g,
return NULL;
}
- if (ncand == 0 || ngrp == 0 || (separator && strNil(separator))) {
+ if (ncand == 0 || ngrp == 0 || (nseparator && strNil(nseparator))) {
/* trivial: no strings to concat, so return bat
* aligned with g with nil in the tail */
- return BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil,
ngrp, TRANSIENT);
+ bn = BATconstant(ngrp == 0 ? 0 : min, TYPE_str, str_nil, ngrp,
TRANSIENT);
+ goto done;
}
if (BATtdense(g) || (g->tkey && g->tnonil)) {
/* trivial: singleton groups, so all results are equal
* to the inputs (but possibly a different type) */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list