Changeset: 1afa23bd6c44 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1afa23bd6c44
Added Files:
        debian/monetdb-python2.install
        sql/backends/monet5/Tests/shutdown.py
        sql/backends/monet5/Tests/shutdown.stable.err
        sql/backends/monet5/Tests/shutdown.stable.out
        sql/backends/monet5/UDF/pyapi/conversion.c
        sql/backends/monet5/UDF/pyapi/conversion.h
        sql/backends/monet5/UDF/pyapi/pyheader.h
        sql/backends/monet5/UDF/pyapi/undef.h
        sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.sql
        sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.stable.err
        sql/test/BugTracker-2016/Tests/case-column-when-null-Bug-6124.stable.out
        
sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.sql
        
sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.stable.err
        
sql/test/BugTracker-2016/Tests/column_name_lost_in_in_operator.Bug-6123.stable.out
        sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.sql
        
sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.stable.err
        
sql/test/BugTracker-2016/Tests/nested-subquery-in-select.Bug-6125.stable.out
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.sql
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.stable.err
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6119.stable.out
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.sql
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.err
        sql/test/BugTracker-2016/Tests/select-in-from.Bug-6121.stable.out
        tools/mserver/shutdowntest.c
Removed Files:
        sql/backends/monet5/UDF/pyapi/unspecified_evil.h
Modified Files:
        MonetDB.spec
        buildtools/ChangeLog.Dec2016
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        clients/mapiclient/tomograph.c
        configure.ag
        debian/control
        debian/monetdb-client-testing.install
        debian/monetdb5-server.install
        debian/rules
        gdk/ChangeLog
        gdk/ChangeLog.Dec2016
        gdk/gdk.h
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_bbp.c
        gdk/gdk_calc.c
        gdk/gdk_calc_compare.h
        gdk/gdk_hash.h
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_project.c
        gdk/gdk_search.c
        gdk/gdk_system.c
        gdk/gdk_utils.c
        gdk/gdk_utils.h
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
        monetdb5/extras/rapi/Tests/rapi02.stable.out
        monetdb5/extras/rapi/rapi.R
        monetdb5/mal/Tests/dataflow01.malC
        monetdb5/mal/Tests/performanceTests/join.malC
        monetdb5/mal/Tests/selecttest.malC
        monetdb5/mal/Tests/tst023.malC
        monetdb5/mal/Tests/tst033.malC
        monetdb5/mal/Tests/tst034.malC
        monetdb5/mal/Tests/tst1602.malC
        monetdb5/mal/Tests/tst201.malC
        monetdb5/mal/Tests/tst220.malC
        monetdb5/mal/Tests/tst285.malC
        monetdb5/mal/Tests/tst903.malC
        monetdb5/mal/Tests/tst903.stable.out
        monetdb5/mal/Tests/tst911.malC
        monetdb5/mal/Tests/tst911.stable.out
        monetdb5/mal/Tests/tst912.malC
        monetdb5/mal/mal.c
        monetdb5/mal/mal.h
        monetdb5/mal/mal_debugger.c
        monetdb5/mal/mal_instruction.c
        monetdb5/mal/mal_instruction.h
        monetdb5/mal/mal_module.c
        monetdb5/mal/mal_module.h
        monetdb5/mal/mal_profiler.c
        monetdb5/mal/mal_runtime.c
        monetdb5/mal/mal_session.c
        monetdb5/mal/mal_stack.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/atoms/mtime.c
        monetdb5/modules/atoms/uuid.c
        monetdb5/modules/kernel/aggr.mal
        monetdb5/modules/kernel/aggr.mal.sh
        monetdb5/modules/kernel/algebra.c
        monetdb5/modules/kernel/algebra.h
        monetdb5/modules/kernel/algebra.mal
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/kernel/bat5.h
        monetdb5/modules/kernel/bat5.mal
        monetdb5/modules/mal/Tests/inspect05.malC
        monetdb5/modules/mal/Tests/inspect05.stable.out.int128
        monetdb5/modules/mal/Tests/mapi01.malC
        monetdb5/modules/mal/Tests/mapi07.malC
        monetdb5/modules/mal/Tests/orderidx01.malC
        monetdb5/modules/mal/Tests/orderidx02.malC
        monetdb5/modules/mal/Tests/remote04.malC
        monetdb5/modules/mal/inspect.c
        monetdb5/modules/mal/manual.c
        monetdb5/modules/mal/mat.c
        monetdb5/modules/mal/pcre.c
        monetdb5/modules/mal/pcre.mal
        monetdb5/modules/mal/tablet.c
        monetdb5/modules/mosaic/mosaic_dictionary.c
        monetdb5/optimizer/Tests/CMexample.malC
        monetdb5/optimizer/Tests/CRexample.malC
        monetdb5/optimizer/Tests/CXexample.malC
        monetdb5/optimizer/Tests/CXexample.stable.out
        monetdb5/optimizer/Tests/DCexample.malC
        monetdb5/optimizer/Tests/FTexample.malC
        monetdb5/optimizer/Tests/GCexample01.stable.out
        monetdb5/optimizer/Tests/dataflow.malC
        monetdb5/optimizer/Tests/dataflow.stable.out
        monetdb5/optimizer/Tests/dataflow3.stable.out
        monetdb5/optimizer/Tests/mat00.malC
        monetdb5/optimizer/Tests/qep00.malC
        monetdb5/optimizer/Tests/qep01.malC
        monetdb5/optimizer/Tests/qep02.malC
        monetdb5/optimizer/Tests/reorder00.malC
        monetdb5/optimizer/Tests/reorder00.stable.out
        monetdb5/optimizer/Tests/tst4000.malC
        monetdb5/optimizer/Tests/tst4000.stable.out
        monetdb5/optimizer/Tests/tst4003.malC
        monetdb5/optimizer/Tests/tst4003.stable.out
        monetdb5/optimizer/Tests/tst4030.malC
        monetdb5/optimizer/Tests/tst4030.stable.out
        monetdb5/optimizer/Tests/tst4700.malC
        monetdb5/optimizer/opt_aliases.c
        monetdb5/optimizer/opt_candidates.c
        monetdb5/optimizer/opt_costModel.c
        monetdb5/optimizer/opt_emptybind.c
        monetdb5/optimizer/opt_garbageCollector.c
        monetdb5/optimizer/opt_generator.c
        monetdb5/optimizer/opt_jit.c
        monetdb5/optimizer/opt_matpack.c
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_multiplex.c
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_profiler.c
        monetdb5/optimizer/opt_pushselect.c
        monetdb5/optimizer/opt_querylog.c
        monetdb5/optimizer/opt_support.c
        monetdb5/optimizer/opt_support.h
        monetdb5/optimizer/opt_volcano.c
        monetdb5/optimizer/opt_wrapper.c
        sql/backends/monet5/LSST/lsst.c
        sql/backends/monet5/LSST/lsst.h
        sql/backends/monet5/LSST/lsst.mal
        sql/backends/monet5/Tests/All
        sql/backends/monet5/Tests/pyapi09.sql
        sql/backends/monet5/Tests/pyapi21.sql
        sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out
        sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out
        sql/backends/monet5/UDF/pyapi/Makefile.ag
        sql/backends/monet5/UDF/pyapi/connection.c
        sql/backends/monet5/UDF/pyapi/connection.h
        sql/backends/monet5/UDF/pyapi/convert_loops.h
        sql/backends/monet5/UDF/pyapi/emit.c
        sql/backends/monet5/UDF/pyapi/formatinput.c
        sql/backends/monet5/UDF/pyapi/formatinput.h
        sql/backends/monet5/UDF/pyapi/pyapi.c
        sql/backends/monet5/UDF/pyapi/pyapi.h
        sql/backends/monet5/UDF/pyapi/pyloader.c
        sql/backends/monet5/UDF/pyapi/pytypes.c
        sql/backends/monet5/UDF/pyapi/pytypes.h
        sql/backends/monet5/UDF/pyapi/type_conversion.c
        sql/backends/monet5/UDF/pyapi/type_conversion.h
        sql/backends/monet5/UDF/pyapi/unicode.c
        sql/backends/monet5/UDF/pyapi/unicode.h
        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_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_statement.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_select.c
        sql/storage/bat/bat_storage.c
        sql/storage/bat/bat_table.c
        sql/storage/store.c
        sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out
        
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
        
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
        sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.sql
        
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
        sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
        sql/test/BugTracker-2013/Tests/between.Bug-3259.sql
        sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128
        sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
        sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.sql
        sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out
        sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out.single
        sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out
        sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
        sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.sql
        sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
        sql/test/BugTracker-2016/Tests/All
        sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out
        sql/test/BugTracker-2016/Tests/storagemodel.stable.out.int128
        sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/Tests/setoptimizer.stable.out
        sql/test/Tests/setoptimizer.stable.out.Windows
        sql/test/mapi/Tests/sql_int128.stable.out
        sql/test/mergetables/Tests/mergequery.stable.out
        sql/test/remote/Tests/partition_elim.stable.out
        testing/Mtest.py.in
        tools/mserver/Makefile.ag
        tools/mserver/monet_version.c.in
