Changeset: 3c2a3f8919bb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3c2a3f8919bb
Added Files:
        gdk/gdk_analytic.h
        gdk/gdk_analytic_bounds.c
        gdk/gdk_analytic_func.c
        monetdb5/modules/atoms/mtime_analytic.c
        sql/backends/monet5/sql_rank.mal.sh
        sql/backends/monet5/sql_rank_hge.mal
        sql/backends/monet5/sql_rank_hge.mal.sh
        sql/test/analytics/Tests/All
        sql/test/analytics/Tests/analytics00.sql
        sql/test/analytics/Tests/analytics00.stable.err
        sql/test/analytics/Tests/analytics00.stable.out
        sql/test/analytics/Tests/analytics01.sql
        sql/test/analytics/Tests/analytics01.stable.err
        sql/test/analytics/Tests/analytics01.stable.out
        sql/test/analytics/Tests/analytics02.sql
        sql/test/analytics/Tests/analytics02.stable.err
        sql/test/analytics/Tests/analytics02.stable.out
        sql/test/analytics/Tests/analytics03.sql
        sql/test/analytics/Tests/analytics03.stable.err
        sql/test/analytics/Tests/analytics03.stable.out
        sql/test/analytics/Tests/analytics04.sql
        sql/test/analytics/Tests/analytics04.stable.err
        sql/test/analytics/Tests/analytics04.stable.out
        sql/test/analytics/Tests/analytics05.sql
        sql/test/analytics/Tests/analytics05.stable.err
        sql/test/analytics/Tests/analytics05.stable.out
        sql/test/analytics/Tests/analytics06.sql
        sql/test/analytics/Tests/analytics06.stable.err
        sql/test/analytics/Tests/analytics06.stable.out
        sql/test/analytics/Tests/analytics07.sql
        sql/test/analytics/Tests/analytics07.stable.err
        sql/test/analytics/Tests/analytics07.stable.out
        sql/test/analytics/Tests/analytics08.sql
        sql/test/analytics/Tests/analytics08.stable.err
        sql/test/analytics/Tests/analytics08.stable.out
        sql/test/analytics/Tests/analytics09.sql
        sql/test/analytics/Tests/analytics09.stable.err
        sql/test/analytics/Tests/analytics09.stable.out
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        clients/examples/perl/countries.sql
        clients/mapiclient/mhelp.c
        clients/odbc/driver/SQLGetInfo.c
        gdk/Makefile.ag
        gdk/gdk_aggr.c
        gdk/gdk_bbp.c
        gdk/gdk_calc_private.h
        geom/BugTracker/Tests/copy_into_crash.SF-1975402.sql
        geom/BugTracker/Tests/copy_into_crash.SF-1975402.stable.err
        geom/sql/pg_regression/Tests/binary.sql.in
        geom/sql/pg_regression/Tests/clean.sql
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.sql
        
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err.Windows
        
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.Windows
        monetdb5/modules/atoms/Makefile.ag
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/mtime.h
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_support.c
        sql/ChangeLog
        sql/backends/monet5/Makefile.ag
        sql/backends/monet5/Tests/limithack.sql
        sql/backends/monet5/Tests/rapi15.sql
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_hge.mal
        sql/backends/monet5/sql_rank.c
        sql/backends/monet5/sql_rank.h
        sql/backends/monet5/sql_rank.mal
        sql/benchmarks/alex/load.sql
        sql/benchmarks/arno/load.int.sql
        sql/benchmarks/arno_flt/load.flt.sql
        sql/benchmarks/hist-uva/ground/load.sql
        sql/benchmarks/ssbm/Tests/load-sf-0.01.sql
        sql/benchmarks/tpcds/Tests/load.sql.in
        sql/benchmarks/tpch/load-sf-0.01-LOCKED.sql
        sql/benchmarks/tpch/load-sf-0.01.sql
        sql/benchmarks/tpch/load-sf-1.sql
        sql/benchmarks/viam/Tests/dump.sql
        sql/common/sql_types.c
        sql/common/sql_types.h
        sql/include/sql_catalog.h
        sql/scripts/51_sys_schema_extension.sql
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/server/sql_atom.c
        sql/server/sql_atom.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.h
        sql/server/sql_parser.y
        sql/server/sql_scan.c
        sql/server/sql_symbol.c
        sql/server/sql_symbol.h
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/foreign_key_in_frontend_crashes_backend.SF-935578.sql
        sql/test/BugDay_2005-10-06_2.9.3/Tests/inlined_copy_into.SF-922392.sql
        sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.sql
        
sql/test/BugDay_2005-11-09_2.9.3/Tests/hang_on_copy_into.SF-1100504.stable.err
        sql/test/BugTracker-2008/Tests/OOM_query.SF-2457195.sql
        sql/test/BugTracker-2008/Tests/copy-count.SF-2485215.sql
        sql/test/BugTracker-2008/Tests/copy-format.SF-2468513.sql
        sql/test/BugTracker-2008/Tests/copy-format.SF-2468513.stable.err
        sql/test/BugTracker-2008/Tests/varchar.SF-2471371.sql
        sql/test/BugTracker-2008/Tests/varchar.SF-2471371.stable.err
        sql/test/BugTracker-2008/insert-null-byte.sql
        sql/test/BugTracker-2009/Tests/COPY_INTO_char_NULL.SF-2560780.sql.in
        sql/test/BugTracker-2009/Tests/copy_into_error_off_by_one.SF-2833696.sql
        
sql/test/BugTracker-2009/Tests/copy_into_error_off_by_one.SF-2833696.stable.err
        sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.sql
        
sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.err.Windows
        
sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out.Windows
        sql/test/BugTracker-2009/Tests/nullstr.SF-2704016.sql
        
sql/test/BugTracker-2009/Tests/orderby_with_row_number.SF-2895791.stable.out
        sql/test/BugTracker-2009/Tests/parallel_bulk-load.SF-2771052.test.sql.in
        sql/test/BugTracker-2009/Tests/reorder.SF-2770608.sql
        sql/test/BugTracker-2009/Tests/union_leak.SF-2540169.1.sql.in
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-1.sql.in
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-2.sql.in
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-3.sql.in
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-0.sql.in
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-4.sql.in
        sql/test/BugTracker-2010/Tests/cast-varchar.Bug-2682.sql
        sql/test/BugTracker-2010/Tests/delete_insert.Bug-2529.sql
        sql/test/BugTracker-2010/Tests/embedded_record_seperator.SF-2991400.sql
        sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.sql
        sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err
        
sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err.Darwin
        
sql/test/BugTracker-2010/Tests/error-truncated.Bug-2615.stable.err.Windows
        sql/test/BugTracker-2010/Tests/heap_combine_crash.SF-2947763.sql
        sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.sql
        
sql/test/BugTracker-2010/Tests/incomplete-utf8-sequence.Bug-2575.stable.err
        sql/test/BugTracker-2010/Tests/limit_in_prepare.Bug-2552.sql
        
sql/test/BugTracker-2010/Tests/multiple-common-table-expressions.Bug-2664.sql
        sql/test/BugTracker-2010/Tests/reorder.SF-2995671.sql
        sql/test/BugTracker-2011/Tests/FK_self_reference.Bug-2862.sql
        sql/test/BugTracker-2011/Tests/copy-into-file-error.Bug-2722.sql
        sql/test/BugTracker-2011/Tests/count-count-distinct.Bug-2808.sql
        sql/test/BugTracker-2011/Tests/device-self-ref-fk.sql
        sql/test/BugTracker-2011/Tests/double_erange.Bug-2774.sql
        sql/test/BugTracker-2011/Tests/jena-optional-1-test.Bug-2915.sql
        sql/test/BugTracker-2011/Tests/operands-not-synced.Bug-2346.sql
        sql/test/BugTracker-2011/Tests/subquery_in_from_clause.Bug-2812.sql
        
sql/test/BugTracker-2012/Tests/aggregate_vs_positional_column_crash.Bug-3085.sql
        
sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.sql
        sql/test/BugTracker-2012/Tests/hash_select.Bug-2947.sql
        sql/test/BugTracker-2012/Tests/many-columns-truncated.Bug-3161.sql
        sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.sql
        
sql/test/BugTracker-2012/Tests/row_number_does_not_work_in_complex_query.Bug-2805.stable.out
        sql/test/BugTracker-2012/Tests/set_operation.Bug-3059.sql
        sql/test/BugTracker-2012/Tests/strange_escaping_in_csv.Bug-2133.sql
        
sql/test/BugTracker-2012/Tests/strange_escaping_in_csv.Bug-2133.stable.out
        sql/test/BugTracker-2013/Tests/aggregates-typing-issues.Bug-3277.sql
        sql/test/BugTracker-2013/Tests/copy-into-compressed-bz2.Bug-3351.sql.in
        sql/test/BugTracker-2013/Tests/copy-into-compressed-gz.Bug-3351.sql.in
        sql/test/BugTracker-2013/Tests/copy-into-compressed.Bug-3351.sql.in
        sql/test/BugTracker-2013/Tests/copy-into-decimal.Bug-3265.sql
        sql/test/BugTracker-2013/Tests/copy-out-quote.Bug-3393.sql
        sql/test/BugTracker-2013/Tests/crash-from-optimizer.Bug-3241.sql
        sql/test/BugTracker-2013/Tests/median-null.Bug-3280.sql
        sql/test/BugTracker-2013/Tests/mitosis-floor.Bug-3330.sql
        sql/test/BugTracker-2013/Tests/qualified_aggrname.Bug-3332.sql
        sql/test/BugTracker-2013/Tests/restore-uuid.Bug-3407.sql
        sql/test/BugTracker-2013/Tests/segfault_in_aggregation.Bug-3225.sql.in
        sql/test/BugTracker-2013/Tests/swapped_likejoin.Bug-3375.sql
        sql/test/BugTracker-2013/Tests/udf_error.Bug-3396.sql
        sql/test/BugTracker-2014/Tests/copy_decimal_into.Bug-3596.sql
        sql/test/BugTracker-2014/Tests/null_in_string.Bug-2014.sql
        sql/test/BugTracker-2014/Tests/select-distinct-order-limit.Bug-3527.sql
        sql/test/BugTracker-2014/Tests/select-having.Bug-3458.sql
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.sql
        
sql/test/BugTracker-2015/Tests/backslash_predecing_separator.Bug-3775.stable.err
        sql/test/BugTracker-2015/Tests/cardinality.Bug-3761.sql
        sql/test/BugTracker-2015/Tests/copy_into.Bug-3813.sql.in
        sql/test/BugTracker-2015/Tests/float-space-parse.Bug-3691.sql
        sql/test/BugTracker-2015/Tests/float-space-parse.Bug-3691.stable.err
        sql/test/BugTracker-2015/Tests/import-non-ascii.Bug-3864.sql
        sql/test/BugTracker-2015/Tests/is_null_limit.Bug-3684.sql
        sql/test/BugTracker-2015/Tests/leftjoin.Bug-3720.sql
        sql/test/BugTracker-2015/Tests/like-escape.Bug-3822.sql
        sql/test/BugTracker-2015/Tests/sql2pcre.Bug-3800.sql
        
sql/test/BugTracker-2016/Tests/DISTINCT_with_correlated_scalar_subquery_crashes_mserver.Bug-3920.sql
        sql/test/BugTracker-2016/Tests/cast_and_floor.Bug-6071.sql
        sql/test/BugTracker-2016/Tests/malformed-copy-int.Bug-3987.sql.in
        sql/test/BugTracker-2016/Tests/outer_constant_predicate.Bug-4070.sql
        
sql/test/BugTracker-2016/Tests/wrong-nonil-property-with-copy-binary-into.Bug-3937.sql.in
        sql/test/BugTracker-2017/Tests/avggroupbysq.Bug-6178.sql
        sql/test/BugTracker-2017/Tests/crash_in_null_cast.Bug-6186.sql
        sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql
        sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.sql.in
        sql/test/BugTracker-2017/Tests/semijoinunion.Bug-6150.sql
        sql/test/BugTracker-2017/Tests/spurious_error.Bug-6344.sql
        sql/test/BugTracker-2018/Tests/copy-into-ignore-column-1.Bug-6532.sql
        
sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
        
