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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list