Branch: mosaic
Log Message:

Text


diffs (truncated from 16048 to 300 lines):

diff --git a/MonetDB.spec b/MonetDB.spec
--- a/MonetDB.spec
+++ b/MonetDB.spec
@@ -87,6 +87,16 @@
 %endif
 %endif
 
+# If the _without_pyintegration macro is not set, the MonetDB-python2
+# RPM will be created.  The macro can be set when using mock by
+# passing it the flag --without=pyintegration.
+# On RHEL 6, numpy is too old.
+%if %{?rhel:0}%{!?rhel:1} || 0%{?rhel} >= 7
+%if %{?_without_pyintegration:0}%{!?_without_pyintegration:1}
+%define with_pyintegration 1
+%endif
+%endif
+
 %if %{fedpkgs}
 # If the _with_fits macro is set, the MonetDB-cfitsio RPM will be
 # created.  The macro can be set when using mock by passing it the
@@ -146,7 +156,6 @@ BuildRequires: libuuid-devel
 BuildRequires: libxml2-devel
 BuildRequires: openssl-devel
 BuildRequires: pcre-devel >= 4.5
-BuildRequires: python-devel
 BuildRequires: readline-devel
 BuildRequires: unixODBC-devel
 # BuildRequires: uriparser-devel
@@ -154,6 +163,20 @@ BuildRequires: zlib-devel
 %if %{?with_samtools:1}%{!?with_samtools:0}
 BuildRequires: samtools-devel
 %endif
+%if %{?with_pyintegration:1}%{!?with_pyintegration:0}
+BuildRequires: python-devel
+%if %{?rhel:1}%{!?rhel:0}
+# RedHat Enterprise Linux calls it simply numpy
+BuildRequires: numpy
+%else
+%if (0%{?fedora} >= 24)
+BuildRequires: python2-numpy
+%else
+# Fedora <= 23 doesn't have python2-numpy
+BuildRequires: numpy
+%endif
+%endif
+%endif
 %if %{?with_rintegration:1}%{!?with_rintegration:0}
 BuildRequires: R-core-devel
 %endif
@@ -387,6 +410,7 @@ developer.
 %{_bindir}/sample4
 %{_bindir}/smack00
 %{_bindir}/smack01
+%{_bindir}/shutdowntest
 %{_bindir}/testgetinfo
 %{_bindir}/malsample.pl
 %{_bindir}/sqlsample.php