sql/test/BugTracker-2018/Tests/groupby_having_orderby_count.Bug-6624.stable.out
        sql/test/BugTracker-2018/Tests/multiple-insertinto-table-Bug-6578.sql
        sql/test/BugTracker/Tests/copy_decimal.SF-1582957.sql
        sql/test/BugTracker/Tests/copy_decimal.SF-1582957.stable.err
        sql/test/BugTracker/Tests/copy_into_crash.SF-1993999.sql
        sql/test/BugTracker/Tests/copy_overflow_null_bug.SF-1842550.sql
        sql/test/BugTracker/Tests/copy_overflow_null_bug.SF-1842550.stable.err
        sql/test/BugTracker/Tests/variable_stack_crash_load.SF-1711251.sql
        sql/test/BugTracker/Tests/with_row_number.SF-1898089.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
        sql/test/Skyserver/Skyserver_functions.sql
        sql/test/Skyserver/Skyserver_functions_v6.sql
        sql/test/Skyserver/Skyserver_import.sql
        sql/test/Skyserver/Skyserver_import_v6.sql
        sql/test/Skyserver/bugs/Tests/load_dbobjects.sql
        sql/test/Skyserver/bugs/Tests/load_objmask.sql
        sql/test/Tests/bincopycollist.sql.in
        sql/test/Tests/copy-from-compressed.sql.in
        sql/test/Tests/copy-into-fwf.sql.in
        sql/test/Tests/copy-into-lz4.sql.in
        sql/test/Tests/copy_into.sql.in
        sql/test/Tests/fsum.sql
        sql/test/Tests/load_with_offset.sql
        sql/test/Tests/lz4-dump.sql
        sql/test/Tests/rank.stable.out
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/VOC/load.sql
        sql/test/Via-m/create-viam.sql
        sql/test/bugs/Tests/copy_into_quote.sql
        sql/test/bugs/Tests/copy_into_with_schema.sql
        sql/test/bugs/Tests/crash_order_by.sql
        sql/test/bugs/Tests/decimal_copy_into_bug.sql
        sql/test/bugs/Tests/ifthenelse_bug.sql
        sql/test/bugs/Tests/in.sql
        sql/test/bugs/Tests/order_limit_offset_bug.sql
        sql/test/bugs/Tests/rangejoin_optimize_bug.sql
        sql/test/bugs/Tests/simple_view.sql
        sql/test/bugs/Tests/substring_limit_bug.sql
        sql/test/bugs/insert_delete-bug-sf-904025.sql
        sql/test/copy/Tests/columns.sql
        sql/test/copy/Tests/columns.stable.err
        sql/test/copy/Tests/embedded_sep.sql
        sql/test/copy/Tests/escaped_char.sql
        sql/test/copy/Tests/format_date.sql
        sql/test/copy/Tests/incorrect_columns.sql
        sql/test/copy/Tests/ingestion.sql
        sql/test/copy/Tests/int_parse.sql
        sql/test/copy/Tests/int_parse.stable.err
        sql/test/copy/Tests/int_parse_best.sql
        sql/test/copy/Tests/key_copy.sql
        sql/test/copy/Tests/key_copy.stable.err
        sql/test/copy/Tests/load_stdin_incorrect_line_nr.sql
        sql/test/copy/Tests/load_stdin_incorrect_line_nr.stable.err
        sql/test/copy/Tests/null_as_string.sql
        sql/test/copy/Tests/null_as_string_errors.sql
        sql/test/copy/Tests/null_as_string_errors.stable.err
        sql/test/copy/Tests/null_as_string_output.sql
        sql/test/copy/Tests/overflow_error.sql
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/group-concat/Tests/groupconcat04.sql
        sql/test/group-concat/Tests/groupconcat05.sql
        sql/test/json/Tests/jsonvalidity.Bug-3753.sql
        sql/test/json/Tests/jsonvalidity.Bug-3753.stable.out
        sql/test/json/Tests/pgexample.sql
        sql/test/merge-partitions/Tests/mergepart28.sql.in
        sql/test/mergetables/Tests/crash0.sql
        sql/test/mergetables/Tests/forex.sql
        sql/test/mergetables/Tests/mergedb_create.sql
        sql/test/mergetables/Tests/mergedrop.sql
        sql/test/mergetables/Tests/mergedropcascade.sql
        sql/test/mergetables/Tests/mergekey.sql
        sql/test/mergetables/Tests/mergeload.sql
        sql/test/mergetables/Tests/mergeloadidx.sql
        sql/test/mergetables/Tests/mergemergeload.sql
        sql/test/mergetables/Tests/mergemergeload.stable.err
        sql/test/mergetables/Tests/mergequery.sql
        sql/test/mergetables/Tests/singlekeyconstraint.sql
        sql/test/news.sql
        sql/test/osm/Tests/delete_alter_bug.sql
        sql/test/pg_regress/Tests/arrays.sql
        sql/test/pg_regress/Tests/arrays.stable.err
        sql/test/pg_regress/Tests/int8.sql
        sql/test/pg_regress/Tests/int8.stable.err
        sql/test/pg_regress/Tests/int8.stable.err.int128
        sql/test/pg_regress/Tests/numeric.sql
        sql/test/pg_regress/Tests/numeric.stable.err
        sql/test/pg_regress/Tests/numeric.stable.out.FreeBSD.int128
        sql/test/pg_regress/Tests/numeric.stable.out.int128
        sql/test/pg_regress/Tests/oid.stable.err
        sql/test/pg_regress/Tests/timestamp.sql
        sql/test/pg_regress/Tests/timestamp.stable.err
        sql/test/pg_regress/Tests/timestamptz.sql
        sql/test/pg_regress/Tests/timestamptz.stable.err
        sql/test/pg_regress/Tests/type_sanity.sql
        sql/test/quantiles/Tests/quantiles.sql
        sql/test/rank.sql
        sql/test/testdb/Tests/load.sql
        sql/test/thinksql-load.sql
        sql/test/utf8/load.sql
        sql/test/xquery/Tests/create.sql
        testing/Mfilter.py
Branch: merge-statements
Log Message:

Merge with default branch


