Changeset: 5415fc486341 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5415fc486341
Added Files:
        monetdb5/modules/atoms/mtime_private.h
        monetdb5/optimizer/Tests/commonTerms.stable.err
        monetdb5/optimizer/Tests/commonTerms.stable.out
        sql/include/sql_querytype.h
        sql/server/rel_unnest.c
        sql/server/rel_unnest.h
        sql/server/sql_query.c
        sql/server/sql_query.h
        sql/storage/bat/nop_logger.c
        sql/storage/bat/nop_logger.h
        sql/test/BugTracker-2018/Tests/lateral-join-crash.Bug-6613.stable.err
        sql/test/BugTracker-2018/Tests/lateral-join-crash.Bug-6613.stable.out
        sql/test/BugTracker-2019/Tests/alter_table_set_schema.Bug-6701.sql
        
sql/test/BugTracker-2019/Tests/alter_table_set_schema.Bug-6701.stable.err
        
sql/test/BugTracker-2019/Tests/alter_table_set_schema.Bug-6701.stable.out
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.err
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.sql
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.stable.err
        sql/test/BugTracker-2019/Tests/subselect.Bug-6700.stable.out
        sql/test/rename/Tests/rename09.sql
        sql/test/rename/Tests/rename09.stable.err
        sql/test/rename/Tests/rename09.stable.out
        sql/test/subquery/Tests/All
        sql/test/subquery/Tests/all.stable.err
        sql/test/subquery/Tests/all.stable.out
        sql/test/subquery/Tests/any.stable.err
        sql/test/subquery/Tests/any.stable.out
        sql/test/subquery/Tests/any_all.stable.err
        sql/test/subquery/Tests/any_all.stable.out
        sql/test/subquery/Tests/correlated.sql
        sql/test/subquery/Tests/correlated.stable.err
        sql/test/subquery/Tests/correlated.stable.out
        sql/test/subquery/Tests/scalar.stable.err
        sql/test/subquery/Tests/scalar.stable.out
        sql/test/subquery/Tests/subquery.sql
        sql/test/subquery/Tests/subquery.stable.err
        sql/test/subquery/Tests/subquery.stable.out
        sql/test/subquery/Tests/subquery2.sql
        sql/test/subquery/Tests/subquery2.stable.err
        sql/test/subquery/Tests/subquery2.stable.out
Removed Files:
        sql/include/sql_query.h
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        gdk/ChangeLog
        gdk/gdk.h
        gdk/gdk_aggr.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_calc.c
        gdk/gdk_calc.h
        gdk/gdk_group.c
        gdk/gdk_hash.c
        gdk/gdk_heap.c
        gdk/gdk_imprints.c
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_orderidx.c
        gdk/gdk_storage.c
        gdk/gdk_utils.c
        monetdb5/ChangeLog
        monetdb5/mal/Tests/tst1200.stable.out
        monetdb5/mal/Tests/tst1202.stable.out
        monetdb5/mal/mal_authorize.c
        monetdb5/modules/atoms/Makefile.ag
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/mtime.h
        monetdb5/modules/atoms/mtime_analytic.c
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/algebra.h
        monetdb5/modules/kernel/algebra.mal
        monetdb5/modules/mal/00_batcalc_hge.mal.sh
        monetdb5/modules/mal/00_calc_hge.mal.sh
        monetdb5/modules/mal/01_batcalc.mal
        monetdb5/modules/mal/01_batcalc.mal.sh
        monetdb5/modules/mal/01_calc.mal
        monetdb5/modules/mal/01_calc.mal.sh
        monetdb5/modules/mal/batcalc.c
        monetdb5/modules/mal/calc.c
        monetdb5/modules/mal/wlc.mal
        monetdb5/optimizer/Tests/argumenttypes.stable.err
        monetdb5/optimizer/Tests/commonTerms.malC
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/Makefile.ag
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_bat2time.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_rank.mal
        sql/backends/monet5/sql_scenario.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
        sql/backends/monet5/sqlcatalog.mal
        sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
        sql/backends/monet5/wlr.mal
        sql/benchmarks/tpcds/Tests/09.stable.out
        sql/common/sql_changeset.c
        sql/common/sql_stack.c
        sql/common/sql_types.c
        sql/include/Makefile.ag
        sql/include/sql_catalog.h
        sql/include/sql_relation.h
        sql/include/sql_stack.h
        sql/odbc/samples/Tests/testgetinfo.stable.err
        sql/rel.txt
        sql/scripts/Makefile.ag
        sql/server/Makefile.ag
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_partition.c
        sql/server/rel_propagate.c
        sql/server/rel_propagate.h
        sql/server/rel_psm.c
        sql/server/rel_psm.h
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_schema.c
        sql/server/rel_schema.h
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/rel_semantic.c
        sql/server/rel_semantic.h
        sql/server/rel_sequence.c
        sql/server/rel_sequence.h
        sql/server/rel_trans.c
        sql/server/rel_trans.h
        sql/server/rel_updates.c
        sql/server/rel_updates.h
        sql/server/rel_xml.c
        sql/server/rel_xml.h
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_partition.c
        sql/server/sql_semantic.c
        sql/storage/bat/Makefile.ag
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/BugTracker-2009/Tests/correlated-selection-bug.stable.out
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out.int128
        
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
        
sql/test/BugTracker-2010/Tests/ORDER_BY_over_UNION_EXCEPT_INTERSECT.Bug-2606.stable.out
        sql/test/BugTracker-2011/Tests/aggregate-in-subquery.Bug-2739.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
        
sql/test/BugTracker-2012/Tests/correlated_groupby_in_selection.Bug-3011.stable.out
        
sql/test/BugTracker-2012/Tests/scalar_subquery_with_alias.Bug-3093.stable.out
        sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out
        sql/test/BugTracker-2013/Tests/correlated_subquery.Bug-3317.stable.out
        sql/test/BugTracker-2013/Tests/empty-strings.Bug-3261.SQL.py
        sql/test/BugTracker-2013/Tests/pivot.Bug-3339.stable.err
        sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.err
        sql/test/BugTracker-2013/Tests/syntaxerror.Bug-3399.stable.out
        sql/test/BugTracker-2014/Tests/in_incorrect_multi.Bug-3462.stable.err
        
sql/test/BugTracker-2014/Tests/order_by_incorrect_error.Bug-3630.stable.err
        
