Changeset: d5319e63022c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d5319e63022c Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 sql/backends/monet5/sql.c sql/test/subquery/Tests/subquery6.sql sql/test/subquery/Tests/subquery6.stable.out Branch: default Log Message:
Make the second input argument to lead and lag function arbitrary, so it can be bound on the backend diffs (254 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 @@ -5603,29 +5603,29 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "get_value", "pattern batsql.get_value(X_1:bat[:str], X_2:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "" ] [ "batsql", "get_value", "pattern batsql.get_value(X_1:bat[:str], X_2:str):bat[:lng] ", "mvc_bat_get_value;", "" ] [ "batsql", "get_value", "pattern batsql.get_value(X_1:str, X_2:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_3, X_3:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] [ "batsql", "last_value", "pattern batsql.last_value(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLlast_value;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_3, X_3:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] [ "batsql", "max", "pattern batsql.max(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLmax;", "" ] [ "batsql", "min", "pattern batsql.min(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLmin;", "" ] [ "batsql", "next_value", "unsafe pattern batsql.next_value(X_1:bat[:str], X_2:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "" ] @@ -8343,13 +8343,13 @@ stdout of test 'MAL-signatures` in direc [ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str, X_2:bit):void ", "SQLhot_snapshot_wrap;", "" ] [ "sql", "importTable", "unsafe pattern sql.importTable(X_1:str, X_2:str, X_3:int, X_4:str...):bat[:any]... ", "mvc_bin_import_table_wrap;", "" ] [ "sql", "include", "pattern sql.include(X_1:str):void ", "SQLinclude;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):any_1 ", "SQLlag;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_2, X_3:any_3, X_4:any_4):any_1 ", "SQLlag;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_3, X_3:any_4):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any, X_3:any_1, X_4:bit, X_5:bit):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any, X_3:bit, X_4:bit):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:bit, X_3:bit):any_1 ", "SQLlag;", "" ] [ "sql", "last_value", "pattern sql.last_value(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLlast_value;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):any_1 ", "SQLlead;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_2, X_3:any_3, X_4:any_4):any_1 ", "SQLlead;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_3, X_3:any_4):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any, X_3:any_1, X_4:bit, X_5:bit):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any, X_3:bit, X_4:bit):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:bit, X_3:bit):any_1 ", "SQLlead;", "" ] [ "sql", "logfile", "unsafe pattern sql.logfile(X_1:str):void ", "mvc_logfile;", "" ] [ "sql", "max", "pattern sql.max(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLmax;", "" ] [ "sql", "min", "pattern sql.min(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLmin;", "" ] 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 @@ -7815,29 +7815,29 @@ stdout of test 'MAL-signatures` in direc [ "batsql", "get_value", "pattern batsql.get_value(X_1:bat[:str], X_2:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "" ] [ "batsql", "get_value", "pattern batsql.get_value(X_1:bat[:str], X_2:str):bat[:lng] ", "mvc_bat_get_value;", "" ] [ "batsql", "get_value", "pattern batsql.get_value(X_1:str, X_2:bat[:str]):bat[:lng] ", "mvc_bat_get_value;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_3, X_3:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlag;", "" ] -[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:any_1, X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlag;", "" ] +[ "batsql", "lag", "pattern batsql.lag(X_1:bat[:any_1], X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlag;", "" ] [ "batsql", "last_value", "pattern batsql.last_value(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLlast_value;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_3, X_3:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_1, X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:any_3, X_4:any_4):bat[:any_1] ", "SQLlead;", "" ] -[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any_2], X_3:bat[:any_1], X_4:any_3, X_5:any_4):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:any_1, X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any, X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:any_2, X_3:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:any_1, X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:any_2, X_4:any_3):bat[:any_1] ", "SQLlead;", "" ] +[ "batsql", "lead", "pattern batsql.lead(X_1:bat[:any_1], X_2:bat[:any], X_3:bat[:any_1], X_4:any_2, X_5:any_3):bat[:any_1] ", "SQLlead;", "" ] [ "batsql", "max", "pattern batsql.max(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLmax;", "" ] [ "batsql", "min", "pattern batsql.min(X_1:bat[:any_1], X_2:bat[:lng], X_3:bat[:lng]):bat[:any_1] ", "SQLmin;", "" ] [ "batsql", "next_value", "unsafe pattern batsql.next_value(X_1:bat[:str], X_2:bat[:str]):bat[:lng] ", "mvc_bat_next_value;", "" ] @@ -11245,13 +11245,13 @@ stdout of test 'MAL-signatures` in direc [ "sql", "hot_snapshot", "unsafe pattern sql.hot_snapshot(X_1:str, X_2:bit):void ", "SQLhot_snapshot_wrap;", "" ] [ "sql", "importTable", "unsafe pattern sql.importTable(X_1:str, X_2:str, X_3:int, X_4:str...):bat[:any]... ", "mvc_bin_import_table_wrap;", "" ] [ "sql", "include", "pattern sql.include(X_1:str):void ", "SQLinclude;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):any_1 ", "SQLlag;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_2, X_3:any_3, X_4:any_4):any_1 ", "SQLlag;", "" ] -[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any_3, X_3:any_4):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any, X_3:any_1, X_4:bit, X_5:bit):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:any, X_3:bit, X_4:bit):any_1 ", "SQLlag;", "" ] +[ "sql", "lag", "pattern sql.lag(X_1:any_1, X_2:bit, X_3:bit):any_1 ", "SQLlag;", "" ] [ "sql", "last_value", "pattern sql.last_value(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLlast_value;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_2, X_3:any_1, X_4:any_3, X_5:any_4):any_1 ", "SQLlead;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_2, X_3:any_3, X_4:any_4):any_1 ", "SQLlead;", "" ] -[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any_3, X_3:any_4):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any, X_3:any_1, X_4:bit, X_5:bit):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:any, X_3:bit, X_4:bit):any_1 ", "SQLlead;", "" ] +[ "sql", "lead", "pattern sql.lead(X_1:any_1, X_2:bit, X_3:bit):any_1 ", "SQLlead;", "" ] [ "sql", "logfile", "unsafe pattern sql.logfile(X_1:str):void ", "mvc_logfile;", "" ] [ "sql", "max", "pattern sql.max(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLmax;", "" ] [ "sql", "min", "pattern sql.min(X_1:any_1, X_2:lng, X_3:lng):any_1 ", "SQLmin;", "" ] diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -5952,34 +5952,34 @@ static mel_func sql_init_funcs[] = { pattern("batsql", "percent_rank", SQLpercent_rank, false, "return the percentage into the total number of groups for each row", args(1,4, batarg("",dbl),batargany("b",1),argany("p",2),argany("o",3))), pattern("sql", "cume_dist", SQLcume_dist, false, "return the accumulated distribution of the number of rows per group to the total number of partition rows", args(1,4, arg("",dbl),argany("b",1),arg("p",bit),arg("o",bit))), pattern("batsql", "cume_dist", SQLcume_dist, false, "return the accumulated distribution of the number of rows per group to the total number of partition rows", args(1,4, batarg("",dbl),batargany("b",1),argany("p",2),argany("o",3))), - pattern("sql", "lag", SQLlag, false, "return the value in the previous row in the partition or NULL if non existent", args(1,4, argany("",1),argany("b",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous row in the partition or NULL if non existent", args(1,4, batargany("",1),batargany("b",1),argany("p",3),argany("o",4))), - pattern("sql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, argany("",1),argany("b",1),argany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),argany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),argany("b",1),batargany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),batargany("l",2),argany("p",3),argany("o",4))), - pattern("sql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, argany("",1),argany("b",1),argany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),argany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("sql", "lead", SQLlead, false, "return the value in the next row in the partition or NULL if non existent", args(1,4, argany("",1),argany("b",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next row in the partition or NULL if non existent", args(1,4, batargany("",1),batargany("b",1),argany("p",3),argany("o",4))), - pattern("sql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, argany("",1),argany("b",1),argany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),argany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),argany("b",1),batargany("l",2),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),batargany("l",2),argany("p",3),argany("o",4))), - pattern("sql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, argany("",1),argany("b",1),argany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",2),argany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),argany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",2),batargany("d",1),argany("p",3),argany("o",4))), - pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",2),batargany("d",1),argany("p",3),argany("o",4))), + pattern("sql", "lag", SQLlag, false, "return the value in the previous row in the partition or NULL if non existent", args(1,4, argany("",1),argany("b",1),arg("p",bit),arg("o",bit))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous row in the partition or NULL if non existent", args(1,4, batargany("",1),batargany("b",1),argany("p",2),argany("o",3))), + pattern("sql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, argany("",1),argany("b",1),argany("l",0),arg("p",bit),arg("o",bit))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),argany("l",0),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),argany("b",1),batargany("l",0),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),batargany("l",0),argany("p",2),argany("o",3))), + pattern("sql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, argany("",1),argany("b",1),argany("l",0),argany("d",1),arg("p",bit),arg("o",bit))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),argany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lag", SQLlag, false, "return the value in the previous 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("sql", "lead", SQLlead, false, "return the value in the next row in the partition or NULL if non existent", args(1,4, argany("",1),argany("b",1),arg("p",bit),arg("o",bit))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next row in the partition or NULL if non existent", args(1,4, batargany("",1),batargany("b",1),argany("p",2),argany("o",3))), + pattern("sql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, argany("",1),argany("b",1),argany("l",0),arg("p",bit),arg("o",bit))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),argany("l",0),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),argany("b",1),batargany("l",0),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or NULL if non existent", args(1,5, batargany("",1),batargany("b",1),batargany("l",0),argany("p",2),argany("o",3))), + pattern("sql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, argany("",1),argany("b",1),argany("l",0),argany("d",1),arg("p",bit),arg("o",bit))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",0),argany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),argany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),argany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),argany("b",1),batargany("l",0),batargany("d",1),argany("p",2),argany("o",3))), + pattern("batsql", "lead", SQLlead, false, "return the value in the next 'l' row in the partition or 'd' if non existent", args(1,6, batargany("",1),batargany("b",1),batargany("l",0),batargany("d",1),argany("p",2),argany("o",3))), pattern("sql", "ntile", SQLntile, false, "return the groups divided as equally as possible", args(1,5, argany("",1),argany("b",0),argany("n",1),arg("p",bit),arg("o",bit))), pattern("batsql", "ntile", SQLntile, false, "return the groups divided as equally as possible", args(1,5, batargany("",1),batargany("b",0),argany("n",1),argany("p",2),argany("o",3))), pattern("batsql", "ntile", SQLntile, false, "return the groups divided as equally as possible", args(1,5, batargany("",1),argany("b",0),batargany("n",1),argany("p",2),argany("o",3))), diff --git a/sql/test/subquery/Tests/subquery6.sql b/sql/test/subquery/Tests/subquery6.sql --- a/sql/test/subquery/Tests/subquery6.sql +++ b/sql/test/subquery/Tests/subquery6.sql @@ -225,6 +225,12 @@ select nth_value('bug', 1) over (); select nth_value('bug', 1) over (), max(TotalSales) from tbl_ProductSales; -- bug 500 +select lag('bug') over (), lag('bug', 1) over (), lag('bug', 0) over (), lag('bug', 1, 'oth') over (), lag('bug', 0, 'oth') over (); + -- NULL NULL bug oth bug + +select lead('bug') over (), lead('bug', 1) over (), lead('bug', 0) over (), lead('bug', 1, 'oth') over (), lead('bug', 0, 'oth') over (), max(TotalSales) from tbl_ProductSales; + -- NULL NULL bug oth bug 500 + DROP TABLE tbl_ProductSales; DROP TABLE another_T; DROP TABLE integers; diff --git a/sql/test/subquery/Tests/subquery6.stable.out b/sql/test/subquery/Tests/subquery6.stable.out --- a/sql/test/subquery/Tests/subquery6.stable.out +++ b/sql/test/subquery/Tests/subquery6.stable.out @@ -314,6 +314,18 @@ stdout of test 'subquery6` in directory % char, int # type % 3, 3 # length [ "bug", 500 ] +#select lag('bug') over (), lag('bug', 1) over (), lag('bug', 0) over (), lag('bug', 1, 'oth') over (), lag('bug', 0, 'oth') over (); +% .%4, .%11, .%16, .%24, .%32 # table_name +% %4, %11, %16, %24, %32 # name +% char, char, char, char, char # type +% 0, 0, 3, 3, 3 # length +[ NULL, NULL, "bug", "oth", "bug" ] +#select lead('bug') over (), lead('bug', 1) over (), lead('bug', 0) over (), lead('bug', 1, 'oth') over (), lead('bug', 0, 'oth') over (), max(TotalSales) from tbl_ProductSales; +% .%4, .%11, .%16, .%24, .%32, sys.%33 # table_name +% %4, %11, %16, %24, %32, %33 # name +% char, char, char, char, char, int # type +% 0, 0, 3, 3, 3, 3 # length +[ NULL, NULL, "bug", "oth", "bug", 500 ] #DROP TABLE tbl_ProductSales; #DROP TABLE another_T; #DROP TABLE integers; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list