diffs (truncated from 24036 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
@@ -8377,6 +8377,14 @@ Ready.
 [ "batrapi",   "subeval_aggr", "pattern batrapi.subeval_aggr(fptr:ptr, 
expr:str, arg:any...):any... ", "RAPIevalAggr;",        "grouped aggregates 
through R"  ]
 [ "batsql",    "alpha",        "command batsql.alpha(dec:bat[:dbl], 
theta:dbl):bat[:dbl] ",    "SQLbat_alpha_cst;",    "BAT implementation of 
astronomy alpha function"        ]
 [ "batsql",    "alpha",        "command batsql.alpha(dec:dbl, 
theta:bat[:dbl]):bat[:dbl] ",    "SQLcst_alpha_bat;",    "BAT implementation of 
astronomy alpha function"        ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "count",        "pattern batsql.count(b:bat[:any_1], 
ignils:bit, s:bat[:lng], e:bat[:lng]):bat[:lng] ", "SQLcount;",    "return 
count of groups"        ]
+[ "batsql",    "cume_dist",    "pattern batsql.cume_dist(b:bat[:any_1], 
p:any_2, o:any_3):bat[:dbl] ", "SQLcume_dist;",        "return the accumulated 
distribution of the number of rows per group to the total number of partition 
rows"     ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:bte], 
r:bte):bat[:bte] ",      "bte_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:dbl], 
r:dbl):bat[:dbl] ",      "dbl_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:flt], 
r:flt):bat[:flt] ",      "flt_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
@@ -8386,8 +8394,38 @@ Ready.
 [ "batsql",    "dense_rank",   "pattern batsql.dense_rank(b:bat[:any_1], 
p:any_2, o:any_3):bat[:int] ",        "SQLdense_rank;",       "return the 
densely ranked groups"      ]
 [ "batsql",    "diff", "pattern batsql.diff(b:bat[:any_1]):bat[:bit] ",        
"SQLdiff;",     "return true if cur != prev row"        ]
 [ "batsql",    "diff", "pattern batsql.diff(p:bat[:bit], 
b:bat[:any_1]):bat[:bit] ",   "SQLdiff;",     "return true if cur != prev row"  
      ]
+[ "batsql",    "first_value",  "pattern batsql.first_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ",     "SQLfirst_value;",      "return 
the first value of groups"      ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):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(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):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(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ",    "SQLlag;",      "return the value in the previous 
'l' row in the partition or NULL if non existent"     ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], l:bat[:any_2], 
d:any_1, p:any_3, o:any_4):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(b:bat[:any_1], l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):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(b:bat[:any_1], l:bat[:any_2], 
p:any_3, o:any_4):bat[:any_1] ",      "SQLlag;",      "return the value in the 
previous 'l' row in the partition or NULL if non existent"     ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], p:any_3, 
o:any_4):bat[:any_1] ",     "SQLlag;",      "return the value in the previous 
row in the partition or NULL if non existent" ]
+[ "batsql",    "last_value",   "pattern batsql.last_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ",      "SQLlast_value;",       "return 
the last value of groups"       ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):bat[:any_1] ",  "SQLlead;",     "return the value in the next 
'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ",    "SQLlead;",     "return the 
value in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ",   "SQLlead;",     "return the value in the next 'l' row 
in the partition or NULL if non existent" ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
d:any_1, p:any_3, o:any_4):bat[:any_1] ",    "SQLlead;",     "return the value 
in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ",      "SQLlead;",     "return 
the value in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
p:any_3, o:any_4):bat[:any_1] ",     "SQLlead;",     "return the value in the 
next 'l' row in the partition or NULL if non existent" ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], p:any_3, 
o:any_4):bat[:any_1] ",    "SQLlead;",     "return the value in the next row in 
the partition or NULL if non existent"     ]
+[ "batsql",    "max",  "pattern batsql.max(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ",     "SQLmax;",      "return the maximum of groups"  
]
+[ "batsql",    "min",  "pattern batsql.min(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ",     "SQLmin;",      "return the minimum of groups"  
]
 [ "batsql",    "next_value",   "pattern batsql.next_value(sname:bat[:str], 
sequence:str):bat[:lng] ",  "mvc_bat_next_value;",  "return the next value of 
the sequence" ]
+[ "batsql",    "nth_value",    "pattern batsql.nth_value(b:bat[:any_1], 
n:any_2, s:bat[:lng], e:bat[:lng]):bat[:any_1] ",      "SQLnth_value;",        
"return the nth value of each group"    ]
+[ "batsql",    "nth_value",    "pattern batsql.nth_value(b:bat[:any_1], 
n:bat[:any_2], s:bat[:lng], e:bat[:lng]):bat[:any_1] ",        "SQLnth_value;", 
       "return the nth value of each group"    ]