sql/test/BugTracker-2014/Tests/order_by_incorrect_error.Bug-3630.stable.out
        sql/test/BugTracker-2014/Tests/orderby_count.Bug-3526.stable.out
        sql/test/BugTracker-2015/Tests/ambiguous.Bug-3803.stable.out.int128
        sql/test/BugTracker-2015/Tests/apply_merge_distinct.Bug-3760.stable.out
        sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
        sql/test/BugTracker-2015/Tests/schemadiff.Bug-3778.SQL.py
        
sql/test/BugTracker-2016/Tests/DISTINCT_with_correlated_scalar_subquery_crashes_mserver.Bug-3920.stable.out
        
sql/test/BugTracker-2016/Tests/LEFT-JOIN_with_OR_conditions_triggers_assertion.Bug-3908.stable.out
        
sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out
        
sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.stable.out
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.out
        sql/test/BugTracker-2016/Tests/trigger_bulk.Bug-4045.sql
        sql/test/BugTracker-2016/Tests/trigger_bulk.Bug-4045.stable.err
        sql/test/BugTracker-2016/Tests/trigger_bulk.Bug-4045.stable.out
        
sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.stable.err
        
sql/test/BugTracker-2017/Tests/crash_correlated_subqueries_not_in_select.Bug-6290.stable.out
        sql/test/BugTracker-2017/Tests/exist-bigint-missing.Bug-6315.stable.out
        sql/test/BugTracker-2017/Tests/exists.Bug-6392.stable.out
        sql/test/BugTracker-2017/Tests/groupby_assertion.Bug-6338.stable.out
        sql/test/BugTracker-2017/Tests/lateral.Bug-6310.sql
        sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.err
        sql/test/BugTracker-2017/Tests/lateral.Bug-6310.stable.out
        sql/test/BugTracker-2017/Tests/limit.Bug-6322.stable.out
        sql/test/BugTracker-2017/Tests/push_subslice.Bug-6322.stable.out
        sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.err
        sql/test/BugTracker-2017/Tests/sqlsmith.Bug-6477.stable.out
        
sql/test/BugTracker-2017/Tests/udf_crash_subquery_scalar_paramters.Bug-6399.stable.err
        
sql/test/BugTracker-2017/Tests/wrong_aggregation_count.Bug-6257.stable.out
        
sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
        
sql/test/BugTracker-2018/Tests/dependency_column_on_sequence.Bug-6618.SQL.py
        
sql/test/BugTracker-2018/Tests/local_replica_table_not_detected.Bug-6620.py
        
sql/test/BugTracker-2018/Tests/local_replica_table_not_detected.Bug-6620.stable.out
        sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.py
        sql/test/BugTracker-2018/Tests/remote-table-where-not-equal.Bug-6621.py
        sql/test/BugTracker-2019/Tests/All
        sql/test/BugTracker-2019/Tests/subselect-count.Bug-6686.stable.out
        sql/test/BugTracker/Tests/bug_in_selection.SF-1892413.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-0join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128
        sql/test/Tests/marcin1.stable.out
        sql/test/Tests/order_by_complex_exp.stable.out
        sql/test/Tests/outerref_in_selection.stable.out
        sql/test/Tests/outerref_in_selection.stable.out.int128
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/Users/Tests/grantAndRevokeUserLoggedIN.Bug-3476.SQL.py
        sql/test/VOC/Tests/VOC.stable.out
        sql/test/analytics/Tests/analytics09.stable.err
        sql/test/analytics/Tests/analytics09.stable.out
        sql/test/bugs/Tests/in_or_bug.stable.out
        sql/test/bugs/Tests/selectlist_subquery-sf-1208599.stable.out
        sql/test/bugs/Tests/zero_or_one_bug.stable.out
        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/in-value-list/Tests/various-in-value-list-queries.stable.out
        sql/test/lateral/Tests/lateral.stable.out
        sql/test/merge-partitions/Tests/mergepart29.py
        sql/test/mergetables/Tests/part-elim.stable.out
        sql/test/mergetables/Tests/sqlsmith.Bug-6459.stable.out
        sql/test/mergetables/Tests/sqlsmith.Bug-6459.stable.out.int128
        sql/test/miscellaneous/Tests/groupby_expressions.stable.err
        sql/test/null/Tests/coalesce.stable.out
        sql/test/null/Tests/coalesce3.stable.out
        sql/test/pg_regress/Tests/vacuum.stable.out
        sql/test/pg_regress/Tests/without_oid.stable.out.32bit
        sql/test/remote/Tests/creds.SQL.py
        sql/test/remote/Tests/different_user.SQL.py
        sql/test/remote/Tests/invalid_creds.SQL.py
        sql/test/remote/Tests/ssbm.SQL.py
        sql/test/rename/Tests/All
        sql/test/sql_xml/Tests/xml.stable.out
        sql/test/sys-schema/Tests/bam_tables_checks.stable.out
        sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql
        
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out
        sql/test/sys-schema/Tests/check_MaxStrLength_violations.stable.out
        testing/Mfilter.py
        testing/Mtest.py.in
        tools/mserver/mserver5.1.in
        tools/mserver/mserver5.c
Branch: ipv6
Log Message:

Merge with default.


