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

Reply via email to