+[ "batsql",    "ntile",        "pattern batsql.ntile(b:bat[:any_1], n:any_2, 
p:any_3, o:any_4):bat[:any_2] ",  "SQLntile;",    "return the groups divided as 
equally as possible"      ]
+[ "batsql",    "ntile",        "pattern batsql.ntile(b:bat[:any_1], 
n:bat[:any_2], p:any_3, o:any_4):bat[:any_2] ",    "SQLntile;",    "return the 
groups divided as equally as possible"      ]
 [ "batsql",    "password",     "pattern 
batsql.password(user:bat[:str]):bat[:str] ",   "db_password_wrap;",    "Return 
password hash of user"  ]
+[ "batsql",    "percent_rank", "pattern batsql.percent_rank(b:bat[:any_1], 
p:any_2, o:any_3):bat[:dbl] ",      "SQLpercent_rank;",     "return the 
percentage into the total number of groups for each row"    ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:flt] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
 [ "batsql",    "rank", "pattern batsql.rank(b:bat[:any_1], p:any_2, 
o:any_3):bat[:int] ",      "SQLrank;",     "return the ranked groups"      ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:bte], d:int, 
s:int, r:bte):bat[:bte] ",    "bte_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:dbl], 
r:bte):bat[:dbl] ",  "dbl_bat_round_wrap;",  "round off the floating point v to 
r digits behind the dot (if r < 0, before the dot)"  ]
@@ -8396,6 +8434,37 @@ Ready.
 [ "batsql",    "round",        "command batsql.round(v:bat[:lng], d:int, 
s:int, r:bte):bat[:lng] ",    "lng_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:sht], d:int, 
s:int, r:bte):bat[:sht] ",    "sht_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "row_number",   "pattern batsql.row_number(b:bat[:any_1], 
p:any_2, o:any_3):bat[:int] ",        "SQLrow_number;",       "return the 
row_numer-ed groups"        ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:flt] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:bte]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:dbl]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:flt]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:int]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:lng]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:sht]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bte):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:dbl):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:flt):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:int):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:lng):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:sht):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:bte]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:dbl]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:flt]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:int]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:lng]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:sht]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bte):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:dbl):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:flt):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:int):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:lng):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:sht):bat[:lng] ", 
"SQLwindow_bound;",     "computes window ranges for each row"   ]
 [ "batstr",    "endsWith",     "command batstr.endsWith(s:bat[:str], 
suffix:bat[:str]):bat[:bit] ",    "STRbatSuffix;",        "Suffix check." ]
 [ "batstr",    "endsWith",     "command batstr.endsWith(s:bat[:str], 
suffix:str):bat[:bit] ",  "STRbatSuffixcst;",     "Suffix check." ]
 [ "batstr",    "length",       "command batstr.length(s:bat[:str]):bat[:int] 
",        "STRbatLength;",        "Return the length of a string."        ]
@@ -10915,6 +10984,12 @@ Ready.
 [ "sql",       "assert",       "pattern sql.assert(b:bit, msg:str):void ",     
"SQLassert;",   "Generate an exception when b==true"    ]
 [ "sql",       "assert",       "pattern sql.assert(b:int, msg:str):void ",     
"SQLassertInt;",        "Generate an exception when b!=0"       ]
 [ "sql",       "assert",       "pattern sql.assert(b:lng, msg:str):void ",     
"SQLassertLng;",        "Generate an exception when b!=0"       ]
+[ "sql",       "avg",  "pattern sql.avg(b:bte, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
+[ "sql",       "avg",  "pattern sql.avg(b:dbl, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
+[ "sql",       "avg",  "pattern sql.avg(b:flt, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
+[ "sql",       "avg",  "pattern sql.avg(b:int, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
+[ "sql",       "avg",  "pattern sql.avg(b:lng, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
+[ "sql",       "avg",  "pattern sql.avg(b:sht, s:lng, e:lng):dbl ",    
"SQLavg;",      "return the average of groups"  ]
 [ "sql",       "bind", "pattern sql.bind(mvc:int, schema:str, table:str, 
column:str, access:int) (uid:bat[:oid], uval:bat[:any_1]) ",  "mvc_bind_wrap;", 
      "Bind the 'schema.table.column' BAT with access kind:\n\t0 - base 
table\n\t1 - inserts\n\t2 - updates"  ]
 [ "sql",       "bind", "pattern sql.bind(mvc:int, schema:str, table:str, 
column:str, access:int):bat[:any_1] ",        "mvc_bind_wrap;",       "Bind the 
'schema.table.column' BAT with access kind:\n\t0 - base table\n\t1 - 
inserts\n\t2 - updates"  ]
 [ "sql",       "bind", "pattern sql.bind(mvc:int, schema:str, table:str, 
column:str, access:int, part_nr:int, nr_parts:int) (uid:bat[:oid], 
uval:bat[:any_1]) ",       "mvc_bind_wrap;",       "Bind the 
'schema.table.column' BAT with access kind:\n\t0 - base table\n\t1 - 
inserts\n\t2 - updates"  ]
@@ -10928,7 +11003,9 @@ Ready.
 [ "sql",       "copy_from",    "pattern sql.copy_from(t:ptr, sep:str, 
rsep:str, ssep:str, ns:str, fname:str, nr:lng, offset:lng, locked:int, 
best:int, fwf:str, onclient:int):bat[:any]... ",  "mvc_import_table_wrap;",     
  "Import a table from bstream s with the \n\tgiven tuple and seperators 
(sep/rsep)"      ]
 [ "sql",       "copy_rejects", "pattern sql.copy_rejects() (rowid:bat[:lng], 
fldid:bat[:int], msg:bat[:str], inp:bat[:str]) ", "COPYrejects;", ""      ]
 [ "sql",       "copy_rejects_clear",   "pattern sql.copy_rejects_clear():void 
",       "COPYrejects_clear;",   ""      ]
+[ "sql",       "count",        "pattern sql.count(b:any_1, ignils:bit, s:lng, 
e:lng):lng ",    "SQLcount;",    "return count of groups"        ]
 [ "sql",       "createorderindex",     "pattern sql.createorderindex(sch:str, 
tbl:str, col:str):void ",        "sql_createorderindex;",        "Instantiate 
the order index on a column"       ]
+[ "sql",       "cume_dist",    "pattern sql.cume_dist(b:any_1, p:bit, 
o:bit):dbl ",    "SQLcume_dist;",        "return the accumulated distribution 
of the number of rows per group to the total number of partition rows"     ]
 [ "sql",       "current_time", "pattern sql.current_time():daytime ",  
"SQLcurrent_daytime;",  "Get the clients current daytime"       ]
 [ "sql",       "current_timestamp",    "pattern 
sql.current_timestamp():timestamp ",   "SQLcurrent_timestamp;",        "Get the 
clients current timestamp"     ]
 [ "sql",       "db_users",     "pattern sql.db_users():bat[:str] ",    
"db_users_wrap;",       "return table of users with sql scenario"       ]
@@ -10968,6 +11045,7 @@ Ready.
 [ "sql",       "exportResult", "pattern sql.exportResult(s:streams, 
res_id:int):void ",        "mvc_export_result_wrap;",      "Export a result (in 
order) to stream s"        ]
 [ "sql",       "export_table", "pattern sql.export_table(fname:str, fmt:str, 
colsep:str, recsep:str, qout:str, nullrep:str, onclient:int, tbl:bat[:str], 
attr:bat[:str], tpe:bat[:str], len:bat[:int], scale:bat[:int], cols:any...):int 
",    "mvc_export_row_wrap;", "Prepare a table result set for the COPY INTO 
stream"   ]
 [ "sql",       "export_table", "pattern sql.export_table(fname:str, fmt:str, 
colsep:str, recsep:str, qout:str, nullrep:str, onclient:int, tbl:bat[:str], 
attr:bat[:str], tpe:bat[:str], len:bat[:int], scale:bat[:int], 
cols:bat[:any]...):int ",      "mvc_export_table_wrap;",       "Prepare a table 
result set for the COPY INTO stream"   ]
+[ "sql",       "first_value",  "pattern sql.first_value(b:any_1, s:lng, 
e:lng):any_1 ",        "SQLfirst_value;",      "return the first value of 
groups"      ]
 [ "sql",       "flush_log",    "command sql.flush_log():void ",        
"SQLflush_log;",        "flush the log now"     ]
 [ "sql",       "getVariable",  "pattern sql.getVariable(mvc:int, 
varname:str):any_1 ", "getVariable;", "Get the value of a session variable"   ]
 [ "sql",       "getVersion",   "command sql.getVersion(clientid:int):lng ",    
"mvc_getVersion;",      "Return the database version identifier for a client."  
]
@@ -10976,16 +11054,45 @@ Ready.
 [ "sql",       "importTable",  "pattern sql.importTable(sname:str, tname:str, 
onclient:int, fname:str...):bat[:any]... ",      "mvc_bin_import_table_wrap;",  
 "Import a table from the files (fname)" ]
 [ "sql",       "include",      "pattern sql.include(fname:str):void ", 
"SQLinclude;",  "Compile and execute a sql statements on the file"      ]
 [ "sql",       "init", "pattern sql.init():void ",     "SQLinitEnvironment;",  
"Initialize the environment for MAL"    ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:any_2, d:any_1, p:any_3, 
o:any_4):any_1 ",  "SQLlag;",      "return the value in the previous 'l' row in 
the partition or 'd' if non existent"      ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:any_2, d:bat[:any_1], 
p:any_3, o:any_4):any_1 ",    "SQLlag;",      "return the value in the previous 
'l' row in the partition or 'd' if non existent"      ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:any_2, p:any_3, 
o:any_4):any_1 ",   "SQLlag;",      "return the value in the previous 'l' row 
in the partition or NULL if non existent"     ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:bat[:any_2], d:any_1, 
p:any_3, o:any_4):any_1 ",    "SQLlag;",      "return the value in the previous 
'l' row in the partition or 'd' if non existent"      ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:bat[:any_2], d:bat[:any_1], 
p:any_3, o:any_4):any_1 ",      "SQLlag;",      "return the value in the 
previous 'l' row in the partition or 'd' if non existent"      ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, l:bat[:any_2], p:any_3, 
o:any_4):any_1 ",     "SQLlag;",      "return the value in the previous 'l' row 
in the partition or NULL if non existent"     ]
+[ "sql",       "lag",  "pattern sql.lag(b:any_1, p:any_3, o:any_4):any_1 ",    
"SQLlag;",      "return the value in the previous row in the partition or NULL 
if non existent" ]
+[ "sql",       "last_value",   "pattern sql.last_value(b:any_1, s:lng, 
e:lng):any_1 ", "SQLlast_value;",       "return the last value of groups"       
]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:any_2, d:any_1, p:any_3, 
o:any_4):any_1 ", "SQLlead;",     "return the value in the next 'l' row in the 
partition or 'd' if non existent"  ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:any_2, d:bat[:any_1], 
p:any_3, o:any_4):any_1 ",   "SQLlead;",     "return the value in the next 'l' 
row in the partition or 'd' if non existent"  ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:any_2, p:any_3, 
o:any_4):any_1 ",  "SQLlead;",     "return the value in the next 'l' row in the 
partition or NULL if non existent" ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:bat[:any_2], d:any_1, 
p:any_3, o:any_4):any_1 ",   "SQLlead;",     "return the value in the next 'l' 
row in the partition or 'd' if non existent"  ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):any_1 ",     "SQLlead;",     "return the value 
in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, l:bat[:any_2], p:any_3, 
o:any_4):any_1 ",    "SQLlead;",     "return the value in the next 'l' row in 
the partition or NULL if non existent" ]
+[ "sql",       "lead", "pattern sql.lead(b:any_1, p:any_3, o:any_4):any_1 ",   
"SQLlead;",     "return the value in the next row in the partition or NULL if 
non existent"     ]
 [ "sql",       "logfile",      "pattern sql.logfile(filename:str):void ",      
"mvc_logfile;", "Enable/disable saving the sql statement traces"        ]
+[ "sql",       "max",  "pattern sql.max(b:any_1, s:lng, e:lng):any_1 ",        
"SQLmax;",      "return the maximum of groups"  ]
+[ "sql",       "min",  "pattern sql.min(b:any_1, s:lng, e:lng):any_1 ",        
"SQLmin;",      "return the minimum of groups"  ]
 [ "sql",       "ms_trunc",     "command sql.ms_trunc(v:dbl, r: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(v:flt, r: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(sname:str, 
sequence:str):lng ", "mvc_next_value;",      "return the next value of the 
sequence" ]
 [ "sql",       "not_unique",   "command sql.not_unique(b:bat[:oid]):bit ",     
"not_unique;",  "check if the tail sorted bat b doesn't have unique tail 
values"        ]
+[ "sql",       "nth_value",    "pattern sql.nth_value(b:any_1, n:any_2, s:lng, 
e:lng):any_1 ", "SQLnth_value;",        "return the nth value of each group"    
]
+[ "sql",       "nth_value",    "pattern sql.nth_value(b:any_1, n:bat[:any_2], 
s:lng, e:lng):any_1 ",   "SQLnth_value;",        "return the nth value of each 
group"    ]
+[ "sql",       "ntile",        "pattern sql.ntile(b:any_1, n:any_2, p:any_3, 
o:any_4):any_2 ", "SQLntile;",    "return the groups divided as equally as 
possible"      ]
+[ "sql",       "ntile",        "pattern sql.ntile(b:any_1, n:bat[:any_2], 
p:any_3, o:any_4):any_2 ",   "SQLntile;",    "return the groups divided as 
equally as possible"      ]
 [ "sql",       "optimizer_updates",    "pattern sql.optimizer_updates():void 
",        "SQLoptimizersUpdate;", ""      ]
 [ "sql",       "optimizers",   "command sql.optimizers() (X_0:bat[:str], 
X_1:bat[:str], X_2:bat[:str]) ",      "getPipeCatalog;",      ""      ]
 [ "sql",       "password",     "pattern sql.password(user:str):str ",  
"db_password_wrap;",    "Return password hash of user"  ]
+[ "sql",       "percent_rank", "pattern sql.percent_rank(b:any_1, p:bit, 
o:bit):dbl ", "SQLpercent_rank;",     "return the percentage into the total 
number of groups for each row"    ]
 [ "sql",       "prelude",      "pattern sql.prelude():void ",  "SQLprelude;",  
""      ]
+[ "sql",       "prod", "pattern sql.prod(b:bte, s:lng, e:lng):lng ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:dbl, s:lng, e:lng):dbl ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:flt, s:lng, e:lng):dbl ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:flt, s:lng, e:lng):flt ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:int, s:lng, e:lng):lng ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:lng, s:lng, e:lng):lng ",   
"SQLprod;",     "return the product of groups"  ]
+[ "sql",       "prod", "pattern sql.prod(b:sht, s:lng, e:lng):lng ",   
"SQLprod;",     "return the product of groups"  ]
 [ "sql",       "project",      "command sql.project(col:bat[:oid], 
l:bat[:oid], r:bat[:oid]):bat[:oid] ",      "BATleftproject;",      "Last step 
of a left outer join, ie project the inner join (l,r) over the left input side 
(col)"        ]
 [ "sql",       "projectdelta", "command sql.projectdelta(select:bat[:oid], 
col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ",    
"DELTAproject2;",       "Return column bat with delta's applied."       ]
 [ "sql",       "projectdelta", "command sql.projectdelta(select:bat[:oid], 
col:bat[:any_3], uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] 
",   "DELTAproject;",        "Return column bat with delta's applied."       ]
@@ -11031,6 +11138,13 @@ Ready.
 [ "sql",       "subdelta",     "command sql.subdelta(col:bat[:oid], 
cand:bat[:oid], uid:bat[:oid], uval:bat[:oid]):bat[:oid] ",        
"DELTAsub2;",   "Return a single bat of selected delta."        ]
 [ "sql",       "subdelta",     "command sql.subdelta(col:bat[:oid], 
cand:bat[:oid], uid:bat[:oid], uval:bat[:oid], ins:bat[:oid]):bat[:oid] ", 
"DELTAsub;",    "Return a single bat of selected delta."        ]
 [ "sql",       "subzero_or_one",       "inline function 
sql.subzero_or_one(b:bat[:any_1], gp:bat[:oid], gpe:bat[:oid], 
no_nil:bit):bat[:any_1];",      "",     ""      ]
+[ "sql",       "sum",  "pattern sql.sum(b:bte, s:lng, e:lng):lng ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:dbl, s:lng, e:lng):dbl ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:flt, s:lng, e:lng):dbl ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:flt, s:lng, e:lng):flt ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:int, s:lng, e:lng):lng ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:lng, s:lng, e:lng):lng ",    
"SQLsum;",      "return the sum of groups"      ]
+[ "sql",       "sum",  "pattern sql.sum(b:sht, s:lng, e:lng):lng ",    
"SQLsum;",      "return the sum of groups"      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:int):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:lng):void ",      
"SYSMONpause;", ""      ]
 [ "sql",       "sysmon_pause", "pattern sql.sysmon_pause(tag:sht):void ",      
"SYSMONpause;", ""      ]
@@ -11053,6 +11167,18 @@ Ready.
 [ "sql",       "update_schemas",       "pattern sql.update_schemas():void ",   
"SYSupdate_schemas;",   "Procedure triggered on update of the sys.schemas 
table"        ]
 [ "sql",       "update_tables",        "pattern sql.update_tables():void ",    
"SYSupdate_tables;",    "Procedure triggered on update of the sys._tables 
table"        ]
 [ "sql",       "vacuum",       "pattern sql.vacuum(sch:str, tbl:str):void ",   
"SQLvacuum;",   "Choose an approach to consolidate the deletions"       ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:bte):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:dbl):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:flt):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:int):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:lng):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(b:any_1, unit:int, 
bound:int, excl:int, limit:sht):lng ",     "SQLwindow_bound;",     "computes 
window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:bte):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:dbl):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:flt):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:int):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:lng):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
+[ "sql",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, limit:sht):lng ",      "SQLwindow_bound;",     
"computes window ranges for each row"   ]
 [ "sql",       "zero_or_one",  "command sql.zero_or_one(col:bat[:any_1]):any_1 
",      "zero_or_one;", "if col contains exactly one value return this. Incase 
of more raise an exception else return nil"      ]
 [ "sqlblob",   "#fromstr",     "command sqlblob.#fromstr():void ",     
"SQLBLOBfromstr;",      ""      ]
 [ "sqlblob",   "#tostr",       "command sqlblob.#tostr():void ",       
"SQLBLOBtostr;",        ""      ]
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
@@ -11949,6 +11949,15 @@ Ready.
 [ "batrapi",   "subeval_aggr", "pattern batrapi.subeval_aggr(fptr:ptr, 
expr:str, arg:any...):any... ", "RAPIevalAggr;",        "grouped aggregates 
through R"  ]
 [ "batsql",    "alpha",        "command batsql.alpha(dec:bat[:dbl], 
theta:dbl):bat[:dbl] ",    "SQLbat_alpha_cst;",    "BAT implementation of 
astronomy alpha function"        ]
 [ "batsql",    "alpha",        "command batsql.alpha(dec:dbl, 
theta:bat[:dbl]):bat[:dbl] ",    "SQLcst_alpha_bat;",    "BAT implementation of 
astronomy alpha function"        ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:hge], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "avg",  "pattern batsql.avg(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLavg;",      "return the average of groups"  ]
+[ "batsql",    "count",        "pattern batsql.count(b:bat[:any_1], 
ignils:bit, s:bat[:lng], e:bat[:lng]):bat[:lng] ", "SQLcount;",    "return 
count of groups"        ]
+[ "batsql",    "cume_dist",    "pattern batsql.cume_dist(b:bat[:any_1], 
p:any_2, o:any_3):bat[:dbl] ", "SQLcume_dist;",        "return the accumulated 
distribution of the number of rows per group to the total number of partition 
rows"     ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:bte], 
r:bte):bat[:bte] ",      "bte_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:dbl], 
r:dbl):bat[:dbl] ",      "dbl_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
 [ "batsql",    "dec_round",    "command batsql.dec_round(v:bat[:flt], 
r:flt):bat[:flt] ",      "flt_bat_dec_round_wrap;",      "round off the value v 
to nearests multiple of r"       ]
@@ -11959,8 +11968,43 @@ Ready.
 [ "batsql",    "dense_rank",   "pattern batsql.dense_rank(b:bat[:any_1], 
p:any_2, o:any_3):bat[:int] ",        "SQLdense_rank;",       "return the 
densely ranked groups"      ]
 [ "batsql",    "diff", "pattern batsql.diff(b:bat[:any_1]):bat[:bit] ",        
"SQLdiff;",     "return true if cur != prev row"        ]
 [ "batsql",    "diff", "pattern batsql.diff(p:bat[:bit], 
b:bat[:any_1]):bat[:bit] ",   "SQLdiff;",     "return true if cur != prev row"  
      ]