diffs (truncated from 76971 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
@@ -66,6 +66,8 @@ stdout of test 'MAL-signatures` in direc
 % module,      function,       signature,      address,        comment # name
 % clob,        clob,   clob,   clob,   clob # type
 % 11,  28,     364,    44,     874 # length
+[ "aggr",      "allnotequal",  "command aggr.allnotequal(l:bat[:any_1], 
r:bat[:any_1]):bit ",  "SQLallnotequal;",      "if all values in r are not 
equal to l return true, else if r has nil nil else false"   ]
+[ "aggr",      "anyequal",     "command aggr.anyequal(l:bat[:any_1], 
r:bat[:any_1]):bit ",     "SQLanyequal;", "if any value in r is equal to l 
return true, else if r has nil nil else false" ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
bte"   ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
dbl"   ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
flt"   ]
@@ -121,9 +123,11 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:str]):str ",    
"JSONgroupStr;",        "Aggregate the string values to array." ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmax3;",    ""      ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_2]):any_2 ",       
"ALGmaxany;",   "Return the highest tail value or nil." ]
+[ "aggr",      "max",  "command aggr.max(b:bat[:any_2], skipnil:bit):any_2 ",  
"ALGmaxany_skipnil;",   "Return the highest tail value or nil." ]
 [ "aggr",      "median",       "command aggr.median(b:bat[:any_1]):any_1 ",    
"AGGRmedian;",  "Median aggregate"      ]
 [ "aggr",      "min",  "command aggr.min(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmin3;",    ""      ]
 [ "aggr",      "min",  "command aggr.min(b:bat[:any_2]):any_2 ",       
"ALGminany;",   "Return the lowest tail value or nil."  ]
+[ "aggr",      "min",  "command aggr.min(b:bat[:any_2], skipnil:bit):any_2 ",  
"ALGminany_skipnil;",   "Return the lowest tail value or nil."  ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1]):bat[:bte] ",        "AGGRprod3_bte;",       "Grouped tail 
product on bte"   ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ",        "AGGRprod3_dbl;",       "Grouped tail 
product on dbl"   ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ",        "AGGRprod3_dbl;",       "Grouped tail 
product on flt"   ]
@@ -230,6 +234,10 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], nil_if_empty:bit):str ",     
"CMDBATstr_group_concat;",      "Calculate aggregate string concatenate of B 
with separator SEP."       ]
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], s:bat[:oid]):str ",  
"CMDBATstr_group_concat;",      "Calculate aggregate string concatenate of B 
with candidate list and separator SEP."    ]
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], s:bat[:oid], 
nil_if_empty:bit):str ",        "CMDBATstr_group_concat;",      "Calculate 
aggregate string concatenate of B with candidate list and separator SEP."    ]
+[ "aggr",      "suballnotequal",       "command 
aggr.suballnotequal(l:bat[:any_1], r:bat[:any_1], rid:bat[:oid], gp:bat[:oid], 
gpe:bat[:oid], no_nil:bit):bat[:bit] ", "SQLallnotequal_grp2;", "if all values 
in r are not equal to l return true, else if r has nil nil else false, except 
if rid is nil (ie empty) then true"        ]
+[ "aggr",      "suballnotequal",       "command 
aggr.suballnotequal(l:bat[:any_1], r:bat[:any_1], gp:bat[:oid], gpe:bat[:oid], 
no_nil:bit):bat[:bit] ",        "SQLallnotequal_grp;",  "if all values in r are 
not equal to l return true, else if r has nil nil else false"   ]
+[ "aggr",      "subanyequal",  "command aggr.subanyequal(l:bat[:any_1], 
r:bat[:any_1], rid:bat[:oid], gp:bat[:oid], gpe:bat[:oid], 
no_nil:bit):bat[:bit] ",    "SQLanyequal_grp2;",    "if any value in r is equal 
to l return true, else if r has nil nil else false, except if rid is nil (ie 
empty) then false"     ]
+[ "aggr",      "subanyequal",  "command aggr.subanyequal(l:bat[:any_1], 
r:bat[:any_1], gp:bat[:oid], gpe:bat[:oid], no_nil:bit):bat[:bit] ",   
"SQLanyequal_grp;",     "if any value in r is equal to l return true, else if r 
has nil nil else false" ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
@@ -292,6 +300,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:int], 
e2:bat[:int], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:lng], 
e2:bat[:lng], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:sht], 
e2:bat[:sht], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
+[ "aggr",      "subexist",     "command aggr.subexist(b:bat[:any_2], 
g:bat[:oid], e:bat[:oid], no_nil:bit):bat[:bit] ",        "SQLsubexist;", ""    
  ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:dbl], 
g:bat[:oid], e:bat[:any_1], skip_nils:bit):bat[:str] ",        "JSONsubjson;", 
"Grouped aggregation of values."        ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:str], 
g:bat[:oid], e:bat[:any_1], skip_nils:bit):bat[:str] ",        "JSONsubjson;", 
"Grouped aggregation of values."        ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:dbl], 
g:bat[:oid], e:bat[:any_1], s:bat[:oid], skip_nils:bit):bat[:str] ",   
"JSONsubjsoncand;",     "Grouped aggregation of values with candidates list."   
]
@@ -520,7 +529,7 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "bandjoin",     "command algebra.bandjoin(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], c1:any_1, c2:any_1, li:bit, hi:bit, 
estimate:lng) (X_0:bat[:oid], X_1:bat[:oid]) ", "ALGbandjoin;", "Band join: 
values in l and r match if r - c1 <[=] l <[=] r + c2"       ]
 [ "algebra",   "copy", "command algebra.copy(b:bat[:any_1]):bat[:any_1] ",     
"ALGcopy;",     "Returns physical copy of a BAT."       ]
 [ "algebra",   "crossproduct", "command algebra.crossproduct(left:bat[:any_1], 
right:bat[:any_2]) (l:bat[:oid], r:bat[:oid]) ",        "ALGcrossproduct2;",    
"Returns 2 columns with all BUNs, consisting of the head-oids\n\t  from 'left' 
and 'right' for which there are BUNs in 'left'\n\t  and 'right' with equal 
tails"        ]
-[ "algebra",   "difference",   "command algebra.difference(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], nil_matches:bit, 
estimate:lng):bat[:oid] ",       "ALGdifference;",       "Difference of l and r 
with candidate lists"    ]
+[ "algebra",   "difference",   "command algebra.difference(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], nil_matches:bit, nil_clears:bit, 
estimate:lng):bat[:oid] ",       "ALGdifference;",       "Difference of l and r 
with candidate lists"    ]
 [ "algebra",   "exist",        "command algebra.exist(b:bat[:any_1], 
val:any_1):bit ", "ALGexist;",    "Returns whether 'val' occurs in b."    ]
 [ "algebra",   "fetch",        "command algebra.fetch(b:bat[:any_1], 
x:oid):any_1 ",   "ALGfetchoid;", "Returns the value of the BUN at x-th 
position with 0 <= x < b.count"   ]
 [ "algebra",   "find", "command algebra.find(b:bat[:any_1], t:any_1):oid ",    
"ALGfind;",     "Returns the index position of a value.  If no such BUN exists 
return OID-nil." ]
@@ -6108,22 +6117,14 @@ stdout of test 'MAL-signatures` in direc
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], s:bat[:oid], 
scale:int):dbl ",        "CMDcalcavg;",  "average of non-nil values of B"       
 ]
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], scale:int) (X_0:dbl, 
X_1:lng) ",      "CMDcalcavg;",  "average and number of non-nil values of B"    
 ]
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], scale:int):dbl ",     
"CMDcalcavg;",  "average of non-nil values of B with candidates list"   ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:any_1):bat[:bit] ",        "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:any_1, s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEEN;",       "B 
between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:bat[:any_1]):bat[:bit] ",  "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:bat[:any_1], s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEEN;",       
"B between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:any_1):bat[:bit] ",  "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:any_1, s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEEN;",       
"B between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:bat[:any_1]):bat[:bit] ",    "CMDbatBETWEEN;",       "B 
between LO and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:bat[:any_1], s:bat[:oid]):bat[:bit] ",       
"CMDbatBETWEEN;",       "B between LO and HI inclusive with candidates list"    
]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:any_1):bat[:bit] ",      
"CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) inclusive" 
]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:any_1, 
s:bat[:oid]):bat[:bit] ", "CMDbatBETWEENsymmetric;",      "B between V1 and V2 
(or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:bat[:any_1]):bat[:bit] ", 
       "CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) 
inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:bat[:any_1], 
s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:any_1):bat[:bit] ", 
       "CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) 
inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:any_1, 
s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], 
v2:bat[:any_1]):bat[:bit] ",  "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], 
s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",      "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ",   
"CMDbatBETWEEN;",       "B between V1 and V2 (or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",        "CMDbatBETWEEN;",       "B between V1 and 
V2 (or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",     "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",        "CMDbatBETWEEN;",       "B between V1 and 
V2 (or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",     "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",  "CMDbatBETWEEN;",       "B between V1 and V2 (or 
vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",       "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bit]):bat[:bit] ",  
"CMDconvertsignal_bit;",        "cast from bit to bit, signal error on 
overflow"        ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bit], 
s:bat[:oid]):bat[:bit] ",     "CMDconvertsignal_bit;",        "cast from bit to 
bit with candidates list, signal error on overflow"   ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bte]):bat[:bit] ",  
"CMDconvertsignal_bit;",        "cast from bte to bit, signal error on 
overflow"        ]
@@ -10062,8 +10063,7 @@ stdout of test 'MAL-signatures` in direc
 [ "calc",      "and",  "pattern calc.and(v1:int, v2:int):int ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
 [ "calc",      "and",  "pattern calc.and(v1:lng, v2:lng):lng ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
 [ "calc",      "and",  "pattern calc.and(v1:sht, v2:sht):sht ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
-[ "calc",      "between",      "pattern calc.between(b:any_1, lo:any_1, 
hi:any_1):bit ",       "CMDvarBETWEEN;",       "B between LO and HI inclusive" ]
-[ "calc",      "between_symmetric",    "pattern 
calc.between_symmetric(b:any_1, v1:any_1, v2:any_1):bit ",     
"CMDvarBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) inclusive" 
]
+[ "calc",      "between",      "pattern calc.between(b:any_1, lo:any_1, 
hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bit ",  
"CMDvarBETWEEN;",       "B between LO and HI inclusive" ]
 [ "calc",      "bit",  "pattern calc.bit(v:bit):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
 [ "calc",      "bit",  "pattern calc.bit(v:bte):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
 [ "calc",      "bit",  "pattern calc.bit(v:dbl):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
@@ -11639,12 +11639,14 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "abort",        "pattern sql.abort():void ",    "SQLabort;",    
"Trigger the abort operation for a MAL block"   ]
 [ "sql",       "affectedRows", "unsafe pattern sql.affectedRows(mvc:int, 
nr:lng):int ",        "mvc_affected_rows_wrap;",      "export the number of 
affected rows by the current query"       ]
 [ "sql",       "all",  "inline function sql.all(b:bat[:any_1], gp:bat[:oid], 
gpe:bat[:oid], no_nil:bit):bat[:any_1];", "",     ""      ]
-[ "sql",       "all",  "command sql.all(col:bat[:any_1]):any_1 ",      
"SQLall;",      "if col contains exactly one value return this. Incase of more 
raise an exception else return nil"      ]
+[ "sql",       "all",  "command sql.all(col:bat[:any_1]):any_1 ",      
"SQLall;",      "if all values in col are equal return this, else nil"  ]
+[ "sql",       "all",  "command sql.all(cmp:bit, nl:bit, nr:bit):bit ",        
"SQLall_cmp;",  "if !cmp then false, (nl or nr) then nil, else true"    ]
 [ "sql",       "alpha",        "command sql.alpha(dec:dbl, theta:dbl):dbl ",   
"SQLcst_alpha_cst;",    "Implementation of astronomy alpha function: expands 
the radius theta depending on the declination"     ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, 
sample:lng):void ",    "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str):void ",   "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str, tbl:str):void ",  "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str, tbl:str, col:str):void ", "sql_analyze;", "Update the database 
statistics table"  ]
+[ "sql",       "any",  "command sql.any(cmp:bit, nl:bit, nr:bit):bit ",        
"SQLany_cmp;",  "if cmp then true, (nl or nr) nil then nil, else false" ]
 [ "sql",       "append",       "pattern sql.append(mvc:int, sname:str, 
tname:str, cname:str, ins:any):int ",   "mvc_append_wrap;",     "Append to the 
column tname.cname (possibly optimized to replace the insert bat of 
tname.cname. Returns sequence number for order dependence."  ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
 [ "sql",       "argRecord",    "pattern sql.argRecord(a:any...):str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
@@ -11750,6 +11752,7 @@ stdout of test 'MAL-signatures` in direc
 [ "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",       "null", "command sql.null(b:bat[:any_1]):bit ", "SQLnil;",      
"if b has a nil return true, else false"        ]
 [ "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"  ]
@@ -11849,6 +11852,8 @@ stdout of test 'MAL-signatures` in direc
 [ "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"      ]
+[ "sql",       "zero_or_one",  "command sql.zero_or_one(col:bat[:any_1], 
err:bit):any_1 ",     "zero_or_one_error;",   "if col contains exactly one 
value return this. Incase of more raise an exception if err is true else return 
nil"       ]
+[ "sql",       "zero_or_one",  "command sql.zero_or_one(col:bat[:any_1], 
err:bat[:bit]):any_1 ",       "zero_or_one_error_bat;",       "if col contains 
exactly one value return this. Incase of more raise an exception if err is true 
else return nil"       ]
 [ "sqlcatalog",        "alter_add_range_partition",    "pattern 
sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, 
ptnme:str, min:any_1, max:any_1, nills:int, update:int):void ",  
"SQLalter_add_range_partition;",        "Catalog operation 
alter_add_range_partition"   ]
 [ "sqlcatalog",        "alter_add_table",      "pattern 
sqlcatalog.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, 
action:int):void ",     "SQLalter_add_table;",  "Catalog operation 
alter_add_table"     ]
 [ "sqlcatalog",        "alter_add_value_partition",    "pattern 
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, 
ptnme:str, nills:int, update:int):void ",        
"SQLalter_add_value_partition;",        "Catalog operation 
alter_add_value_partition"   ]
@@ -11886,7 +11891,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog",        "grant_roles",  "pattern 
sqlcatalog.grant_roles(sname:str, auth:str, grantor:int, admin:int):void ",    
"SQLgrant_roles;",      "Catalog operation grant_roles" ]
 [ "sqlcatalog",        "rename_column",        "pattern 
sqlcatalog.rename_column(sname:str, tname:str, cname:str, newnme:str):void ",  
"SQLrename_column;",    "Catalog operation rename_column"       ]
 [ "sqlcatalog",        "rename_schema",        "pattern 
sqlcatalog.rename_schema(sname:str, newnme:str):void ",        
"SQLrename_schema;",    "Catalog operation rename_schema"       ]
-[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(sname:str, tname:str, newnme:str):void ",      
"SQLrename_table;",     "Catalog operation rename_table"        ]
+[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(osname:str, nsname:str, otname:str, ntname:str):void ", 
       "SQLrename_table;",     "Catalog operation rename_table"        ]
 [ "sqlcatalog",        "rename_user",  "pattern 
sqlcatalog.rename_user(sname:str, newnme:str, action:int):void ",      
"SQLrename_user;",      "Catalog operation rename_user" ]
 [ "sqlcatalog",        "revoke",       "pattern sqlcatalog.revoke(sname:str, 
tbl:str, grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",     
  "SQLrevoke;",   "Catalog operation revoke"      ]
 [ "sqlcatalog",        "revoke_function",      "pattern 
sqlcatalog.revoke_function(sname:str, fcnid:int, grantee:str, privs:int, 
grant:int, grantor:int):void ",       "SQLrevoke_function;",  "Catalog 
operation revoke_function"     ]
@@ -12123,7 +12128,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlc",       "query",        "pattern wlc.query(q:str):void ",       
"WLCquery;",    "Keep the queries for replay."  ]
 [ "wlc",       "rename_column",        "pattern wlc.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLCgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlc",       "rename_schema",        "pattern wlc.rename_schema(sname:str, 
newnme:str):void ",       "WLCgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlc",       "rename_table", "pattern wlc.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLCgeneric;",  "Catalog operation rename_table"        
]
+[ "wlc",       "rename_table", "pattern wlc.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLCgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlc",       "rename_user",  "pattern wlc.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLCgeneric;",  "Catalog operation rename_user" ]
 [ "wlc",       "revoke",       "pattern wlc.revoke(sname:str, tbl:str, 
grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke"      ]
 [ "wlc",       "revoke_function",      "pattern wlc.revoke_function(sname:str, 
fcnid:int, grantee:str, privs:int, grant:int, grantor:int):void ",      
"WLCgeneric;",  "Catalog operation revoke_function"     ]
@@ -12183,7 +12188,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlr",       "grant_roles",  "pattern wlr.grant_roles(sname:str, auth:str, 
grantor:int, admin:int):void ",   "WLRgeneric;",  "Catalog operation 
grant_roles" ]
 [ "wlr",       "rename_column",        "pattern wlr.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLRgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlr",       "rename_schema",        "pattern wlr.rename_schema(sname:str, 
newnme:str):void ",       "WLRgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlr",       "rename_table", "pattern wlr.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLRgeneric;",  "Catalog operation rename_table"        
]
+[ "wlr",       "rename_table", "pattern wlr.rename_table(osname:str, 
nsname:str, otname:str, ntname:str):void ",       "WLRgeneric;",  "Catalog 
operation rename_table"        ]
 [ "wlr",       "rename_user",  "pattern wlr.rename_user(sname:str, newnme:str, 
action:int):void ",     "WLRgeneric;",  "Catalog operation rename_user" ]
 [ "wlr",       "replicate",    "pattern wlr.replicate():void ",        
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
 [ "wlr",       "replicate",    "pattern wlr.replicate(dbname:str):void ",      
"WLRreplicate;",        "Roll the snapshot forward to an up-to-date clone"      
]
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
@@ -70,6 +70,8 @@ stdout of test 'MAL-signatures` in direc
 % module,      function,       signature,      address,        comment # name
 % clob,        clob,   clob,   clob,   clob # type
 % 11,  28,     364,    44,     874 # length
+[ "aggr",      "allnotequal",  "command aggr.allnotequal(l:bat[:any_1], 
r:bat[:any_1]):bit ",  "SQLallnotequal;",      "if all values in r are not 
equal to l return true, else if r has nil nil else false"   ]
+[ "aggr",      "anyequal",     "command aggr.anyequal(l:bat[:any_1], 
r:bat[:any_1]):bit ",     "SQLanyequal;", "if any value in r is equal to l 
return true, else if r has nil nil else false" ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
bte"   ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
dbl"   ]
 [ "aggr",      "avg",  "command aggr.avg(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ", "AGGRavg13_dbl;",       "Grouped tail average on 
flt"   ]
@@ -129,9 +131,11 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "jsonaggr",     "command aggr.jsonaggr(val:bat[:str]):str ",    
"JSONgroupStr;",        "Aggregate the string values to array." ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmax3;",    ""      ]
 [ "aggr",      "max",  "command aggr.max(b:bat[:any_2]):any_2 ",       
"ALGmaxany;",   "Return the highest tail value or nil." ]
+[ "aggr",      "max",  "command aggr.max(b:bat[:any_2], skipnil:bit):any_2 ",  
"ALGmaxany_skipnil;",   "Return the highest tail value or nil." ]
 [ "aggr",      "median",       "command aggr.median(b:bat[:any_1]):any_1 ",    
"AGGRmedian;",  "Median aggregate"      ]
 [ "aggr",      "min",  "command aggr.min(b:bat[:any_1], g:bat[:oid], 
e:bat[:any_2]):bat[:any_1] ",     "AGGRmin3;",    ""      ]
 [ "aggr",      "min",  "command aggr.min(b:bat[:any_2]):any_2 ",       
"ALGminany;",   "Return the lowest tail value or nil."  ]
+[ "aggr",      "min",  "command aggr.min(b:bat[:any_2], skipnil:bit):any_2 ",  
"ALGminany_skipnil;",   "Return the lowest tail value or nil."  ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1]):bat[:bte] ",        "AGGRprod3_bte;",       "Grouped tail 
product on bte"   ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ",        "AGGRprod3_dbl;",       "Grouped tail 
product on dbl"   ]
 [ "aggr",      "prod", "command aggr.prod(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1]):bat[:dbl] ",        "AGGRprod3_dbl;",       "Grouped tail 
product on flt"   ]
@@ -269,6 +273,10 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], nil_if_empty:bit):str ",     
"CMDBATstr_group_concat;",      "Calculate aggregate string concatenate of B 
with separator SEP."       ]
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], s:bat[:oid]):str ",  
"CMDBATstr_group_concat;",      "Calculate aggregate string concatenate of B 
with candidate list and separator SEP."    ]
 [ "aggr",      "str_group_concat",     "pattern 
aggr.str_group_concat(b:bat[:str], sep:bat[:str], s:bat[:oid], 
nil_if_empty:bit):str ",        "CMDBATstr_group_concat;",      "Calculate 
aggregate string concatenate of B with candidate list and separator SEP."    ]
+[ "aggr",      "suballnotequal",       "command 
aggr.suballnotequal(l:bat[:any_1], r:bat[:any_1], rid:bat[:oid], gp:bat[:oid], 
gpe:bat[:oid], no_nil:bit):bat[:bit] ", "SQLallnotequal_grp2;", "if all values 
in r are not equal to l return true, else if r has nil nil else false, except 
if rid is nil (ie empty) then true"        ]
+[ "aggr",      "suballnotequal",       "command 
aggr.suballnotequal(l:bat[:any_1], r:bat[:any_1], gp:bat[:oid], gpe:bat[:oid], 
no_nil:bit):bat[:bit] ",        "SQLallnotequal_grp;",  "if all values in r are 
not equal to l return true, else if r has nil nil else false"   ]
+[ "aggr",      "subanyequal",  "command aggr.subanyequal(l:bat[:any_1], 
r:bat[:any_1], rid:bat[:oid], gp:bat[:oid], gpe:bat[:oid], 
no_nil:bit):bat[:bit] ",    "SQLanyequal_grp2;",    "if any value in r is equal 
to l return true, else if r has nil nil else false, except if rid is nil (ie 
empty) then false"     ]
+[ "aggr",      "subanyequal",  "command aggr.subanyequal(l:bat[:any_1], 
r:bat[:any_1], gp:bat[:oid], gpe:bat[:oid], no_nil:bit):bat[:bit] ",   
"SQLanyequal_grp;",     "if any value in r is equal to l return true, else if r 
has nil nil else false" ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:bte], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:dbl], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
 [ "aggr",      "subavg",       "command aggr.subavg(b:bat[:flt], g:bat[:oid], 
e:bat[:any_1], skip_nils:bit, abort_on_error:bit):bat[:dbl] ",   
"AGGRsubavg1_dbl;",     "Grouped average aggregate"     ]
@@ -337,6 +345,7 @@ stdout of test 'MAL-signatures` in direc
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:int], 
e2:bat[:int], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:lng], 
e2:bat[:lng], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
 [ "aggr",      "subcovar",     "function aggr.subcovar(e1:bat[:sht], 
e2:bat[:sht], g:bat[:oid], e:bat[:any_2], f:bit):bat[:dbl];",     "",     ""    
  ]