@@ -509,6 +533,32 @@ install it.
 %{_libdir}/monetdb5/lib_rapi.so
 %endif
 
+%if %{?with_pyintegration:1}%{!?with_pyintegration:0}
+%package python2
+Summary: Integration of MonetDB and Python, allowing use of Python from within 
SQL
+Group: Applications/Databases
+Requires: MonetDB-SQL-server5%{?_isa} = %{version}-%{release}
+
+%description python2
+MonetDB is a database management system that is developed from a
+main-memory perspective with use of a fully decomposed storage model,
+automatic index management, extensibility of data types and search
+accelerators.  It also has an SQL frontend.
+
+This package contains the interface to use the Python language from
+within SQL queries.  This package is for Python 2.
+
+NOTE: INSTALLING THIS PACKAGE OPENS UP SECURITY ISSUES.  If you don't
+know how this package affects the security of your system, do not
+install it.
+
+%files python2
+%defattr(-,root,root)
+%{_libdir}/monetdb5/pyapi.*
+%{_libdir}/monetdb5/autoload/*_pyapi.mal
+%{_libdir}/monetdb5/lib_pyapi.so
+%endif
+
 %if %{?with_fits:1}%{!?with_fits:0}
 %package cfitsio
 Summary: MonetDB: Add on module that provides support for FITS files
@@ -537,7 +587,6 @@ Summary: MonetDB - Monet Database Manage
 Group: Applications/Databases
 Requires(pre): shadow-utils
 Requires: %{name}-client%{?_isa} = %{version}-%{release}
-Obsoletes: MonetDB5-server-rdf
 %if (0%{?fedora} >= 22)
 Recommends: %{name}-SQL-server5%{?_isa} = %{version}-%{release}
 %if %{bits} == 64
@@ -597,6 +646,9 @@ fi
 %if %{?with_lidar:1}%{!?with_lidar:0}
 %exclude %{_libdir}/monetdb5/lidar.mal
 %endif
+%if %{?with_pyintegration:1}%{!?with_pyintegration:0}
+%exclude %{_libdir}/monetdb5/pyapi.mal
+%endif
 %if %{?with_rintegration:1}%{!?with_rintegration:0}
 %exclude %{_libdir}/monetdb5/rapi.mal
 %endif
@@ -613,6 +665,9 @@ fi
 %if %{?with_lidar:1}%{!?with_lidar:0}
 %exclude %{_libdir}/monetdb5/autoload/*_lidar.mal
 %endif
+%if %{?with_pyintegration:1}%{!?with_pyintegration:0}
+%exclude %{_libdir}/monetdb5/autoload/*_pyapi.mal
+%endif
 %if %{?with_rintegration:1}%{!?with_rintegration:0}
 %exclude %{_libdir}/monetdb5/autoload/*_rapi.mal
 %endif
@@ -625,6 +680,9 @@ fi
 %if %{?with_lidar:1}%{!?with_lidar:0}
 %exclude %{_libdir}/monetdb5/lib_lidar.so
 %endif
+%if %{?with_pyintegration:1}%{!?with_pyintegration:0}
+%exclude %{_libdir}/monetdb5/lib_pyapi.so
+%endif
 %if %{?with_rintegration:1}%{!?with_rintegration:0}
 %exclude %{_libdir}/monetdb5/lib_rapi.so
 %endif
@@ -692,8 +750,6 @@ Requires: MonetDB5-server%{?_isa} = %{ve
 # RHEL >= 7, and all current Fedora
 Requires: %{_bindir}/systemd-tmpfiles
 %endif
-Obsoletes: MonetDB-SQL-devel
-Obsoletes: %{name}-SQL
 %if (0%{?fedora} >= 22)
 %if %{bits} == 64
 Recommends: %{name}-SQL-server5-hugeint%{?_isa} = %{version}-%{release}
@@ -784,7 +840,6 @@ frontend of MonetDB.
 %package testing
 Summary: MonetDB - Monet Database Management System
 Group: Applications/Databases
-Obsoletes: MonetDB-python
 
 %description testing
 MonetDB is a database management system that is developed from a
@@ -847,12 +902,12 @@ developer, but if you do want to test, t
        --enable-int128=%{?with_int128:yes}%{!?with_int128:no} \
        --enable-lidar=%{?with_lidar:yes}%{!?with_lidar:no} \
        --enable-mapi=yes \
-       --enable-microhttpd=no \
        --enable-monetdb5=yes \
        --enable-netcdf=no \
        --enable-odbc=yes \
        --enable-optimize=yes \
        --enable-profile=no \
+       
--enable-pyintegration=%{?with_pyintegration:yes}%{!?with_pyintegration:no} \
        
--enable-rintegration=%{?with_rintegration:yes}%{!?with_rintegration:no} \
        --enable-shp=no \
        --enable-sql=yes \
@@ -868,7 +923,8 @@ developer, but if you do want to test, t
        --with-openssl=yes \
        --with-proj=no \
        --with-pthread=yes \
-       --with-python=yes \
+       --with-python2=yes \
+       --with-python3=no \
        --with-readline=yes \
        --with-samtools=%{?with_samtools:yes}%{!?with_samtools:no} \
        --with-sphinxclient=no \
diff --git a/buildtools/ChangeLog.Dec2016 b/buildtools/ChangeLog.Dec2016
--- a/buildtools/ChangeLog.Dec2016
+++ b/buildtools/ChangeLog.Dec2016
@@ -1,6 +1,10 @@
 # ChangeLog file for buildtools
 # This file is updated with Maddlog
 
+* Tue Dec  6 2016 Sjoerd Mullender <[email protected]>
+- New packages MonetDB-python2 (Fedora) and monetdb-python2 (Debian/Ubuntu)
+  have been created for Python 2 integration into MonetDB.
+
 * Tue Jul 19 2016 Stefan Manegold <[email protected]>
 - With OID size equal to ABI/word size, mserver5 does not need to print
   the OID size, anymore.
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
@@ -461,8 +461,11 @@ Ready.
 [ "alarm",     "sleep",        "command alarm.sleep(secs:int):void ",  
"ALARMsleep;",  "Sleep a few seconds"   ]
 [ "alarm",     "time", "command alarm.time():int ",    "ALARMtime;",   "Return 
time in milliseconds."  ]
 [ "alarm",     "usec", "command alarm.usec():lng ",    "ALARMusec;",   "Return 
time in microseconds."  ]
+[ "algebra",   "antijoin",     "function 
algebra.antijoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]);", "",     ""      ]
+[ "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",   "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." ]
@@ -475,42 +478,39 @@ Ready.
 [ "algebra",   "groupby",      "command 
algebra.groupby(gids:bat[:oid],cnts:bat[:lng]):bat[:oid] ",    "ALGgroupby;",  
"Produces a new BAT with groups identified by the head column. The result 
contains tail times the head value, ie the tail contains the result group 
sizes."     ]
 [ "algebra",   "ilike",        "command algebra.ilike(s:str,pat:str):bit ",    
"PCREilike2;",  ""      ]
 [ "algebra",   "ilike",        "command 
algebra.ilike(s:str,pat:str,esc:str):bit ",    "PCREilike3;",  ""      ]
-[ "algebra",   "ilikesubjoin", "command 
algebra.ilikesubjoin(l:bat[:str],r:bat[:str],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",  "ILIKEsubjoin1;",       ""      ]
-[ "algebra",   "ilikesubjoin", "command 
algebra.ilikesubjoin(l:bat[:str],r:bat[:str],esc:str,sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",  "ILIKEsubjoin;",        "Join the string bat 
L with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case insensitive match.\nThe result is two 
aligned bats with oids of matching rows."        ]
-[ "algebra",   "ilikesubselect",       "command 
algebra.ilikesubselect(b:bat[:str],cand:bat[:oid],pat:str,esc:str,anti:bit):bat[:oid]
 ",       "PCRElikesubselect1;",  ""      ]
-[ "algebra",   "ilikesubselect",       "command 
algebra.ilikesubselect(b:bat[:str],cand:bat[:oid],pat:str,anti:bit):bat[:oid] 
",       "PCRElikesubselect4;",  ""      ]
+[ "algebra",   "ilikejoin",    "command 
algebra.ilikejoin(l:bat[:str],r:bat[:str],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",     "ILIKEjoin1;",  ""      ]
+[ "algebra",   "ilikejoin",    "command 
algebra.ilikejoin(l:bat[:str],r:bat[:str],esc:str,sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",     "ILIKEjoin;",   "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case insensitive match.\nThe result is two 
aligned bats with oids of matching rows."        ]
+[ "algebra",   "ilikeselect",  "command 
algebra.ilikeselect(b:bat[:str],cand:bat[:oid],pat:str,esc:str,anti:bit):bat[:oid]
 ",  "PCRElikeselect1;",     ""      ]
+[ "algebra",   "ilikeselect",  "command 
algebra.ilikeselect(b:bat[:str],cand:bat[:oid],pat:str,anti:bit):bat[:oid] ",  
"PCRElikeselect4;",     ""      ]
+[ "algebra",   "intersect",    "command 
algebra.intersect(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng):bat[:oid]
 ",     "ALGintersect;",        "Intersection of l and r with candidate lists 
(i.e. half of semi-join)" ]
+[ "algebra",   "join", "command 
algebra.join(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",      "ALGjoin;",     "Join"  ]
+[ "algebra",   "leftjoin",     "command 
algebra.leftjoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",  "ALGleftjoin;", "Left join with candidate 
lists"        ]
 [ "algebra",   "like", "command algebra.like(s:str,pat:str):bit ",     
"PCRElike2;",   ""      ]
 [ "algebra",   "like", "command algebra.like(s:str,pat:str,esc:str):bit ",     
"PCRElike3;",   ""      ]
-[ "algebra",   "likesubjoin",  "command 
algebra.likesubjoin(l:bat[:str],r:bat[:str],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",   "LIKEsubjoin1;",        ""      ]
-[ "algebra",   "likesubjoin",  "command 
algebra.likesubjoin(l:bat[:str],r:bat[:str],esc:str,sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",   "LIKEsubjoin;", "Join the string bat L with 
the pattern bat R\nwith optional candidate lists SL and SR using pattern escape 
string ESC\nand doing a case sensitive match.\nThe result is two aligned bats 
with oids of matching rows."  ]
-[ "algebra",   "likesubselect",        "command 
algebra.likesubselect(b:bat[:str],s:bat[:oid],pat:str,esc:str,caseignore:bit,anti:bit):bat[:oid]
 ",    "PCRElikesubselect2;",  "Select all head values of the first input BAT 
for which the\n\ttail value is \"like\" the given (SQL-style) pattern and 
for\n\twhich the head value occurs in the tail of the second 
input\n\tBAT.\n\tInput is a dense-headed BAT, output is a dense-headed BAT with 
in\n\tthe tail the head value of the input BAT for which the\n\trelationship 
holds.  The output BAT is sorted on the tail value." ]
-[ "algebra",   "likesubselect",        "command 
algebra.likesubselect(b:bat[:str],cand:bat[:oid],pat:str,esc:str,anti:bit):bat[:oid]
 ",        "PCRElikesubselect3;",  ""      ]
-[ "algebra",   "likesubselect",        "command 
algebra.likesubselect(b:bat[:str],cand:bat[:oid],pat:str,anti:bit):bat[:oid] ", 
       "PCRElikesubselect5;",  ""      ]
+[ "algebra",   "likejoin",     "command 
algebra.likejoin(l:bat[:str],r:bat[:str],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",      "LIKEjoin1;",   ""      ]
+[ "algebra",   "likejoin",     "command 
algebra.likejoin(l:bat[:str],r:bat[:str],esc:str,sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",      "LIKEjoin;",    "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case sensitive match.\nThe result is two aligned 
bats with oids of matching rows."  ]
+[ "algebra",   "likeselect",   "command 
algebra.likeselect(b:bat[:str],s:bat[:oid],pat:str,esc:str,caseignore:bit,anti:bit):bat[:oid]
 ",       "PCRElikeselect2;",     "Select all head values of the first input 
BAT for which the\n\ttail value is \"like\" the given (SQL-style) pattern and 
for\n\twhich the head value occurs in the tail of the second 
input\n\tBAT.\n\tInput is a dense-headed BAT, output is a dense-headed BAT with 
in\n\tthe tail the head value of the input BAT for which the\n\trelationship 
holds.  The output BAT is sorted on the tail value." ]
+[ "algebra",   "likeselect",   "command 
algebra.likeselect(b:bat[:str],cand:bat[:oid],pat:str,esc:str,anti:bit):bat[:oid]
 ",   "PCRElikeselect3;",     ""      ]
+[ "algebra",   "likeselect",   "command 
algebra.likeselect(b:bat[:str],cand:bat[:oid],pat:str,anti:bit):bat[:oid] ",   
"PCRElikeselect5;",     ""      ]
 [ "algebra",   "not_ilike",    "command algebra.not_ilike(s:str,pat:str):bit 
",        "PCREnotilike2;",       ""      ]
 [ "algebra",   "not_ilike",    "command 
algebra.not_ilike(s:str,pat:str,esc:str):bit ",        "PCREnotilike3;",       
""      ]
 [ "algebra",   "not_like",     "command algebra.not_like(s:str,pat:str):bit ", 
"PCREnotlike2;",        ""      ]
 [ "algebra",   "not_like",     "command 
algebra.not_like(s:str,pat:str,esc:str):bit ", "PCREnotlike3;",        ""      ]
 [ "algebra",   "orderidx",     "command 
algebra.orderidx(bv:bat[:any_1],stable:bit):bat[:any_1] ",     "OIDXorderidx;", 
       "Create an order index" ]
+[ "algebra",   "outerjoin",    "command 
algebra.outerjoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ", "ALGouterjoin;",        "Left outer join with 
candidate lists"  ]
 [ "algebra",   "project",      "pattern 
algebra.project(b:bat[:any_1],v:any_3):bat[:any_3] ",  "ALGprojecttail;",      
"Fill the tail with a constant" ]
 [ "algebra",   "projection",   "command 
algebra.projection(left:bat[:oid],right:bat[:any_3]):bat[:any_3] ",    
"ALGprojection;",       "Project left input onto right input."  ]
 [ "algebra",   "projectionpath",       "pattern 
algebra.projectionpath(l:bat[:any]...):bat[:any] ",    "ALGprojectionpath;",   
"Routine to handle join paths.  The type analysis is rather tricky."    ]
+[ "algebra",   "rangejoin",    "command 
algebra.rangejoin(l:bat[:any_1],r1:bat[:any_1],r2:bat[:any_1],sl:bat[:oid],sr:bat[:oid],li:bit,hi:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",   "ALGrangejoin;",        "Range join: values 
in l and r1/r2 match if r1 <[=] l <[=] r2"  ]
 [ "algebra",   "reuse",        "command 
algebra.reuse(b:bat[:any_1]):bat[:any_1] ",    "ALGreuse;",    "Reuse a 
temporary BAT if you can. Otherwise,\n\tallocate enough storage to accept 
result of an\n \toperation (not involving the heap)" ]
+[ "algebra",   "select",       "command 
algebra.select(b:bat[:any_1],low:any_1,high:any_1,li:bit,hi:bit,anti:bit):bat[:oid]
 ", "ALGselect1;",  "Select all head values for which the tail value is in 
range.\n\tInput is a dense-headed BAT, output is a dense-headed BAT with 
in\n\tthe tail the head value of the input BAT for which the tail value\n\tis 
between the values low and high (inclusive if li respectively\n\thi is set).  
The output BAT is sorted on the tail value.  If low\n\tor high is nil, the 
boundary is not considered (effectively - and\n\t+ infinity).  If anti is set, 
the result is the complement.  Nil\n\tvalues in the tail are never matched, 
unless low=nil, high=nil,\n\tli=1, hi=1, anti=0.  All non-nil values are 
returned if low=nil,\n\thigh=nil, and li, hi are not both 1, or anti=1.\n\tNote 
that the output is suitable as second input for the other\n\tversion of this 
function."      ]
+[ "algebra",   "select",       "command 
algebra.select(b:bat[:any_1],s:bat[:oid],low:any_1,high:any_1,li:bit,hi:bit,anti:bit):bat[:oid]
 ",     "ALGselect2;",  "Select all head values of the first input BAT for 
which the tail value\n\tis in range and for which the head value occurs in the 
tail of the\n\tsecond input BAT.\n\tThe first input is a dense-headed BAT, the 
second input is a\n\tdense-headed BAT with sorted tail, output is a 
dense-headed BAT\n\twith in the tail the head value of the input BAT for which 
the\n\ttail value is between the values low and high (inclusive if 
li\n\trespectively hi is set).  The output BAT is sorted on the tail\n\tvalue.  
If low or high is nil, the boundary is not considered\n\t(effectively - and + 
infinity).  If anti is set, the result is the\n\tcomplement.  Nil values in the 
tail are never matched, unless\n\tlow=nil, high=nil, li=1, hi=1, anti=0.  All 
non-nil values are\n\treturned if low=nil, high=nil, and li, hi are not both 1, 
or anti=1.\n\tNote that the outp
 ut is suitable as second input for this\n\tfunction."  ]
 [ "algebra",   "selectNotNil", "command 
algebra.selectNotNil(b:bat[:any_2]):bat[:any_2] ",     "ALGselectNotNil;",     
"Select all not-nil values"     ]
+[ "algebra",   "semijoin",     "command 
algebra.semijoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",  "ALGsemijoin;", "Semi join with candidate 
lists"        ]
 [ "algebra",   "slice",        "command 
algebra.slice(b:bat[:any_1],x:lng,y:lng):bat[:any_1] ",        "ALGslice;",    
"Return the slice with the BUNs at position x till y."  ]
 [ "algebra",   "slice",        "command 
algebra.slice(b:bat[:any_1],x:int,y:int):bat[:any_1] ",        "ALGslice_int;", 
       "Return the slice with the BUNs at position x till y."  ]
 [ "algebra",   "slice",        "command 
algebra.slice(b:bat[:any_1],x:lng,y:lng):bat[:any_1] ",        "ALGslice_lng;", 
       "Return the slice with the BUNs at position x till y."  ]
 [ "algebra",   "slice",        "command 
algebra.slice(b:bat[:any_1],x:oid,y:oid):bat[:any_1] ",        "ALGslice_oid;", 
       "Return the slice based on head oid x till y (exclusive)."      ]
-[ "algebra",   "subantijoin",  "function 
algebra.subantijoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]);",      "",     ""      ]
-[ "algebra",   "subbandjoin",  "command 
algebra.subbandjoin(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]) ",       "ALGsubbandjoin;",      "Band join: 
values in l and r match if r - c1 <[=] l <[=] r + c2"       ]
-[ "algebra",   "subdiff",      "command 
algebra.subdiff(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng):bat[:oid]
 ",       "ALGsubdiff;",  "Difference of l and r with candidate lists"    ]
-[ "algebra",   "subinter",     "command 
algebra.subinter(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng):bat[:oid]
 ",      "ALGsubinter;", "Intersection of l and r with candidate lists (i.e. 
half of semi-join)" ]
-[ "algebra",   "subjoin",      "command 
algebra.subjoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",   "ALGsubjoin;",  "Join"  ]
-[ "algebra",   "subleftjoin",  "command 
algebra.subleftjoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",       "ALGsubleftjoin;",      "Left join with 
candidate lists"        ]
-[ "algebra",   "subouterjoin", "command 
algebra.subouterjoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",      "ALGsubouterjoin;",     "Left outer join 
with candidate lists"  ]
-[ "algebra",   "subrangejoin", "command 
algebra.subrangejoin(l:bat[:any_1],r1:bat[:any_1],r2:bat[:any_1],sl:bat[:oid],sr:bat[:oid],li:bit,hi:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",        "ALGsubrangejoin;",     "Range join: 
values in l and r1/r2 match if r1 <[=] l <[=] r2"  ]
-[ "algebra",   "subselect",    "command 
algebra.subselect(b:bat[:any_1],low:any_1,high:any_1,li:bit,hi:bit,anti:bit):bat[:oid]
 ",      "ALGsubselect1;",       "Select all head values for which the tail 
value is in range.\n\tInput is a dense-headed BAT, output is a dense-headed BAT 
with in\n\tthe tail the head value of the input BAT for which the tail 
value\n\tis between the values low and high (inclusive if li respectively\n\thi 
is set).  The output BAT is sorted on the tail value.  If low\n\tor high is 
nil, the boundary is not considered (effectively - and\n\t+ infinity).  If anti 
is set, the result is the complement.  Nil\n\tvalues in the tail are never 
matched, unless low=nil, high=nil,\n\tli=1, hi=1, anti=0.  All non-nil values 
are returned if low=nil,\n\thigh=nil, and li, hi are not both 1, or 
anti=1.\n\tNote that the output is suitable as second input for the 
other\n\tversion of this function."      ]
-[ "algebra",   "subselect",    "command 
algebra.subselect(b:bat[:any_1],s:bat[:oid],low:any_1,high:any_1,li:bit,hi:bit,anti:bit):bat[:oid]
 ",  "ALGsubselect2;",       "Select all head values of the first input BAT for 
which the tail value\n\tis in range and for which the head value occurs in the 
tail of the\n\tsecond input BAT.\n\tThe first input is a dense-headed BAT, the 
second input is a\n\tdense-headed BAT with sorted tail, output is a 
dense-headed BAT\n\twith in the tail the head value of the input BAT for which 
the\n\ttail value is between the values low and high (inclusive if 
li\n\trespectively hi is set).  The output BAT is sorted on the tail\n\tvalue.  
If low or high is nil, the boundary is not considered\n\t(effectively - and + 
infinity).  If anti is set, the result is the\n\tcomplement.  Nil values in the 
tail are never matched, unless\n\tlow=nil, high=nil, li=1, hi=1, anti=0.  All 
non-nil values are\n\treturned if low=nil, high=nil, and li, hi are not both 1, 
or anti=1.\n\tNote that
  the output is suitable as second input for this\n\tfunction." ]
-[ "algebra",   "subsemijoin",  "command 
algebra.subsemijoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",       "ALGsubsemijoin;",      "Semi join with 
candidate lists"        ]
 [ "algebra",   "subslice",     "command 
algebra.subslice(b:bat[:any_1],x:lng,y:lng):bat[:oid] ",       
"ALGsubslice_lng;",     "Return the oids of the slice with the BUNs at position 
x till y."      ]
 [ "algebra",   "subsort",      "command 
algebra.subsort(b:bat[:any_1],reverse:bit,stable:bit):bat[:any_1] ",   
"ALGsubsort11;",        "Returns a copy of the BAT sorted on tail values.\n     
    The input and output are (must be) dense headed.\n         The order is 
descending if the reverse bit is set.\n\t\t This is a stable sort if the stable 
bit is set."        ]
 [ "algebra",   "subsort",      "command 
algebra.subsort(b:bat[:any_1],reverse:bit,stable:bit) 
(X_0:bat[:any_1],X_1:bat[:oid]) ",       "ALGsubsort12;",        "Returns a 
copy of the BAT sorted on tail values and a BAT that\n         specifies how 
the input was reordered.\n         The input and output are (must be) dense 
headed.\n         The order is descending if the reverse bit is set.\n\t\t This 
is a stable sort if the stable bit is set." ]
@@ -521,11 +521,11 @@ Ready.
 [ "algebra",   "subsort",      "command 
algebra.subsort(b:bat[:any_1],o:bat[:oid],g:bat[:oid],reverse:bit,stable:bit):bat[:any_1]
 ",   "ALGsubsort31;",        "Returns a copy of the BAT sorted on tail 
values.\n         The input and output are (must be) dense headed.\n         
The order is descending if the reverse bit is set.\n\t\t This is a stable sort 
if the stable bit is set."        ]
 [ "algebra",   "subsort",      "command 
algebra.subsort(b:bat[:any_1],o:bat[:oid],g:bat[:oid],reverse:bit,stable:bit) 
(X_0:bat[:any_1],X_1:bat[:oid]) ",       "ALGsubsort32;",        "Returns a 
copy of the BAT sorted on tail values and a BAT that\n         specifies how 
the input was reordered.\n         The input and output are (must be) dense 
headed.\n         The order is descending if the reverse bit is set.\n\t\t This 
is a stable sort if the stable bit is set." ]
 [ "algebra",   "subsort",      "command 
algebra.subsort(b:bat[:any_1],o:bat[:oid],g:bat[:oid],reverse:bit,stable:bit) 
(X_0:bat[:any_1],X_1:bat[:oid],X_2:bat[:oid]) ", "ALGsubsort33;",        
"Returns a copy of the BAT sorted on tail values, a BAT that specifies\n        
 how the input was reordered, and a BAT with group information.\n         The 
input and output are (must be) dense headed.\n         The order is descending 
if the reverse bit is set.\n\t\t This is a stable sort if the stable bit is 
set."  ]
-[ "algebra",   "subthetajoin", "command 
algebra.subthetajoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],op:int,nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",       "ALGsubthetajoin;",     "Theta join 
with candidate lists"       ]
-[ "algebra",   "subunique",    "command 
algebra.subunique(b:bat[:any_1]):bat[:oid] ",  "ALGsubunique1;",       "Select 
all unique values from the tail of the input.\n\tInput is a dense-headed BAT, 
output is a dense-headed BAT with\n\tin the tail the head value of the input 
BAT that was selected.\n\tThe output BAT is sorted on the tail value."       ]
-[ "algebra",   "subunique",    "command 
algebra.subunique(b:bat[:any_1],s:bat[:oid]):bat[:oid] ",      
"ALGsubunique2;",       "Select all unique values from the tail of the first 
input.\n\tInput is a dense-headed BAT, the second input is a\n\tdense-headed 
BAT with sorted tail, output is a dense-headed\n\tBAT with in the tail the head 
value of the input BAT that was\n\tselected.  The output BAT is sorted on the 
tail value.  The\n\tsecond input BAT is a list of candidates."  ]
-[ "algebra",   "thetasubselect",       "command 
algebra.thetasubselect(b:bat[:any_1],val:any_1,op:str):bat[:oid] ",    
"ALGthetasubselect1;",  "Select all head values for which the tail value obeys 
the relation\n\tvalue OP VAL.\n\tInput is a dense-headed BAT, output is a 
dense-headed BAT with in\n\tthe tail the head value of the input BAT for which 
the\n\trelationship holds.  The output BAT is sorted on the tail value."        
]
-[ "algebra",   "thetasubselect",       "command 
algebra.thetasubselect(b:bat[:any_1],s:bat[:oid],val:any_1,op:str):bat[:oid] ", 
       "ALGthetasubselect2;",  "Select all head values of the first input BAT 
for which the tail value\n\tobeys the relation value OP VAL and for which the 
head value occurs in\n\tthe tail of the second input BAT.\n\tInput is a 
dense-headed BAT, output is a dense-headed BAT with in\n\tthe tail the head 
value of the input BAT for which the\n\trelationship holds.  The output BAT is 
sorted on the tail value."      ]
+[ "algebra",   "thetajoin",    "command 
algebra.thetajoin(l:bat[:any_1],r:bat[:any_1],sl:bat[:oid],sr:bat[:oid],op:int,nil_matches:bit,estimate:lng)
 (X_0:bat[:oid],X_1:bat[:oid]) ",  "ALGthetajoin;",        "Theta join with 
candidate lists"       ]
+[ "algebra",   "thetaselect",  "command 
algebra.thetaselect(b:bat[:any_1],val:any_1,op:str):bat[:oid] ",       
"ALGthetaselect1;",     "Select all head values for which the tail value obeys 
the relation\n\tvalue OP VAL.\n\tInput is a dense-headed BAT, output is a 
dense-headed BAT with in\n\tthe tail the head value of the input BAT for which 
the\n\trelationship holds.  The output BAT is sorted on the tail value."        
]
+[ "algebra",   "thetaselect",  "command 
algebra.thetaselect(b:bat[:any_1],s:bat[:oid],val:any_1,op:str):bat[:oid] ",   
"ALGthetaselect2;",     "Select all head values of the first input BAT for 
which the tail value\n\tobeys the relation value OP VAL and for which the head 
value occurs in\n\tthe tail of the second input BAT.\n\tInput is a dense-headed 
BAT, output is a dense-headed BAT with in\n\tthe tail the head value of the 
input BAT for which the\n\trelationship holds.  The output BAT is sorted on the 
tail value."      ]
+[ "algebra",   "unique",       "command 
algebra.unique(b:bat[:any_1]):bat[:oid] ",     "ALGunique1;",  "Select all 
unique values from the tail of the input.\n\tInput is a dense-headed BAT, 
output is a dense-headed BAT with\n\tin the tail the head value of the input 
BAT that was selected.\n\tThe output BAT is sorted on the tail value."       ]
+[ "algebra",   "unique",       "command 
algebra.unique(b:bat[:any_1],s:bat[:oid]):bat[:oid] ", "ALGunique2;",  "Select 
all unique values from the tail of the first input.\n\tInput is a dense-headed 
BAT, the second input is a\n\tdense-headed BAT with sorted tail, output is a 
dense-headed\n\tBAT with in the tail the head value of the input BAT that 
was\n\tselected.  The output BAT is sorted on the tail value.  The\n\tsecond 
input BAT is a list of candidates."  ]
 [ "bam",       "bam_drop_file",        "pattern 
bam.bam_drop_file(file_id:lng,dbschema:sht):void ",    "bam_drop_file;",       
"Drop alignment tables and header data for the bam file with the given file_id" 
]
 [ "bam",       "bam_export",   "pattern bam.bam_export(output_path:str):void 
",        "bam_exportf;", "Export results in the bam.export table to a BAM 
file"  ]
 [ "bam",       "bam_flag",     "command bam.bam_flag(flag:sht,name:str):bit ", 
"bam_flag;",    "Get bam flag by name." ]
@@ -537,6 +537,8 @@ Ready.
 [ "bam",       "sam_export",   "pattern bam.sam_export(output_path:str):void 
",        "sam_exportf;", "Export results in the bam.export table to a SAM 
file"  ]
 [ "bam",       "seq_char",     "command 
bam.seq_char(ref_pos:int,alg_seq:str,alg_pos:int,alg_cigar:str):str ", 
"seq_char;",    "Calculate the character in the alignment string (alg_str) that 
is aligned to position 'ref_pos', conforming to the given cigar string" ]
 [ "bam",       "seq_length",   "command bam.seq_length(cigar:str):int ",       
"seq_length;",  "Calculate the real length of a DNA sequence, given its CIGAR 
string."  ]
+[ "bat",       "append",       "command 
bat.append(i:bat[:any_1],u:bat[:any_1],s:bat[:oid],force:bit):bat[:any_1] ",   
"BKCappend_cand_force_wrap;",   "append the content of u with candidate list s 
to i"    ]
+[ "bat",       "append",       "command 
bat.append(i:bat[:any_1],u:bat[:any_1],s:bat[:oid]):bat[:any_1] ",     
"BKCappend_cand_wrap;", "append the content of u with candidate list s to i"    
]
 [ "bat",       "append",       "command 
bat.append(i:bat[:any_1],u:bat[:any_1],force:bit):bat[:any_1] ",       
"BKCappend_force_wrap;",        "append the content of u to i"  ]
 [ "bat",       "append",       "command 
bat.append(i:bat[:any_1],u:any_1,force:bit):bat[:any_1] ",     
"BKCappend_val_force_wrap;",    "append the value u to i"       ]
 [ "bat",       "append",       "command 
bat.append(i:bat[:any_1],u:any_1):bat[:any_1] ",       "BKCappend_val_wrap;",  
"append the value u to i"       ]
@@ -599,7 +601,7 @@ Ready.
 [ "bat",       "setColumn",    "command 
bat.setColumn(b:bat[:any_1],t:str):void ",     "BKCsetColumn;",        "Give a 
logical name to the tail column of a BAT."      ]
 [ "bat",       "setHash",      "command bat.setHash(b:bat[:any_1]):bit ",      
"BKCsetHash;",  "Create a hash structure on the column" ]
 [ "bat",       "setImprints",  "command bat.setImprints(b:bat[:any_1]):bit ",  
"BKCsetImprints;",      "Create an imprints structure on the column"    ]
-[ "bat",       "setKey",       "command 
bat.setKey(b:bat[:any_1],mode:bit):bat[:any_1] ",      "BKCsetkey;",   "Sets 
the 'key' property of the tail column to 'mode'. In 'key' mode, \n        the 
kernel will silently block insertions that cause a duplicate \n        entries 
in the head column. KNOWN BUG:when 'key' is set to TRUE, this \n\t\tfunction 
does not automatically eliminate duplicates. "  ]
+[ "bat",       "setKey",       "command 
bat.setKey(b:bat[:any_1],mode:bit):bat[:any_1] ",      "BKCsetkey;",   "Sets 
the 'key' property of the tail column to 'mode'. In 'key' mode,\n        the 
kernel will silently block insertions that cause a duplicate\n        entry in 
the head column."     ]
 [ "bat",       "setName",      "command bat.setName(b:bat[:any_1],s:str):void 
",       "BKCsetName;",  "Give a logical name to a BAT. "        ]
 [ "bat",       "setPersistent",        "command 
bat.setPersistent(b:bat[:any_1]):void ",       "BKCsetPersistent;",    "Make 
the BAT persistent."      ]
 [ "bat",       "setTransient", "command bat.setTransient(b:bat[:any_1]):void 
",        "BKCsetTransient;",     "Make the BAT transient.  Returns \n\tboolean 
which indicates if the\nBAT administration has indeed changed."   ]
@@ -8474,8 +8476,8 @@ Ready.
 [ "sql",       "password",     "pattern sql.password(user:str):str ",  
"db_password_wrap;",    "Return password hash of user"  ]
 [ "sql",       "prelude",      "command sql.prelude():void ",  "SQLprelude;",  
""      ]
 [ "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(subselect: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(subselect: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."       ]
+[ "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."     
  ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to