+[ "batsql",    "first_value",  "pattern batsql.first_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ",     "SQLfirst_value;",      "return 
the first value of groups"      ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):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(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):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(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ",    "SQLlag;",      "return the value in the previous 
'l' row in the partition or NULL if non existent"     ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], l:bat[:any_2], 
d:any_1, p:any_3, o:any_4):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(b:bat[:any_1], l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):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(b:bat[:any_1], l:bat[:any_2], 
p:any_3, o:any_4):bat[:any_1] ",      "SQLlag;",      "return the value in the 
previous 'l' row in the partition or NULL if non existent"     ]
+[ "batsql",    "lag",  "pattern batsql.lag(b:bat[:any_1], p:any_3, 
o:any_4):bat[:any_1] ",     "SQLlag;",      "return the value in the previous 
row in the partition or NULL if non existent" ]
+[ "batsql",    "last_value",   "pattern batsql.last_value(b:bat[:any_1], 
s:bat[:lng], e:bat[:lng]):bat[:any_1] ",      "SQLlast_value;",       "return 
the last value of groups"       ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, d:any_1, 
p:any_3, o:any_4):bat[:any_1] ",  "SQLlead;",     "return the value in the next 
'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ",    "SQLlead;",     "return the 
value in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:any_2, p:any_3, 
o:any_4):bat[:any_1] ",   "SQLlead;",     "return the value in the next 'l' row 
in the partition or NULL if non existent" ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
d:any_1, p:any_3, o:any_4):bat[:any_1] ",    "SQLlead;",     "return the value 
in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
d:bat[:any_1], p:any_3, o:any_4):bat[:any_1] ",      "SQLlead;",     "return 
the value in the next 'l' row in the partition or 'd' if non existent"  ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], l:bat[:any_2], 
p:any_3, o:any_4):bat[:any_1] ",     "SQLlead;",     "return the value in the 
next 'l' row in the partition or NULL if non existent" ]
+[ "batsql",    "lead", "pattern batsql.lead(b:bat[:any_1], p:any_3, 
o:any_4):bat[:any_1] ",    "SQLlead;",     "return the value in the next row in 
the partition or NULL if non existent"     ]
+[ "batsql",    "max",  "pattern batsql.max(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ",     "SQLmax;",      "return the maximum of groups"  
]
+[ "batsql",    "min",  "pattern batsql.min(b:bat[:any_1], s:bat[:lng], 
e:bat[:lng]):bat[:any_1] ",     "SQLmin;",      "return the minimum of groups"  
]
 [ "batsql",    "next_value",   "pattern batsql.next_value(sname:bat[:str], 
sequence:str):bat[:lng] ",  "mvc_bat_next_value;",  "return the next value of 
the sequence" ]
+[ "batsql",    "nth_value",    "pattern batsql.nth_value(b:bat[:any_1], 
n:any_2, s:bat[:lng], e:bat[:lng]):bat[:any_1] ",      "SQLnth_value;",        
"return the nth value of each group"    ]
+[ "batsql",    "nth_value",    "pattern batsql.nth_value(b:bat[:any_1], 
n:bat[:any_2], s:bat[:lng], e:bat[:lng]):bat[:any_1] ",        "SQLnth_value;", 
       "return the nth value of each group"    ]