+[ "aggr",      "subexist",     "command aggr.subexist(b:bat[:any_2], 
g:bat[:oid], e:bat[:oid], no_nil:bit):bat[:bit] ",        "SQLsubexist;", ""    
  ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:dbl], 
g:bat[:oid], e:bat[:any_1], skip_nils:bit):bat[:str] ",        "JSONsubjson;", 
"Grouped aggregation of values."        ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:str], 
g:bat[:oid], e:bat[:any_1], skip_nils:bit):bat[:str] ",        "JSONsubjson;", 
"Grouped aggregation of values."        ]
 [ "aggr",      "subjsonaggr",  "command aggr.subjsonaggr(val:bat[:dbl], 
g:bat[:oid], e:bat[:any_1], s:bat[:oid], skip_nils:bit):bat[:str] ",   
"JSONsubjsoncand;",     "Grouped aggregation of values with candidates list."   
]
@@ -624,7 +633,7 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "bandjoin",     "command algebra.bandjoin(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], c1:any_1, c2:any_1, li:bit, hi:bit, 
estimate:lng) (X_0:bat[:oid], X_1:bat[:oid]) ", "ALGbandjoin;", "Band join: 
values in l and r match if r - c1 <[=] l <[=] r + c2"       ]
 [ "algebra",   "copy", "command algebra.copy(b:bat[:any_1]):bat[:any_1] ",     
"ALGcopy;",     "Returns physical copy of a BAT."       ]
 [ "algebra",   "crossproduct", "command algebra.crossproduct(left:bat[:any_1], 
right:bat[:any_2]) (l:bat[:oid], r:bat[:oid]) ",        "ALGcrossproduct2;",    
"Returns 2 columns with all BUNs, consisting of the head-oids\n\t  from 'left' 
and 'right' for which there are BUNs in 'left'\n\t  and 'right' with equal 
tails"        ]
-[ "algebra",   "difference",   "command algebra.difference(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], nil_matches:bit, 
estimate:lng):bat[:oid] ",       "ALGdifference;",       "Difference of l and r 
with candidate lists"    ]
+[ "algebra",   "difference",   "command algebra.difference(l:bat[:any_1], 
r:bat[:any_1], sl:bat[:oid], sr:bat[:oid], nil_matches:bit, nil_clears:bit, 
estimate:lng):bat[:oid] ",       "ALGdifference;",       "Difference of l and r 
with candidate lists"    ]
 [ "algebra",   "exist",        "command algebra.exist(b:bat[:any_1], 
val:any_1):bit ", "ALGexist;",    "Returns whether 'val' occurs in b."    ]
 [ "algebra",   "fetch",        "command algebra.fetch(b:bat[:any_1], 
x:oid):any_1 ",   "ALGfetchoid;", "Returns the value of the BUN at x-th 
position with 0 <= x < b.count"   ]
 [ "algebra",   "find", "command algebra.find(b:bat[:any_1], t:any_1):oid ",    
"ALGfind;",     "Returns the index position of a value.  If no such BUN exists 
return OID-nil." ]
@@ -8642,14 +8651,14 @@ stdout of test 'MAL-signatures` in direc
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], s:bat[:oid], 
scale:int):dbl ",        "CMDcalcavg;",  "average of non-nil values of B"       
 ]
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], scale:int) (X_0:dbl, 
X_1:lng) ",      "CMDcalcavg;",  "average and number of non-nil values of B"    
 ]
 [ "batcalc",   "avg",  "pattern batcalc.avg(b:bat[:sht], scale:int):dbl ",     
"CMDcalcavg;",  "average of non-nil values of B with candidates list"   ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:any_1):bat[:bit] ",        "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:any_1, s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEEN;",       "B 
between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:bat[:any_1]):bat[:bit] ",  "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:any_1, hi:bat[:any_1], s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEEN;",       
"B between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:any_1):bat[:bit] ",  "CMDbatBETWEEN;",       "B between LO 
and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:any_1, s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEEN;",       
"B between LO and HI inclusive with candidates list"    ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:bat[:any_1]):bat[:bit] ",    "CMDbatBETWEEN;",       "B 
between LO and HI inclusive" ]
-[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
lo:bat[:any_1], hi:bat[:any_1], s:bat[:oid]):bat[:bit] ",       
"CMDbatBETWEEN;",       "B between LO and HI inclusive with candidates list"    
]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",      "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bat[:bit] ",   
"CMDbatBETWEEN;",       "B between V1 and V2 (or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",        "CMDbatBETWEEN;",       "B between V1 and 
V2 (or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:any_1, v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",     "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:any_1, s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",        "CMDbatBETWEEN;",       "B between V1 and 
V2 (or vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:any_1, sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",     "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:bat[:any_1], s:bat[:oid], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",  "CMDbatBETWEEN;",       "B between V1 and V2 (or 
vice versa) with candidate list"       ]
+[ "batcalc",   "between",      "pattern batcalc.between(b:bat[:any_1], 
v1:bat[:any_1], v2:bat[:any_1], sym:bit, linc:bit, hinc:bit, 
nils_false:bit):bat[:bit] ",       "CMDbatBETWEEN;",       "B between V1 and V2 
(or vice versa)"   ]
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], 
lo:bat[:hge], hi:bat[:hge]):bat[:bit] ",  "CMDbatBETWEEN;",       "B between LO 
and HI inclusive, nil border is (minus) infinity" ]
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], 
lo:bat[:hge], hi:bat[:hge], s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEEN;",     
  "B between LO and HI inclusive with candidates list, nil border is (minus) 