+[ "batsql",    "ntile",        "pattern batsql.ntile(b:bat[:any_1], n:any_2, 
p:any_3, o:any_4):bat[:any_2] ",  "SQLntile;",    "return the groups divided as 
equally as possible"      ]
+[ "batsql",    "ntile",        "pattern batsql.ntile(b:bat[:any_1], 
n:bat[:any_2], p:any_3, o:any_4):bat[:any_2] ",    "SQLntile;",    "return the 
groups divided as equally as possible"      ]
 [ "batsql",    "password",     "pattern 
batsql.password(user:bat[:str]):bat[:str] ",   "db_password_wrap;",    "Return 
password hash of user"  ]
+[ "batsql",    "percent_rank", "pattern batsql.percent_rank(b:bat[:any_1], 
p:any_2, o:any_3):bat[:dbl] ",      "SQLpercent_rank;",     "return the 
percentage into the total number of groups for each row"    ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:flt] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:hge], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ",        "SQLprod;",     "return the product of groups" 
 ]
+[ "batsql",    "prod", "pattern batsql.prod(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ",        "SQLprod;",     "return the product of groups" 
 ]
 [ "batsql",    "rank", "pattern batsql.rank(b:bat[:any_1], p:any_2, 
o:any_3):bat[:int] ",      "SQLrank;",     "return the ranked groups"      ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:bte], d:int, 
s:int, r:bte):bat[:bte] ",    "bte_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:dbl], 
r:bte):bat[:dbl] ",  "dbl_bat_round_wrap;",  "round off the floating point v to 
r digits behind the dot (if r < 0, before the dot)"  ]
@@ -11970,6 +12014,46 @@ Ready.
 [ "batsql",    "round",        "command batsql.round(v:bat[:lng], d:int, 
s:int, r:bte):bat[:lng] ",    "lng_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "round",        "command batsql.round(v:bat[:sht], d:int, 
s:int, r:bte):bat[:sht] ",    "sht_bat_round_wrap;",  "round off the decimal 
v(d,s) to r digits behind the dot (if r < 0, before the dot)"    ]
 [ "batsql",    "row_number",   "pattern batsql.row_number(b:bat[:any_1], 
p:any_2, o:any_3):bat[:int] ",        "SQLrow_number;",       "return the 
row_numer-ed groups"        ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:bte], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:dbl], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:dbl] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:flt], s:bat[:lng], 
e:bat[:lng]):bat[:flt] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:hge], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:int], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:lng], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:hge] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "sum",  "pattern batsql.sum(b:bat[:sht], s:bat[:lng], 
e:bat[:lng]):bat[:lng] ", "SQLsum;",      "return the sum of groups"      ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:bte]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:dbl]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:flt]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:int]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:lng]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bat[:sht]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:bte):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:dbl):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:flt):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:int):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:lng):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, limit:sht):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, start:bat[:hge]):bat[:lng] ",        
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(b:bat[:any_1], 
unit:int, bound:int, excl:int, start:hge):bat[:lng] ",      "SQLwindow_bound;", 
    "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:bte]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
+[ "batsql",    "window_bound", "pattern batsql.window_bound(p:bat[:bit], 
b:bat[:any_1], unit:int, bound:int, excl:int, limit:bat[:dbl]):bat[:lng] ",   
"SQLwindow_bound;",     "computes window ranges for each row"   ]
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to