infinity"    ]
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], 
lo:bat[:hge], hi:hge):bat[:bit] ",        "CMDbatBETWEEN;",       "B between LO 
and HI inclusive, nil border is (minus) infinity" ]
@@ -8658,14 +8667,6 @@ stdout of test 'MAL-signatures` in direc
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], lo:hge, 
hi:bat[:hge], s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEEN;",       "B between LO 
and HI inclusive with candidates list, nil border is (minus) infinity"    ]
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], lo:hge, 
hi:hge):bat[:bit] ",      "CMDbatBETWEEN;",       "B between LO and HI 
inclusive, nil border is (minus) infinity" ]
 [ "batcalc",   "between",      "pattern batcalc.between(b:bat[:hge], lo:hge, 
hi:hge, s:bat[:oid]):bat[:bit] ", "CMDbatBETWEEN;",       "B between LO and HI 
inclusive with candidates list, nil border is (minus) infinity"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:any_1):bat[:bit] ",      
"CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) inclusive" 
]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:any_1, 
s:bat[:oid]):bat[:bit] ", "CMDbatBETWEENsymmetric;",      "B between V1 and V2 
(or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:bat[:any_1]):bat[:bit] ", 
       "CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) 
inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:any_1, v2:bat[:any_1], 
s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:any_1):bat[:bit] ", 
       "CMDbatBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) 
inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:any_1, 
s:bat[:oid]):bat[:bit] ",   "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], 
v2:bat[:any_1]):bat[:bit] ",  "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive" ]
-[ "batcalc",   "between_symmetric",    "pattern 
batcalc.between_symmetric(b:bat[:any_1], v1:bat[:any_1], v2:bat[:any_1], 
s:bat[:oid]):bat[:bit] ",     "CMDbatBETWEENsymmetric;",      "B between V1 and 
V2 (or vice versa) inclusive with candidates list"    ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bit]):bat[:bit] ",  
"CMDconvertsignal_bit;",        "cast from bit to bit, signal error on 
overflow"        ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bit], 
s:bat[:oid]):bat[:bit] ",     "CMDconvertsignal_bit;",        "cast from bit to 
bit with candidates list, signal error on overflow"   ]
 [ "batcalc",   "bit",  "pattern batcalc.bit(b:bat[:bte]):bat[:bit] ",  
"CMDconvertsignal_bit;",        "cast from bte to bit, signal error on 
overflow"        ]
@@ -14214,8 +14215,7 @@ stdout of test 'MAL-signatures` in direc
 [ "calc",      "and",  "pattern calc.and(v1:int, v2:int):int ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
 [ "calc",      "and",  "pattern calc.and(v1:lng, v2:lng):lng ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
 [ "calc",      "and",  "pattern calc.and(v1:sht, v2:sht):sht ",        
"CMDvarAND;",   "Return V1 AND V2"      ]
-[ "calc",      "between",      "pattern calc.between(b:any_1, lo:any_1, 
hi:any_1):bit ",       "CMDvarBETWEEN;",       "B between LO and HI inclusive" ]
-[ "calc",      "between_symmetric",    "pattern 
calc.between_symmetric(b:any_1, v1:any_1, v2:any_1):bit ",     
"CMDvarBETWEENsymmetric;",      "B between V1 and V2 (or vice versa) inclusive" 
]
+[ "calc",      "between",      "pattern calc.between(b:any_1, lo:any_1, 
hi:any_1, sym:bit, linc:bit, hinc:bit, nils_false:bit):bit ",  
"CMDvarBETWEEN;",       "B between LO and HI inclusive" ]
 [ "calc",      "bit",  "pattern calc.bit(v:bit):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
 [ "calc",      "bit",  "pattern calc.bit(v:bte):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
 [ "calc",      "bit",  "pattern calc.bit(v:dbl):bit ", "CMDvarCONVERT;",       
"Cast VALUE to bit"     ]
@@ -16051,12 +16051,14 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "abort",        "pattern sql.abort():void ",    "SQLabort;",    
"Trigger the abort operation for a MAL block"   ]
 [ "sql",       "affectedRows", "unsafe pattern sql.affectedRows(mvc:int, 
nr:lng):int ",        "mvc_affected_rows_wrap;",      "export the number of 
affected rows by the current query"       ]
 [ "sql",       "all",  "inline function sql.all(b:bat[:any_1], gp:bat[:oid], 
gpe:bat[:oid], no_nil:bit):bat[:any_1];", "",     ""      ]
-[ "sql",       "all",  "command sql.all(col:bat[:any_1]):any_1 ",      
"SQLall;",      "if col contains exactly one value return this. Incase of more 
raise an exception else return nil"      ]
+[ "sql",       "all",  "command sql.all(col:bat[:any_1]):any_1 ",      
"SQLall;",      "if all values in col are equal return this, else nil"  ]
+[ "sql",       "all",  "command sql.all(cmp:bit, nl:bit, nr:bit):bit ",        
"SQLall_cmp;",  "if !cmp then false, (nl or nr) then nil, else true"    ]
 [ "sql",       "alpha",        "command sql.alpha(dec:dbl, theta:dbl):dbl ",   
"SQLcst_alpha_cst;",    "Implementation of astronomy alpha function: expands 
the radius theta depending on the declination"     ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, 
sample:lng):void ",    "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str):void ",   "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str, tbl:str):void ",  "sql_analyze;", ""      ]
 [ "sql",       "analyze",      "pattern sql.analyze(minmax:int, sample:lng, 
sch:str, tbl:str, col:str):void ", "sql_analyze;", "Update the database 
statistics table"  ]
+[ "sql",       "any",  "command sql.any(cmp:bit, nl:bit, nr:bit):bit ",        
"SQLany_cmp;",  "if cmp then true, (nl or nr) nil then nil, else false" ]
 [ "sql",       "append",       "pattern sql.append(mvc:int, sname:str, 
tname:str, cname:str, ins:any):int ",   "mvc_append_wrap;",     "Append to the 
column tname.cname (possibly optimized to replace the insert bat of 
tname.cname. Returns sequence number for order dependence."  ]
 [ "sql",       "argRecord",    "pattern sql.argRecord():str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
 [ "sql",       "argRecord",    "pattern sql.argRecord(a:any...):str ", 
"SQLargRecord;",        "Glue together the calling sequence"    ]
@@ -16164,6 +16166,7 @@ stdout of test 'MAL-signatures` in direc
 [ "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",       "null", "command sql.null(b:bat[:any_1]):bit ", "SQLnil;",      
"if b has a nil return true, else false"        ]
 [ "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"  ]
@@ -16276,6 +16279,8 @@ stdout of test 'MAL-signatures` in direc
 [ "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",       "window_bound", "pattern sql.window_bound(p:bit, b:any_1, 
unit:int, bound:int, excl:int, start:hge):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"      ]
+[ "sql",       "zero_or_one",  "command sql.zero_or_one(col:bat[:any_1], 
err:bit):any_1 ",     "zero_or_one_error;",   "if col contains exactly one 
value return this. Incase of more raise an exception if err is true else return 
nil"       ]
+[ "sql",       "zero_or_one",  "command sql.zero_or_one(col:bat[:any_1], 
err:bat[:bit]):any_1 ",       "zero_or_one_error_bat;",       "if col contains 
exactly one value return this. Incase of more raise an exception if err is true 
else return nil"       ]
 [ "sqlcatalog",        "alter_add_range_partition",    "pattern 
sqlcatalog.alter_add_range_partition(sname:str, mtnme:str, psnme:str, 
ptnme:str, min:any_1, max:any_1, nills:int, update:int):void ",  
"SQLalter_add_range_partition;",        "Catalog operation 
alter_add_range_partition"   ]
 [ "sqlcatalog",        "alter_add_table",      "pattern 
sqlcatalog.alter_add_table(sname:str, mtnme:str, psnme:str, ptnme:str, 
action:int):void ",     "SQLalter_add_table;",  "Catalog operation 
alter_add_table"     ]
 [ "sqlcatalog",        "alter_add_value_partition",    "pattern 
sqlcatalog.alter_add_value_partition(sname:str, mtnme:str, psnme:str, 
ptnme:str, nills:int, update:int):void ",        
"SQLalter_add_value_partition;",        "Catalog operation 
alter_add_value_partition"   ]
@@ -16313,7 +16318,7 @@ stdout of test 'MAL-signatures` in direc
 [ "sqlcatalog",        "grant_roles",  "pattern 
sqlcatalog.grant_roles(sname:str, auth:str, grantor:int, admin:int):void ",    
"SQLgrant_roles;",      "Catalog operation grant_roles" ]
 [ "sqlcatalog",        "rename_column",        "pattern 
sqlcatalog.rename_column(sname:str, tname:str, cname:str, newnme:str):void ",  
"SQLrename_column;",    "Catalog operation rename_column"       ]
 [ "sqlcatalog",        "rename_schema",        "pattern 
sqlcatalog.rename_schema(sname:str, newnme:str):void ",        
"SQLrename_schema;",    "Catalog operation rename_schema"       ]
-[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(sname:str, tname:str, newnme:str):void ",      
"SQLrename_table;",     "Catalog operation rename_table"        ]
+[ "sqlcatalog",        "rename_table", "pattern 
sqlcatalog.rename_table(osname:str, nsname:str, otname:str, ntname:str):void ", 
       "SQLrename_table;",     "Catalog operation rename_table"        ]
 [ "sqlcatalog",        "rename_user",  "pattern 
sqlcatalog.rename_user(sname:str, newnme:str, action:int):void ",      
"SQLrename_user;",      "Catalog operation rename_user" ]
 [ "sqlcatalog",        "revoke",       "pattern sqlcatalog.revoke(sname:str, 
tbl:str, grantee:str, privs:int, cname:str, grant:int, grantor:int):void ",     
  "SQLrevoke;",   "Catalog operation revoke"      ]
 [ "sqlcatalog",        "revoke_function",      "pattern 
sqlcatalog.revoke_function(sname:str, fcnid:int, grantee:str, privs:int, 
grant:int, grantor:int):void ",       "SQLrevoke_function;",  "Catalog 
operation revoke_function"     ]
@@ -16551,7 +16556,7 @@ stdout of test 'MAL-signatures` in direc
 [ "wlc",       "query",        "pattern wlc.query(q:str):void ",       
"WLCquery;",    "Keep the queries for replay."  ]
 [ "wlc",       "rename_column",        "pattern wlc.rename_column(sname:str, 
tname:str, cname:str, newnme:str):void ", "WLCgeneric;",  "Catalog operation 
rename_column"       ]
 [ "wlc",       "rename_schema",        "pattern wlc.rename_schema(sname:str, 
newnme:str):void ",       "WLCgeneric;",  "Catalog operation rename_schema"     
  ]
-[ "wlc",       "rename_table", "pattern wlc.rename_table(sname:str, tname:str, 
newnme:str):void ",     "WLCgeneric;",  "Catalog operation rename_table"        
]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to